欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

测试开发进阶(四十五)

程序员文章站 2022-04-10 20:59:46
...

Docker Compose

安装

  1. $ 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

  2. $ sudo chmod +x /usr/local/bin/docker-compose

  3. $ docker-compose --version

删除无用的网络

  1. $ docker network prune

删除无用的数据卷

  1. $ docker volume prune

编写docker-compose.yml

  1. # 指定版本信息

  2. version: '3'

  3. # 指定服务(启动容器)

  4. services:

  5. # 服务名:项目根目录小写_指定的服务名_服务个数的序号

  6. # deploydjango_db_1

  7. db:

  8. # 指定镜像的名称

  9. image: mariadb

  10. # 覆盖默认的CMO,指定运行容器时(docker run)需要运行的命令或者参数

  11. command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

  12. volumes:

  13. - mysql_db:/var/lib/mysql

  14. # 指定容器重启的策略

  15. restart: always

  16. # 指定环境变量

  17. environment:

  18. MYSQL_ROOT_PASSWORD: pythonvip

  19. MYSQL_DATABASE: test

  20. django_app:

  21. # 指定容器的启动依赖

  22. # 只有当db容器启动后,再启动 django_app容器

  23. depends_on:

  24. - db

  25. # 指定Dockerfile所在的路径

  26. build: ./django_app_docker

  27. # 指定构建的镜像名

  28. image: keyou1/django_app

  29. restart: always

  30. volumes:

  31. - logs:/usr/src/app/logs

  32. - django_code:/usr/src/app/LearnDjango/

  33. web:

  34. depends_on:

  35. - django_app

  36. build: ./nginx_docker

  37. image: keyou1/lemon-test-nginx

  38. restart: always

  39. # 端口映射

  40. ports:

  41. - "8866:80"

  42. - "8000:8000"

  43. volumes:

  44. - logs:/var/log/nginx/

  45. # 指定容器使用的数据卷

  46. volumes:

  47. # deploydjango_mysql_db

  48. # 数据卷名为:项目根目录小写_指定的数据卷名

  49. mysql_db:

  50. django_code:

  51. logs:

启动

在docker-compose.yml文件所在路径下

  1. $ docker-compose up

项目部署

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

  1. 收集静态文件

setting.py文件中

  1. # 收集静态文件

  2. # 1. 在项目根路径下创建xx文件夹

  3. # 2. 执行收集命令 python manage.py collectstatic

  4. STATIC_ROOT = os.path.join(BASE_DIR, 'front_ends/static')

测试开发进阶(四十五)

  1. 前端代码打包

lemon-test/package.json

测试开发进阶(四十五)

打包结果:

测试开发进阶(四十五)

将两者合并

测试开发进阶(四十五)

  1. 放置到nginx中

测试开发进阶(四十五)

  1. 运行项目Dockerfile并推送至Docker Hub

  1. $ $ docker build ./ -t apitest:last

  2. # 登录docker hub

  3. $ docker login

  4. $ docker tag apitest:last zhongxin1111/apitest

  5. $ docker push zhongxin1111/apitest

  1. 运行 docker-compose.yml

  1. $ docker-compose up -d

  1. # 指定版本信息

  2. version: '3'

  3. # 指定服务(启动容器)

  4. services:

  5. # 服务名:项目根目录小写_指定的服务名_服务个数的序号

  6. # deploydjango_db_1

  7. db:

  8. # 指定镜像的名称

  9. image: mariadb

  10. # 覆盖默认的CMO,指定运行容器时(docker run)需要运行的命令或者参数

  11. command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

  12. volumes:

  13. - mysql_db:/var/lib/mysql

  14. # 指定容器重启的策略

  15. restart: always

  16. # 指定环境变量

  17. environment:

  18. MYSQL_ROOT_PASSWORD: pythonvip

  19. MYSQL_DATABASE: test

  20. django_app:

  21. # 指定容器的启动依赖

  22. # 只有当db容器启动后,再启动 django_app容器

  23. depends_on:

  24. - db

  25. # 指定Dockerfile所在的路径

  26. build: ./django_app_docker

  27. # 指定构建的镜像名

  28. image: zhongxin1111/apitest

  29. restart: always

  30. volumes:

  31. - logs:/usr/src/app/logs

  32. - django_code:/usr/src/app/LearnDjango/

  33. web:

  34. depends_on:

  35. - django_app

  36. build: ./nginx_docker

  37. image: keyou1/lemon-test-nginx

  38. restart: always

  39. # 端口映射

  40. ports:

  41. - "8866:80"

  42. - "8000:8000"

  43. volumes:

  44. - logs:/var/log/nginx/

  45. # 指定容器使用的数据卷

  46. volumes:

  47. # deploydjango_mysql_db

  48. # 数据卷名为:项目根目录小写_指定的数据卷名

  49. mysql_db:

  50. django_code:

  51. logs:

具体代码见:

https://github.com/zx490336534/ApiTest/tree/master/DeployApiTest

Docker Swarm

  • 集群

  • 大型应用

  • 高性能 高效率 高可用

  • 无中心设计

  • 横向 纵向伸缩

  • 多主机网络

  • 服务发现

  • 负载均衡

  • 回滚更新

Swarm manager

  • 切换 加入 移除 维护 节点

  • 最小的集群至少需要5个节点

Swarm work

  • 运行任务的节点

  • 托管容器任务

创建集群

  • 初始化

  • docker swarm

由于没有环境,所以不再深入

见:https://docs.docker.com/swarm/