测试开发进阶(四十五)
Docker Compose
安装
$ sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
-
$ sudo chmod +x /usr/local/bin/docker-compose
-
$ docker-compose --version
删除无用的网络
$ docker network prune
删除无用的数据卷
$ docker volume prune
编写docker-compose.yml
# 指定版本信息
version: '3'
-
# 指定服务(启动容器)
services:
# 服务名:项目根目录小写_指定的服务名_服务个数的序号
# deploydjango_db_1
db:
# 指定镜像的名称
image: mariadb
# 覆盖默认的CMO,指定运行容器时(docker run)需要运行的命令或者参数
command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
volumes:
- mysql_db:/var/lib/mysql
# 指定容器重启的策略
restart: always
# 指定环境变量
environment:
MYSQL_ROOT_PASSWORD: pythonvip
MYSQL_DATABASE: test
-
django_app:
# 指定容器的启动依赖
# 只有当db容器启动后,再启动 django_app容器
depends_on:
- db
# 指定Dockerfile所在的路径
build: ./django_app_docker
# 指定构建的镜像名
image: keyou1/django_app
restart: always
volumes:
- logs:/usr/src/app/logs
- django_code:/usr/src/app/LearnDjango/
web:
depends_on:
- django_app
build: ./nginx_docker
image: keyou1/lemon-test-nginx
restart: always
# 端口映射
ports:
- "8866:80"
- "8000:8000"
volumes:
- logs:/var/log/nginx/
-
# 指定容器使用的数据卷
volumes:
# deploydjango_mysql_db
# 数据卷名为:项目根目录小写_指定的数据卷名
mysql_db:
django_code:
logs:
启动
在docker-compose.yml文件所在路径下
$ docker-compose up
项目部署
以之前完成的 ApiTest
项目为例:
收集静态文件
在 setting.py
文件中
# 收集静态文件
# 1. 在项目根路径下创建xx文件夹
# 2. 执行收集命令 python manage.py collectstatic
STATIC_ROOT = os.path.join(BASE_DIR, 'front_ends/static')
前端代码打包
lemon-test/package.json
打包结果:
将两者合并
放置到nginx中
运行项目Dockerfile并推送至Docker Hub
$ $ docker build ./ -t apitest:last
# 登录docker hub
$ docker login
$ docker tag apitest:last zhongxin1111/apitest
$ docker push zhongxin1111/apitest
运行
docker-compose.yml
$ docker-compose up -d
# 指定版本信息
version: '3'
-
# 指定服务(启动容器)
services:
# 服务名:项目根目录小写_指定的服务名_服务个数的序号
# deploydjango_db_1
db:
# 指定镜像的名称
image: mariadb
# 覆盖默认的CMO,指定运行容器时(docker run)需要运行的命令或者参数
command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
volumes:
- mysql_db:/var/lib/mysql
# 指定容器重启的策略
restart: always
# 指定环境变量
environment:
MYSQL_ROOT_PASSWORD: pythonvip
MYSQL_DATABASE: test
-
django_app:
# 指定容器的启动依赖
# 只有当db容器启动后,再启动 django_app容器
depends_on:
- db
# 指定Dockerfile所在的路径
build: ./django_app_docker
# 指定构建的镜像名
image: zhongxin1111/apitest
restart: always
volumes:
- logs:/usr/src/app/logs
- django_code:/usr/src/app/LearnDjango/
web:
depends_on:
- django_app
build: ./nginx_docker
image: keyou1/lemon-test-nginx
restart: always
# 端口映射
ports:
- "8866:80"
- "8000:8000"
volumes:
- logs:/var/log/nginx/
-
# 指定容器使用的数据卷
volumes:
# deploydjango_mysql_db
# 数据卷名为:项目根目录小写_指定的数据卷名
mysql_db:
django_code:
logs:
具体代码见:
https://github.com/zx490336534/ApiTest/tree/master/DeployApiTest
Docker Swarm
集群
大型应用
高性能 高效率 高可用
无中心设计
横向 纵向伸缩
多主机网络
服务发现
负载均衡
回滚更新
Swarm manager
切换 加入 移除 维护 节点
最小的集群至少需要5个节点
Swarm work
运行任务的节点
托管容器任务
创建集群
初始化
docker swarm
由于没有环境,所以不再深入
见:https://docs.docker.com/swarm/
上一篇: 自动化测试中各种流量的模拟2