一、工作原理
鏡像:容器的模板,包括容器運行時所需的數據
容器:運行中的進程,依賴鏡像運行,鏡像的具現化
鏡像你可以把它看成Python中的類,而容器可以看做是類的實例化對象。
一個類可以有多個對象,同理一個鏡像可以有多個容器
docker引擎是一個c/s結構的應用
Server是一個常駐進程
RESTAPI實現了client和server間的交互協議
CLI實現容器和鏡像的管理,用戶通過命令行對其操作
腳本自動安裝
curl -sSL https://get.docker.com/>get-docker.shsh get-docker.sh --mirror Aliyun
docker--version # 查看版本Docker version 20.10.6.build370c289
systemctl enable docker # 設置開機啟動# 設置鏡像源
vim /etc/docker/daemon.json
{"registry-mirrors":["https://docker.mirrors.ustc.edu.cn","https://registry.docker-cn.com","https://hub-mirror.c.163.com","https://mirror.ccs.tencentyun.com","https://reg-mirror.qiniu.com"]
}
# 重載
systemctl daemon-reload
# 啟動docker
systemctl start docker
卸載docker
sudo yum remove docker-ce docker-ce-cli containerd.io
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd
下載指定版本
curl https://releases.rancher.com/install-docker/18.09.sh | sh
二、容器操作
"""
# 從鏡像倉庫拉取鏡像
docker pull 鏡像:Tag
# 刪除鏡像,前提刪除對應容器
docker rmi 鏡像ID或鏡像名
存儲的鏡像目錄:/var/lib/docker/image# 啟動容器:docker run <options> 鏡像:tag commands
-d指定容器運行后臺
-i用于控制臺交互
-t支持終端登錄,通常和-i參數一起使用
-p映射容器端口,用法:-p宿主機端口:容器端口
-v掛載容器存儲卷,用法:-v宿主機路徑:容器路徑
-e設置容器的環境變量用于容器內的應用程序進行相關配置,用法-e環境變量名=變量值
--name=“containername”指定容器的名稱
--rm 退出容器時刪除容器,與--restart沖突
--restart=“always”停止容器時是否自動重啟,與--rm沖突
例:docker run -it -p 3307:3306 -e MYSQL_ROOT_PASSWORD=devops mysql:5.7# 查看容器:docker ps [-qa]
ps是進程狀態的意思,docker ps指的是容器的狀態查詢
-a all查看全部容器,包括沒運行的容器
-q 只查看容器的標識# 停止容器:docker stop 容器id
停止所有容器:
docker stop $(docker ps -qa)# 刪除容器:docker rm 容器id
刪除所有容器:
docker rm $(docker ps -qa)# 查看容器的日志:docker logs -f 容器標識
-f 以滾動的方式查看容器最后幾行
--tail=100# 進入容器內部:docker exec -it 00 bash
exec 執行的意思
-it 交互式運行容器
bash linux操作系統的默認界面shell
"""
三、部署項目
"""
1、復制html目錄:cp -rf software/autotpsite/dist html
創建nginx容器:docker run -itd -p 80:80 --name=mynginx --rm nginx
復制conf文件到容器:docker cp mynginx:/etc/nginx conf
啟動nginx容器:docker run --name mynginx -v "$PWD/html":/usr/share/nginx/html -v "$PWD/conf":/etc/nginx -p 80:80 -itd nginx2、拉取鏡像并運行:docker pull python:3.8
docker run -itd -v /root/software/autotpsite:/opt --name autotpenv python:3.8
進入python容器下載依賴庫:docker exec -it 4f bash
pip install -r requirements.txt -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple some-package
測試一下:python manage.py runserver
安裝uwsgi:pip install uwsgi -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple some-package
啟動:uwsgi uwsgi.ini或者
創建部署腳本auto_deploy.sh
cd opt/ && pip install -r requirements.txt -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple --trusted-host mirrors.tuna.tsinghua.edu.cn && pip install uwsgi -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple --trusted-host mirrors.tuna.tsinghua.edu.cn && uwsgi uwsgi.ini && tail -f > /dev/null
tail -f > /dev/null是阻塞進程,不讓sh命令停止
加入8081端口映射,重啟python容器:
docker run -itd -v /root/software/autotpsite:/opt -p 8081:8081 --name autotpenv2 python:3.8 sh /opt/auto_deploy.sh3、修改nginx conf配置文件并重啟nginx:
vim /root/conf/conf.d/default.conf
location /api {proxy_pass http://8.130.12.186:8081;}查看容器網絡,使用容器IP
docker network ls
docker network inspect bridge
找到沒有映射的容器IP
修改nginx conf配置文件并重啟nginx:
vim /root/conf/conf.d/default.conf
location /api {proxy_pass http://172.17.0.4:8081;}
docker restart mynginx停止原容器:docker stop autotpenv2
"""