1. Service configuration
Compose file 是一个 YAML 文件, 用于定义 services, networks, 和 volumes. 其默认路径是./docker-compose.YAML
一个 service 定义包含了这个服务启动的所有容器的配置, 这个操作看起来很像是传递命令行参数给 docker container create 命令. 同样, network 和 volume 定义类似于 docker network create 和 docker volume create 命令.
与 docker container create 一样, 在 Dockerfile 中指定的选项 (比如: CMD, EXPOSE, VOLUME, ENV 等) 也是一样的, 你不需要在 docker-compose.YAML 中再次指定它们.
1.1. build
应用于构建时的配置选项
build 指定了构建上下文路径
或者, 也可以用一个包含 context 和可选的 dockerfile 及 args 的对象类指定
如果在指定 build 的同时还指定了 image, 那么将会用指定的镜像来构建
1.2. context
指向包含 Dockerfile 目录的路径, 或者指向 Git 仓库的 url
如果这个值是相对路径, 那么它相对的是 compose file 所在的位置(PS: 其实就是当前目录)
1.3. Dockerfile
你也可以用 Dockerfile 来构建, 不过这个时候必须指定 context
- (PS:dockerfile 是用来生成镜像的, 也就是说构建的时候可以从 image 构建, 也可以从 dockerfile 构建, 是一样的)
- 1.4. args
添加构建参数, 这些环境变量只能在构建过程中访问
首先, 在 Dockerfile 中定义变量
然后, 在构建的时候给这些变量赋值
或者, 下面这种写法也是可以的
注意: 如果在 Dockerfile 中, ARG 在 FROM 指令之前, 那么在 FROM 指令下 ARG 不可用
你也可以在构建参数中省略它们的值, 这种情况下会从 Compose 运行的环境中取值(PS: 其实就是环境变量)
1.5. cache_from
缓存的镜像列表
1.6. shm_size
为这个构建的容器设置 / dev/shm 分区的大小
1.7. configs
授权某个服务可以访问它下面配置的 configs, 支持两种语法
1.7.1. 短语法
短语法只指定 config 名称, 授权容器可以访问 config, 并将其挂载到该容器下的 /<config_name>
下面的例子授权 Redis 服务访问 my_config 和 my_other_config 配置. my_config 的值设置的是./my_config.txt, 而 my_other_config 的值指定的是外部资源, 这就意味着该值已经被定义在 Docker 中了.
1.7.2. 长语法
长语法提供了更细粒度的控制
source :config 的名称
target : 被挂载到容器后的文件名称, 默认是 /<source>
uid 和 gid : 被挂载到容器的文件的所有者和所属组 ID
mode : 被挂载到容器中的文件的权限(PS: 如果你不熟悉 UNIX 的权限模式, 可以用这个工具 http://permissions-calculator.org/ )
下面这个例子将在容器下设置 my_config 和 redis_config, 设置权限是 0440, 所有者和所属组都是 103,Redis 服务不可以访问 my_other_config 配置
1.8. container_name
自定义容器名称, 而不是用默认生成的名称
1.9. depends_on
表示服务之间的依赖关系, 服务依赖关系导致以下行为:
docker-compose up 按照依赖顺序启动服务
docker-compose up SERVICE 自动包含服务的依赖
docker-compose stop 按照依赖顺序停止服务
下面的例子中, db 和 Redis 会先于 web 启动, 启动 Web 的时候也会创建并启动 db 和 Redis,Web 停止之前会先停止 db 和 Redis
注意: depends_on 不会等待 db 和 Redis 启动好了再启动 Web
1.10. deploy
只有在集群方式部署的时候这个配置才有效
1.10.1. mode
global(每个集群节点只有一个容器) 或者 replicated (指定数量的容器). 默认是 replicated
1.11. env_file
添加一个环境变量文件, 可以是单个值或者一个列表
如果同一个变量出现在多个文件中, 则后者覆盖前者
1.12. environment
添加一个环境变量, 可以覆盖 env_file 中同名的变量值
1.13. expose
在不将端口发布到主机的情况下公开端口
1.14. image
指定容器从哪个镜像启动, 可以是镜像 ID, 也可以是镜像 tag
1.15. network_mode
网络模式
1.16. ports
端口, 两种语法
短语法
长语法
1.17. restart
重启策略, 默认是 no
1.18. ulimits
覆盖容器默认的 ulimits
1.19. volumes
挂载主机的路径或 volumes 名称
你可以为单个服务挂载一个主机路径, 这个时候就没有定义顶级的 volumes 了. 但是, 如果你希望多个服务复用一个 volumes, 那么这个时候就要定义在顶级了.
短语法
指定主机上的路径(HOST:CONTAINER), 或者一个访问模式(HOST:CONTAINER:ro)
(PS: 稍微解释一下, 比如 / opt/data:/var/lib/MySQL 表示挂载到主机的路径是 / opt/data, 挂载到容器的路径是 / var/lib/MySQL, 其实挂载可以理解为映射)
长语法
type : 挂载类型(volume, bind,tmpfs)
source : 挂载的源
target :volume 被挂载到容器中的路径
read_only : 设置只读
propagation :bind 的额外选项
nocopy :volume 的额外选项, 表示当 volume 创建的时候是否禁止从容器上复制数据
size :tmpfs 的额外选项, 表示挂载的字节大小
1.20. 指定时长与字节值
时长支持的单位: us,ms,s,m,h
字节大小支持的单位: b,k,m,g 或者 b,kb,mb,gb
2. Volume configuration
下面的例子展示了两个服务, 一个数据库的数据目录以一个 volumn 的形式与另一个服务共享, 以至于它可以周期性的备份数据:
顶级 volumns 可以是空的, 此时它使用 Docker 引擎默认提供的驱动 (大多数情况下是 local) 来配置. 你也可以指定下列 key
3. 示例
4. 文档
- https://docs.docker.com/compose/compose-file/
- https://docs.docker.com/compose/reference/
- http://permissions-calculator.org
- https://yaml.org
来源: https://www.cnblogs.com/cjsblog/p/10888778.html