Docker-Compose实战「上篇」
欢迎关注【无量测试之道】公众号,回复【领取资源】,
Python编程学习资源干货、
Python+Appium框架APP的UI自动化、
Python+Selenium框架Web的UI自动化、
Python+Unittest框架API自动化、
资源和代码 免费送啦~
文章下方有公众号二维码,可直接微信扫一扫关注即可。
1、什么是 docker-compose?
Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。
2、Compose 使用的三个步骤
1.使用 dockerfile 定义应用程序的环境。
2.使用 docker-compose.yml 定义构成应用程序的服务,这样它们可以在隔离环境中一起运行。
3.执行 docker-compose build/up 命令来启动并运行整个应用程序。
3、目录组织结构
这个非常重要,因为它是有规范的,如下截图所示:
4、dockerfile 及yml 文件详细内容展示
实战项目示例
docker-compose.yml文件具体内容如下:
1 #docker-compose的版本 2 version: '2' 3 #定义服务 4 services: 5 #服务名称,可随意定义 6 httprunner: 7 build: 8 #dockerfile的路径 9 context: httprunner 10 #dockerfile的名称 11 dockerfile: Dockerfile 12 #相当于docker run -v的作用 13 volumes: 14 - "./httprunner:/httprunner" 15 #httprunner容器名称 16 container_name: HttpRunner-django-backend-compose 17 #该服务依赖的其他服务,该配置选项可修改启动顺序 18 depends_on: 19 - mysql 20 - rabbitmq 21 ports: 22 - "8000:8000" 23 #服务名称,可随意定义 24 mysql: 25 build: 26 #dockerfile的路径 27 context: mysql 28 #dockerfile的名称 29 dockerfile: Dockerfile 30 ports: 31 - "3306:3306" 32 #相当于docker run命令中的-e 33 environment: 34 MYSQL_ROOT_PASSWORD: 123456 35 #初始化的数据库名称 36 MYSQL_DATABASE: HttpRunner 37 #mysql容器名称 38 container_name: HttpRunner-mysql-compose 39 restart: always 40 #数据卷映射关系,把本机的./mysql/db目录映射到容器中的/var/lib/mysql 41 volumes: 42 - "./mysql/data/:/var/lib/mysql" 43 #该选项中的命令会覆盖Dockfile中的CMD中的命令.lower_case_table_names参数是为了表名不区分大小写,default-authentication-plugin是8.0中密码加密策略不同带来的链接问题,如果不用8.0可不加此选项 44 command: mysqld --lower_case_table_names=1 --default-authentication-plugin=mysql_native_password 45 #服务名称,可随意定义 46 rabbitmq: 47 image: rabbitmq:management 48 ports: 49 - "5672:5672" 50 - "15672:15672" 51 container_name: HttpRunner-rabbitmq-compose 52 environment: 53 #rabbitmq的初始用户名 54 RABBITMQ_DEFAULT_USER: admin 55 #rabbitmq的初始密码 56 RABBITMQ_DEFAULT_PASS: 123456 57 58 #指定使用的网络,此处是使用已经提前创建好的自定义网络 59 #网络创建命令:docker network create -d bridge --subnet 172.50.0.0/16 cooperationassociation --subnet指定网段 -d指定连接方式,最后的cooperationassociation为网络名称 60 #使用新的指定网络是为了防止网段占用完,这样会导致启动容器时XShell会自动退出,且本地用不了访问不了服务(服务器已有大量连接时可能会出现),查看网段占用情况的命令:route -n 61 networks: 62 default: 63 external: 64 name: cooperationassociation 65 66 httprunner 目录下的dockerfile : 67 FROM python:3.5 68 ENV PYTHONUNBUFFERED 1 69 RUN mkdir /httprunner 70 WORKDIR /httprunner 71 ADD requirements.txt /httprunner/ 72 RUN pip install -r requirements.txt 73 ADD run.sh /httprunner/ 74 CMD sh run.sh 75 76 mysql 目录下的dockerfile: 77 FROM mysql:5.7 78 ADD createdb.sql /docker-entrypoint-initdb.d 79 80 rabbitmq 目录下的dockerfile是空的,因为它的镜像直接在docker-compose.yml里面定义了,如下所示: 81 #服务名称,可随意定义 82 rabbitmq: 83 image: rabbitmq:management 84 ports: 85 - "5672:5672" 86 - "15672:15672" 87 container_name: HttpRunner-rabbitmq-compose 88 environment: 89 #rabbitmq的初始用户名 90 RABBITMQ_DEFAULT_USER: admin 91 #rabbitmq的初始密码 92 RABBITMQ_DEFAULT_PASS: 123456
5、构建操作
在docker-compose.yml 同目录下执行命令docker-compose build 即可
构建的结果:
说明:rabbitmq 这个镜像之前docker pull 过,本次又没有变化,所以没有做更新。
备注:我的个人公众号已正式开通,致力于测试技术的分享,包含:大数据测试、功能测试,测试开发,API接口自动化、测试运维、UI自动化测试等,微信搜索公众号:“无量测试之道”,或扫描下方二维码:
添加关注,一起共同成长吧。