docker-compose.yml知多少
参数介绍:
0).yml中顶级的配置项:
version 定义了版本信息
services 定义了服务的配置信息,包含应用于该服务启动的每个容器的配置
networks 定义了网络信息,提供给 services 中的 具体容器使用,类似于命令行的 docker network create
volumes 定义了卷信息,提供给 services 中的 具体容器使用,类似于命令行的 docker volume create
1)version:指定 docker-compose.yml 的版本
V1 版本的 docker-compose.yml 只被支持到 docker-compose 1.6.x。再往后的 docker-compose 版本就不再支持 V1 版本的 docker-compose.yml
V1 版本的 docker-compose.yml 文件格式主要区别就是:
- 没有开头的 version 声明
- 没有 services 声明
- 不支持 depends_on
- 不支持命名的 volumes, networks, build arguments 声明
V2版本仅支持单机模式
V3版本支持单机模式也支持多机模式
2)services:多个容器集合,它有多个子集,该子集是自定义的容器。
services:包含过个实例的service的定义
3.0) tty: true
默认给容器一个虚拟终端
3)image:指定服务所使用的镜像,如果本地不存在,拉取镜像
image: mysql:5.7
3.1)build 基于dockerfile文件构建镜像
buildbuild: /path/to/build/dir
可以是相对路径,只要上下文确定就可以读取到Dockerfile。
build: ./dir
设定上下文根目录,然后以该目录为准指定Dockerfile。
如果同时指定image和build两个标签,那么Compose会构建镜像并且把镜像命名为image值指定的名字。
4)volumes:卷挂载路径
volumes:
- 本地的目录名称:容器中的目录名称
4)volumes_from,从另一个服务或容器挂载其数据卷
从另一个服务或容器挂载其数据卷5)restart: always|no|on-failure| unless-stopped (3.7中已经被RESTART_POLICY)
restart: "no" # no是默认的重启策略,在任何情况下都不会重启容器。
restart: always # 指定为always时,容器总是重新启动。
restart: on-failure # 如果退出代码指示出现故障错误,则on-failure将重新启动容器。
restart: unless-stopped
6)RESTART_POLICY
配置是否以及如何在容器退出时重新启动容器。取代 restart。
RESTART_POLICYcondition:一个none,on-failure或any(默认:) any。
delay:重新启动尝试之间等待的时间,指定为 持续时间(默认值:0)。
max_attempts:在放弃之前尝试重启容器的次数(默认值:永不放弃)。如果在配置中未成功重新启动 window,则此尝试不会计入配置的max_attempts值。例如,如果max_attempts设置为“2”,并且第一次尝试时重新启动失败,则可能尝试重新启动两次以上。
window:在决定重启是否成功之前等待多长时间,指定为持续时间(默认值:立即决定)。
7)environment:环境变量配置,可以用数组或字典两种方式
environment任何布尔值: true,false,yes,no需要用引号括起来,以确保它们不被YML解析器转换为True或False
如果服务指定了build选项,那么在构建过程中通过environment定义的环境变量将不会起作用。
将使用build的args子选项来定义构建时的环境变量。
8)depends_on
解决容器的依赖、启动先后的问题
depends_on:
- db
- redis
实例中先启动容器 db 和 redis 再启动 web,注意:web 服务不会等待 redis 和 db 「完全启动」之后才启动
9)ports:映射端口信息
ports:映射端口信息使用:
宿主端口:容器端口 (即:HOST:CONTAINER) 的格式格式,或者仅仅指定容器的端口(宿主将会随机选择端口)都可以。
注意:当使用 HOST:CONTAINER 格式来映射端口时,如果你使用的容器端口小于 60 并且没放到引号里,可能会得到错误结果,因为 YAML 会自动解析 xx:yy 这种数字格式为 60 进制。为避免出现这种问题,建议数字串都采用引号包括起来的字符串格式
10)expose ----->暴露端口,但不映射到宿主机,只被连接的服务访问
仅可以指定容器内部的端口为参数
expose:
- "3000"
- "8000"
11)container_name指定容器的名称,默认将会使用 项目名称服务名称序号 这样的格式
container_name: docker-web-container
注意: 指定容器名称后,该服务将无法进行扩展(scale),因为 Docker 不允许多个容器具有相同的名称
12)labels 为容器添加 Docker 元数据(metadata)信息。例如可以为容器添加辅助说明信息
labels:
com.startupteam.description:"webapp for a startupteam"
com.startupteam.department:"devops department"
com.startupteam.release:"rc3 for v1.0"
13)extra_hosts --->类似 Docker 中的 --add-host 参数,指定额外的 host 名称映射信息
extra_hosts:
- "googledns:8.8.8.8"
- "dockerhub:52.1.157.61"
会在启动后的服务容器中 /etc/hosts 文件中添加如下两条条目:
8.8.8.8 googledns
52.1.157.61 dockerhub
14)alias 别名
格式如下:
alias 别名网络上此服务的别名(备用主机名)。同一网络上的其他容器可以使用服务名称或此别名连接到其中一个服务的容器。
由于aliases是网络范围的,因此相同的服务可以在不同的网络上具有不同的别名。
注意:网络范围的别名可以由多个容器共享,甚至可以由多个服务共享。如果是,则无法保证名称解析为的容器。
15)dns :自定义DNS服务器,可以是一个值,也可以是一个列表
自定义DNS服务器16)dns_search:配置 DNS 搜索域,可以是一个值或列表
配置 DNS 搜索域17)entrypoint类比dockerfile中的entrypoint:
在docker-compose.yml中可以定义接入点,覆盖Dockerfile中的定义:
entrypoint: /code/entrypoint.sh
18)command:覆盖容器启动后默认执行的命令
command: [bundle,exec,thin,-p,3000]
19)env_file:从文件中获取环境变量,可以指定一个文件路径或路径列表,其优先级低于 environment 指定的环境变量
env_file: .env
env_file:
- ./common.env
20)network
21)links
links:将指定容器连接到当前连接,可以设置别名,避免ip方式导致的容器重启动态改变的无法连接情况
links: # 指定服务名称:别名 - docker-compose-eureka-server:compose-eureka