Docker-Compose实战<上篇>
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文件具体内容如下:
#docker-compose的版本
version: '2'
#定义服务
services:
#服务名称,可随意定义
httprunner:
build:
#dockerfile的路径
context: httprunner
#dockerfile的名称
dockerfile: Dockerfile
#相当于docker run -v的作用
volumes:
- "./httprunner:/httprunner"
#httprunner容器名称
container_name: HttpRunner-django-backend-compose
#该服务依赖的其他服务,该配置选项可修改启动顺序
depends_on:
- mysql
- rabbitmq
ports:
- "8000:8000"
#服务名称,可随意定义
mysql:
build:
#dockerfile的路径
context: mysql
#dockerfile的名称
dockerfile: Dockerfile
ports:
- "3306:3306"
#相当于docker run命令中的-e
environment:
MYSQL_ROOT_PASSWORD: 123456
#初始化的数据库名称
MYSQL_DATABASE: HttpRunner
#mysql容器名称
container_name: HttpRunner-mysql-compose
restart: always
#数据卷映射关系,把本机的./mysql/db目录映射到容器中的/var/lib/mysql
volumes:
- "./mysql/data/:/var/lib/mysql"
#该选项中的命令会覆盖Dockfile中的CMD中的命令.lower_case_table_names参数是为了表名不区分大小写,default-authentication-plugin是8.0中密码加密策略不同带来的链接问题,如果不用8.0可不加此选项
command: mysqld --lower_case_table_names=1 --default-authentication-plugin=mysql_native_password
#服务名称,可随意定义
rabbitmq:
image: rabbitmq:management
ports:
- "5672:5672"
- "15672:15672"
container_name: HttpRunner-rabbitmq-compose
environment:
#rabbitmq的初始用户名
RABBITMQ_DEFAULT_USER: admin
#rabbitmq的初始密码
RABBITMQ_DEFAULT_PASS: 123456
#指定使用的网络,此处是使用已经提前创建好的自定义网络
#网络创建命令:docker network create -d bridge --subnet 172.50.0.0/16 cooperationassociation --subnet指定网段 -d指定连接方式,最后的cooperationassociation为网络名称
#使用新的指定网络是为了防止网段占用完,这样会导致启动容器时XShell会自动退出,且本地用不了访问不了服务(服务器已有大量连接时可能会出现),查看网段占用情况的命令:route -n
networks:
default:
external:
name: cooperationassociation
httprunner 目录下的dockerfile :
FROM python:3.5
ENV PYTHONUNBUFFERED 1
RUN mkdir /httprunner
WORKDIR /httprunner
ADD requirements.txt /httprunner/
RUN pip install -r requirements.txt
ADD run.sh /httprunner/
CMD sh run.sh
mysql 目录下的dockerfile:
FROM mysql:5.7
ADD createdb.sql /docker-entrypoint-initdb.d
rabbitmq 目录下的dockerfile是空的,因为它的镜像直接在docker-compose.yml里面定义了,如下所示:
#服务名称,可随意定义
rabbitmq:
image: rabbitmq:management
ports:
- "5672:5672"
- "15672:15672"
container_name: HttpRunner-rabbitmq-compose
environment:
#rabbitmq的初始用户名
RABBITMQ_DEFAULT_USER: admin
#rabbitmq的初始密码
RABBITMQ_DEFAULT_PASS: 123456
复制
5
构建操作
在docker-compose.yml 同目录下执行命令docker-compose build 即可

构建的结果:


