前言
docker是個好東西,小樹莓派上也能快速部署,方便管理環境。用這篇筆記來記錄下各種軟件的快速部署方式
準備環境
docker安裝
curl -fsSL https://get.docker.com -o get-docker.sh
sh ./get-docker.sh
docker鏡像源配置
一種方法是設置proxy,可以修改/etc/systemd/system/docker.service.d/http-proxy.conf
文件,設置對應的ip和port:
[Service]
Environment="HTTP_PROXY=http://xxx:xxx/"
Environment="HTTPS_PROXY=http://xxx:xxx/"
另一種方法是修改/etc/docker/daemon.json
,設置鏡像源(可以參考這篇博客配置下),方便之后docker pull
。
{ "registry-mirrors": ["https://xxxxxxxxx"] }
最后重啟一下docker服務systemctl daemon-reload && systemctl restart docker
常用docker服務
基本思路是安裝鏡像-啟動容器。以下均假設root用戶。
nginx網站服務器
# 下載鏡像 也可以換成nginx:latest
docker pull nginx:1.27.4# 首先隨便啟動一個nginx容器
docker run --name nginx -d nginx:1.27.4# 把默認的配置文件拷貝到本地。這樣之后直接在宿主機上修改就行,不用進容器。
docker cp nginx:/etc/nginx /root/nginx_config
docker cp nginx:/usr/share/nginx /root/nginx_website# 刪除nginx容器
docker stop nginx && docker rm nginx# 重新創建nginx容器
# —network host表示共享主機網絡。比如nginx conf里配置把某些路徑轉發給主機運行的flask處理,可以方便地直接用。如果不需要共享宿主機網絡,也可以 -p 80:80 -p 443:443 開放兩個端口
docker run -itd --name nginx --network host -v /root/nginx_config:/etc/nginx -v /root/nginx_website:/usr/share/nginx -v /root/nginx_logs:/var/log/nginx -v /etc/localtime:/etc/localtime:ro -v /etc/timezone:/etc/timezone:ro nginx:1.27.4
在使用時,將每個站點組織為一個文件夾,放在宿主機/root/nginx_website/xxx
內,然后修改宿主機/root/nginx_config/conf.d
內的conf文件,修改root /usr/share/nginx/xxx
的xxx為對應的網頁根目錄即可。
mysql 8.0數據庫服務
參考資料
# 下載鏡像
docker pull mysql/mysql-server:8.0.32# 啟動容器并拷貝環境,注意<root_password>要進行替換
mkdir -p /root/mysql/logs /root/mysql/conf
docker run -d --name mysql -e MYSQL_ROOT_PASSWORD=<root_password> mysql/mysql-server:8.0.32
docker cp mysql:/var/lib/mysql /root/mysql/data
docker stop mysql && docker rm mysql# 設置777權限,否則docker容器無法正常啟動
chmod -R 777 /root/mysql/data
chmod -R 777 /root/mysql/logs# 簡單配置一下
cat > /root/mysql/conf/my.cnf << EOF
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
authentication_policy=*[client]
default-character-set=utf8mb4[mysql]
default-character-set=utf8mb4
EOF# 啟動正式環境(宿主機33060映射到容器內部3306),由于之前拷貝了data目錄,這里不會重新初始化,密碼就是之前設定的
docker run -d --name mysql --restart always -p 33060:3306 -v /root/mysql/data:/var/lib/mysql -v /root/mysql/conf:/etc/mysql -v /root/mysql/logs:/var/log -v /etc/localtime:/etc/localtime:ro -v /etc/timezone:/etc/timezone:ro mysql/mysql-server:8.0.32# 由于docker容器內部網絡獨立,而默認的root@localhost用戶會拒絕來自宿主機的連接,所以需要創建一個新的允許指定ip來源的用戶。這里為了方便起見,使用root@%用戶允許任何ip地址
docker exec -it mysql bash
mysql -uroot -p # 然后輸入之前設置的root_password密碼 隨后可以用select user,host from mysql.user;查詢已有用戶
create user 'root'@'%' identified with mysql_native_password by '<root_password>';
grant all privileges on *.* to 'root'@'%' with grant option;
flush privileges;
# 刪除用戶時,使用 drop user 'root'@'%';## 以下為官方提供的指令,僅供參考,不需要執行
# 檢查默認密碼。如果啟動容器時沒有掛載data,可以執行下面的操作檢查一下初始密碼
docker logs mysql 2>&1 | grep GENERATED# 重置密碼
docker exec -it mysql mysql -uroot -p
ALTER USER 'root'@'localhost' IDENTIFIED BY 'some_new_passwd';
配置好后,如果需要遷移舊數據到這里,可以使用mysqldump進行導出,示例:
# 數據導出
mysqldump -u root -p --databases <database_name> -P <mysql_port> --add-drop-database --add-drop-table > xxx.sql
# 數據導入,首先需要創建空數據庫,然后進行導入。這里直接把密碼寫在命令行里了
docker exec -it mysql mysql -uroot -p -e "create database if not exists <database_name>;"
docker exec -it mysql mysql -uroot -p<root_password> <database_name> < xxx.sql
# 除了在外部使用docker exec,比較推薦進容器內部進行導入
mysql> create database if not exists <database_name>;
mysql> use <database_name>;
mysql> source xxx.sql; # 需要提前docker cp把容器外的sql備份拷貝到容器內;或者用之前掛載的目錄也行