容器化部署之dockercompose08
一、容器编排工具dockercompose
日常工作中,常常1个项目会依赖多个容器工作,比如web后端nginx前端,数据库等。我们可以通过一个单独的配置文件来定义一组关联容器的启动过程,一个命令就可以把相关的容器正确启动起来。
这个作用类似dockerfile,不过一个是定义镜像,一个是定义一组容器的启动过程。
核心文件:docker-compose.yml
使用YAML格式定义一组容器为一个项目,通过docker-compose命令实现一键管理容器组合。
安装:
pip3 install docker-compose -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple
pip3 uninstall docker-compose
docker-compose version
docker-compose.yml编写
version: "3" # compose版本1,2,3 必须用数字表示
services: # 一组服务# 定义一组服务 定义相关容器启动的参数frontend: # 服务的名称可以自定义image:nginx:latest # 指定容器启动所需镜像container_name: nginxdemo # 指定容器名称ports:- 80:80 # 端口映射冒号后不需要加空格volumes:- /root/conf:/etc/nginx- /root/html:/usr/share/nginx/htmlnetworks:autotpnet:aliases: # 容器别名- nginxdemobackend:build: # 构建镜像context: . # 表示镜像的上下文 相当于docker built [选项] <上下文路径/URL/->dockerfile: Dockerfile # dockerfile相对应compose文件路径container_name: autotpenvports:- 8081:8081networks:autotpnet:aliases:- autotpenvdb:image:mysql:8.0container_name: db_mysqlports:- 3307:3306environment:MYSQL_ROOT_PASSWORD: devopsMYSQL_DATABASE: autotpsitevolumes:- /root/mysql/data:/var/lib/mysql- /root/mysql/conf:/etc/mysql- /root/mysql/mysql-files:/var/lib/mysql-filesnetworks:autotpnet:aliases:- db_mysqlnetworks:autotpnet:driver: bridge
启动:docker-compose up -d
关闭并删除容器:docker-compose down
重新创建镜像启动容器:docker-compose up -d --build
几个部署注意事项:
1)解决跨域问题
Django配置corsheaders
nginx添加配置
location / {proxy_pass http://autotpenv:8081;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header Host $host;proxy_redirect off;
}
2)使用mysql8以上,mysql容器编排需数据卷添加映射
/root/mysql/mysql-files:/var/lib/mysql-files
3)添加数据库容器前操作数据库配置文件和数据
docker cp vigorous_allen:/etc/mysql mysql/conf
docker cp vigorous_allen:/var/lib/mysql mysql/data
进入python容器执行创建表结构:
python3 manage.py migrate
外部导入sql文件:
docker cp autotpsite.sql db_mysql:/opt
进入容器执行sql文件:source /opt/autotpsite.sql
二、Rancher容器管理平台
Rancher是一个开源的企业级容器管理平台(1.6),常用功能有容器的编排、调度、健康检查等。
2.x需要安装k8s,并且与1.x不兼容。
搭建rancher:
"""
# 启动server
docker run -d --restart=unless-stopped -p 8080:8080 rancher/server:stable# 添加主机(基础架构-主机)
docker run --rm --privileged -v /var/run/docker.sock:/var/run/docker.sock -v /var/lib/rancher:/var/lib/rancher rancher/agent:v1.2.11 http://8.130.12.186:8080/v1/scripts/D7D3CA3A422F5B65833D:1703980800000:9xkHvny5p9isg1mXR8d5a3nls# 添加容器
上传docker-compose.yml文件,rancher1.6版本只支持docker-compose2,修改yml中version:"2"
修改nginx配置文件中域名为容器名称,界面重启容器,出现容器不断重启的情况
docker ps 查看容器,发现容器名称是后缀随机生成的,且添加到了none网络中
解决:
docker-compose.yml文件添加容器网络和容器别名(图片),手动输入命令docker-compose up -d重启容器
rancher添加容器还是不生效,因为DNS解析通过服务名称来解析的,比如backend
修改nginx配置文件中域名为服务名称,比如backendrancher部署应用,可以部署在多个主机上,大规模集群部署
"""