备注说明:rabbitmq 这个镜像之前docker pull 过,本次又没有变化,所以没有做更新。
友情提示:“无量测试之道”原创著作,欢迎关注交流,禁止第三方不显示文章来源时转载。
Docker-Compose实战<上篇>的更多相关文章
- Docker深入浅出系列 | Docker Compose多容器实战
目录 前期准备 Docker Compose是什么 为什么要用Docker Compose Docker Compose使用场景 Docker Compose安装 Compose Yaml文件结构 C ...
- Istio入门实战与架构原理——使用Docker Compose搭建Service Mesh
本文将介绍如何使用Docker Compose搭建Istio.Istio号称支持多种平台(不仅仅Kubernetes).然而,官网上非基于Kubernetes的教程仿佛不是亲儿子,写得非常随便,不仅缺 ...
- 010.Docker Compose构建WordPress实战
一 前期规划 类型 版本 备注 WordPress镜像 wordpress:latest MySQL数据库 5.7 Docker已安装,参考<002.Docker版本及安装>. D ...
- 029.Docker Compose部署Zabbix实战
一 前期规划 1.1 Zabbix架构图 1.2 其他规划 组件 类型 版本 备注 Zabbix Web zabbix-web-apache-mysql镜像 wordpress:latest 也可采用 ...
- kubernetes 实战6_命令_Share Process Namespace between Containers in a Pod&Translate a Docker Compose File to Kubernetes Resources
Share Process Namespace between Containers in a Pod how to configure process namespace sharing for a ...
- Docker小白到实战之Docker Compose在手,一键足矣
前言 Docker可以将应用程序及环境很方便的以容器的形式启动,但当应用程序依赖的服务比较多,或是遇到一个大系统拆分的服务很多时,如果还一个一个的根据镜像启动容器,那就有点累人了,到这有很多小伙伴会说 ...
- Docker入门(三)使用Docker Compose
Compose介绍 Compose 项目是 Docker 官方的开源项目,负责实现对 Docker 容器集群的快速编排.Compose 是一个用户定义和运行多个容器的 Docker 应用程序.在 ...
- 【08】循序渐进学 docker:docker compose
写在前面的话 在之前的操作中,即使是单个容器每次都需要敲很长的命令,当需要多个容器组合着用的时候更加麻烦,此时我们急需找到一种一次配置,随便运行的方法. 这就是这一节重点,单机容器编排工具:docke ...
- Docker Compose 部署 Redis 及原理讲解 | 懒人屋
原文:Docker Compose 部署 Redis 及原理讲解 | 懒人屋 Docker Compose 部署 Redis 及原理讲解 4.4k 字 16 分钟 2019-10-1 ...
- 什么,容器太多操作不过来?我选择Docker Compose梭哈
接上一篇:面试官:你说你精通 Docker,那你来详细说说 Dockerfile 吧 一.容器之间通信 1.单向通信 1.1.什么意思 mysql和tomcat是两个独立的容器,但是tomcat需要和 ...
随机推荐
- 阿里播放器Aliplayer遇到的所有坑
1,关于阿里播放器使用过的几种播放方式 url (source) ① 要在创建播放器前要拿到资源否则会报错 ② 在有不同清晰度的资源时 直接调用 player.loadByUrl() 方法会报错 官 ...
- vue项目使用vue-amap调用高德地图api详细步骤
想要的效果如下 : 高德地图 && 信息窗体 步骤一: 申请高德key 高德开放平台 | 高德地图API (amap.com) (可参考博客: [996]如何申请高德地图用户Key ...
- vim下的查找命令
linux下vim 查找命令: /text --查找text, 按n查找下一个, N查找上一个 ?text --查找text(反向查找), 按n查找下一个, N查找上一个 */# --查找光标当前的单 ...
- docker-compose简易编写和模板命令
version: '3' service: mysql: #指定容器名称 restart: always # 代表知道docker 启动那么这个容器就跟着一起启动 image: daocloud.io ...
- 记一次 turbostat 的使用
场景:为了测试海光cpu的性能,从而使用turbostat 来监测cpu工作时候的相关频率. cpu 型号: 1.Hygon C86 7165 24-core Processor 1.9GHz 384 ...
- pycharm字体大小设置
首先有两个方法 一个是滚轮放大缩小,一个是固定的字体大小. 调为固定的字体大小: 菜单栏:file--setting--editor--font--size 修改为需要大小字号,例如20,点击ok 滚 ...
- VS2010查看DLL导出函数的方法
在window下查看动态库的导出函数可以用vs自带的Dependenc工具:对于VC6.0,VC所带的Depends软件,在VC6安装目录下的tools文件夹里面,可以直接运行. VS2010中没有了 ...
- Excel怎么把公式转成数值并复制
直接选中复制,粘贴时选择选择性粘贴,选择数值确认
- 剑指 Offer II 树
我为什么要把代码粘在这里 断更很久了,基于一个错误的观念:我想看题,我到leetcode官网看不就行了吗? 但是若干年后我可能还会到我的博客园看看呀,我有可能上刷题网站吗?而且心得不好写到注释上. 记 ...
- 高效XML绑定框架JIBX
高效XML绑定框架JIBX demo源码地址 https://gitee.com/clover-clover/clover.git 具体路径: clover/clover-frame/clover-f ...