容器化部署项目05
一、工作原理
镜像:容器的模板,包括容器运行时所需的数据
容器:运行中的进程,依赖镜像运行,镜像的具现化
镜像你可以把它看成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
"""