zoukankan      html  css  js  c++  java
  • 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自动化测试等,微信搜索公众号:“无量测试之道”,或扫描下方二维码:

      添加关注,一起共同成长吧。

  • 相关阅读:
    Java13新特性 -- 重新实现旧版套接字API
    Java13新特性 -- switch表达式动态CDS档案(动态类数据共享归档)
    Java13新特性 -- 文本块
    Java13新特性 -- switch表达式
    Java12新特性 -- 其他新增,移除,废弃项
    Java12新特性 -- 增强G1,自动返回未用堆内存给操作系统
    Java12新特性 -- 可中断的 G1 Mixed GC
    Java12新特性 -- 默认生成类数据共享(CDS)归档文件
    Java12新特性 -- 只保留一个 AArch64 实现
    python使用requests发送text/xml报文数据
  • 原文地址:https://www.cnblogs.com/Wu13241454771/p/13260912.html
Copyright © 2011-2022 走看看