测试开发进阶(四十五)

测试开发进阶(四十五)

Docker Compose

安装

1
2
3
4
5
$ 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

删除无用的网络

1
$ docker network prune

删除无用的数据卷

1
$ docker volume prune

编写docker-compose.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# 指定版本信息
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文件所在路径下

1
$ docker-compose up

项目部署

以之前完成的ApiTest项目为例:

  1. 收集静态文件

setting.py文件中

1
2
3
4
# 收集静态文件
# 1. 在项目根路径下创建xx文件夹
# 2. 执行收集命令 python manage.py collectstatic
STATIC_ROOT = os.path.join(BASE_DIR, 'front_ends/static')

收集静态文件

  1. 前端代码打包

lemon-test/package.json

打包

打包结果:

打包

将两者合并

合并

  1. 放置到nginx中

nginx

  1. 运行项目Dockerfile并推送至Docker Hub
1
2
3
4
5
$ $ docker build ./ -t  apitest:last
# 登录docker hub
$ docker login
$ docker tag apitest:last zhongxin1111/apitest
$ docker push zhongxin1111/apitest
  1. 运行docker-compose.yml
1
$ docker-compose up -d
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# 指定版本信息
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/

 wechat
欢迎您扫一扫上面的微信公众号,订阅我的博客!
您的支持将鼓励我继续创作!