书接上文,上一篇介绍了dockerfile
和docker-compose
的关系,以及dockerfile
中的常用指令。本篇将介绍docker-compose文件的写法。
Compose file
Docker-compose.yml
是主要用于启动docker容器的配置文件,yaml格式,简单讲就配置容器怎样启动,比如使用哪个镜像、怎样映射端口、如何挂载volume,执行什么命令等等,相当于docker run
的参数配置文件。
docker-compose命令根据Docker-compose.yml的内容生成镜像或管理容器(开启/停止/重启/查看/删除…)
此外,Docker-compose还可以用来定义和运行由多个容器组成的应用。
Define and run multi-container applications with Docker
https://docs.docker.com/compose/
格式
1 | version: '3' |
最开头的是版本号,兼容性见下表
Compose file format | Docker Engine release |
---|---|
3.7 | 18.06.0+ |
3.6 | 18.02.0+ |
3.5 | 17.12.0+ |
3.4 | 17.09.0+ |
3.3 | 17.06.0+ |
3.2 | 17.04.0+ |
3.1 | 1.13.1+ |
3.0 | 1.13.0+ |
2.4 | 17.12.0+ |
2.3 | 17.06.0+ |
2.2 | 1.13.0+ |
2.1 | 1.12.0+ |
2.0 | 1.10.0+ |
1.0 | 1.9.1.+ |
配置
compose文件中定义的内容包括services, networks和volumes
默认的compose文件为./docker-compose.yml
services
容器的配置信息在services中定义。即:定义应用中包含的每个容器该如何启动
image
定义容器使用的镜像
1 | version: "3" |
build
定义通过docker-compose build
命令创建镜像时使用的Dockerfile
1 | version: "3" |
通过build来定义Dockerfile所在的目录
也可以通过以下的详细配置,自定义Dockerfile:
1 | version: "3" |
其中args是在Dockerfile中定义的变量,比如:
1 | ARG buildno |
另一种定义格式:
1 | build: |
此外,build
和image
可以一起使用,image
用于定义生成的镜像名
1 | version: "3" |
user
定义默认用户
restart
定义容器挂掉后是否自动重启
environment
定义环境变量
1 | environment: |
volumes
定义挂载的数据卷
1 | volumes: |
末尾加:ro可控制容器中数据卷权限为只读
若容器中存在同名文件(夹),本地文件将覆盖容器中文件(夹)
注意:若覆盖文件,文件权限也会覆盖
挂载数据卷,可以使得容器与数据(应用程序数据、配置信息等等)分离,这样在更新容器的时候不会丢失数据
ports
定义端口映射 本地:容器
1 | ports: |
networks
定义网络
command
定义容器默认执行的命令
格式和dockerfile差不多:
1 | version: "3" |
compose中定义的
command
会覆盖dockerfile中的CMD
entrypoint
和command类似,不多说了
Next
下一篇介绍docker命令和docker-compose命令
docker命令比较基础,但是命令繁杂
docker-compose像是一个容器管理工具,用起来比较简便