经过上述的测试之后,我们就可以编写 docker-compose.yml 文件了,该文件的目的在于单个命令启动两个容器,同时将 docker run 所需要的内容写在一个文件当中,减少键入参数。( yaml 语法参考这里

文件编写

这里是前一节项目的 docker-compose.yml 参考示例。

version: '3.8'

services:
web:
build:
context: .
ports:
- 5000:5000
volumes:
- ./:/app

mysqldb:
image: mysql
ports:
- 3306:3306
environment:
- MYSQL_ROOT_PASSWORD=p@ssw0rd1
volumes:
- mysql:/var/lib/mysql
- mysql_config:/etc/mysql

volumes:
mysql:
mysql_config:

这里要注意以及常用的参数如下:(参考文档官方文档

  • (必要)version:指定 compose 是依据哪个版本制定的;
  • image:指定容器运行的镜像;
  • build:构建镜像相关内容;
    • context:上下文路径
    • dockerfile:Dockerfile文件名
  • command:容器启动时自覆盖的命令;
  • depends_on:依赖关系,例如启动 web 服务前需要启动 db 或者其他服务;
  • env_file:从文件添加环境变量(可以是单个文件,也可以使用 yaml 列表涵盖多个文件)
  • environment:添加环境变量。您可以使用数组或字典、任何布尔值,布尔值需要用引号引起来,以确保 YML 解析器不会将其转换为 True 或 False;
  • expose:仅暴露端口,但不映射到宿主机;
  • ports:将 docker 容器端口映射到宿主机端口;
  • volumes:将主机的数据卷或着文件挂载到容器里;
  • restart:容器重启策略(好像一般都是 restart )。

检查文件格式

通过docker config校验compose文件,如果文件格式有问题,通过该命令可以帮你校验并输出错误信息。

一键启动

这里使用 docker-compose 命令来一键启动 docker 容器。在使用 docker-compose 之前,需要先安装 docker-compose 工具。参考链接

安装完成之后,使用以下指令就可以了。

# 常规指令
docker-compose up
# 特殊指令
docker-compose -f docker-compose.dev.yml up --build

其中部分参数含义如下:

  • docker-compose up:默认选用当前目录下 docker-compose.yml 进行容器编排;
  • -f:指定 yml 文件;
  • –build:构建我们的镜像;

总结

经过学习 docker 封装的流程,个人将其过程总结如下(应该也可以直接写 compose.yml 文件,保证不出错最好还是人工测试一遍呢):

手工测试

  • 主程序镜像制作及测试(Dockerfile 书写)

  • 其他相关环境配置

  • 容器网络配置及连接测试

自动化完成

  • 编写相应的 docker-compose.yml

这里一个好的讲解 docker-compose 的文档