docker-compose.yml 配置详情解读

docker-compose.yml 配置详情解读

build

在构建时应用的配置选项。

build 可以指定为包含构建上下文路径的字符串:

version: "3.8"
services:
  webapp:
    build: ./dir

或者,作为具有在context下指定的路径的对象,以及可选的Dockerfileargs

version: "3.8"
services:
  webapp:
    build:
      context: ./dir
      dockerfile: Dockerfile-alternate
      args:
        buildno: 1

如果您指定imagebuild,那么Compose将使用中指定的webapp和可选名称命名构建的图像:tag``image

build: ./dir
image: webapp:tag

这将产生一个名为webapp并标记为的图像,该图像tag是从构建的./dir

CONTEXT

包含Dockerfile的目录的路径,或者git存储库的URL。

当提供的值是相对路径时,它将被解释为相对于Compose文件的位置。该目录还是发送到Docker守护程序的构建上下文。

Compose用生成的名称构建并标记它,然后使用该图像。

build:
  context: ./dir
DOCKERFILE

备用Dockerfile。

Compose使用一个替代文件进行构建。还必须指定一个构建路径。

build:
  context: .
  dockerfile: Dockerfile-alternate
ARGS

添加构建参数,这是只能在构建过程中访问的环境变量。

首先,在Dockerfile中指定参数:

ARG buildno
ARG gitcommithash

RUN echo "Build number: $buildno"
RUN echo "Based on commit: $gitcommithash"

然后在build键下指定参数。您可以传递映射或列表:

build:
  context: .
  args:
    buildno: 1
    gitcommithash: cdc3b19
build:
  context: .
  args:
    - buildno=1
    - gitcommithash=cdc3b19

build-args的范围

在Dockerfile中,如果您ARGFROM指令之前指定, ARG则在下方的构建指令中不可用FROM。如果您需要一个参数在两个地方都可用,请在FROM说明中也指定它。 有关用法的详细信息,请参阅文档中的“ 了解ARGS和FROM之间的交互方式”部分。

您可以在指定构建参数时忽略该值,在这种情况下,构建时的值就是运行Compose的环境中的值。

args:
  - buildno
  - gitcommithash

使用布尔值时的提示

YAML布尔值("true""false""yes""no""on""off")必须用引号括起来,这样分析器会将它们解释为字符串。

container_name

指定自定义容器名称,而不是生成的默认名称。

container_name: my-web-container

由于Docker容器名称必须唯一,因此如果您指定了自定义名称,则不能将服务扩展到1个以上的容器。尝试这样做会导致错误。

使用docker stack deploy时的注意事项

在集群模式下部署堆栈container_name时,忽略该选项https://docs.docker.com/engine/reference/commandline/stack_deploy/)

deploy

版本3文件格式添加。

指定与服务的部署和运行有关的配置。这只能部署到时生效泊坞窗堆栈部署,并且被忽略docker-compose updocker-compose run

version: "3.8"
services:
  redis:
    image: redis:alpine
    deploy:
      replicas: 6
      update_config:
        parallelism: 2
        delay: 10s
      restart_policy:
        condition: on-failure
environment

添加环境变量。您可以使用数组或字典。任何布尔值(true,false,yes,no)都需要用引号引起来,以确保YML解析器不会将其转换为True或False。

仅具有键的环境变量在运行Compose的计算机上解析为它们的值,这对于秘密或特定于主机的值很有用。

environment:
  RACK_ENV: development
  SHOW: 'true'
  SESSION_SECRET:
environment:
  - RACK_ENV=development
  - SHOW=true
  - SESSION_SECRET

注意

如果您的服务指定了构建选项,environment则在构建过程中不会自动显示中定义的变量 。使用的 args子选项build来定义构建时环境变量。

expose

公开端口而不将其发布到主机上-只有链接的服务才能访问它们。只能指定内部端口。

expose:
  - "3000"
  - "8000"
external_links

链接到在此范围之外docker-compose.yml甚至在Compose之外开始的容器,尤其是对于提供共享或公共服务的容器。 同时指定容器名称和链接别名()时,请external_links遵循与legacy选项相似的语义。links``CONTAINER:ALIAS

external_links:
  - redis_1
  - project_db_1:mysql
  - project_db_1:postgresql

注意

外部创建的容器必须连接到与其链接的服务相同的网络中的至少一个。链接 是旧选项。我们建议改为使用网络

使用docker stack deploy时的注意事项

在集群模式下部署堆栈external_links时,忽略该选项

extra_hosts

添加主机名映射。使用与docker client --add-host参数相同的值。

extra_hosts:
  - "somehost:162.242.195.82"
  - "otherhost:50.31.209.229"

/etc/hosts此服务的内部容器中创建一个具有ip地址和主机名的条目,例如:

162.242.195.82  somehost
50.31.209.229   otherhost
healthcheck

配置运行的检查以确定该服务的容器是否“健康”。有关运行状况检查 如何工作的详细信息,请参阅文档中的 HEALTHCHECK Dockerfile指令

healthcheck:
  test: ["CMD", "curl", "-f", "http://localhost"]
  interval: 1m30s
  timeout: 10s
  retries: 3
  start_period: 40s

intervaltimeoutstart_period指定为 duration

3.4版文件格式添加。

start_period选项以文件格式3.4添加。

test必须是字符串或列表。如果它是一个列表,第一项必须是NONECMDCMD-SHELL。如果是字符串,则等效于指定CMD-SHELL后跟该字符串。

# Hit the local web app
test: ["CMD", "curl", "-f", "http://localhost"]

如上所述,但包裹在中/bin/sh。以下两种形式是等效的。

test: ["CMD-SHELL", "curl -f http://localhost || exit 1"]
test: curl -f https://localhost || exit 1

要禁用图像设置的任何默认运行状况检查,可以使用disable: true。这等效于指定test: ["NONE"]

healthcheck:
  disable: true
image

指定用于启动容器的图像。可以是存储库/标签或部分图像ID。

image: redis
image: ubuntu:18.04
image: tutum/influxdb
image: example-registry.com:4000/postgresql
image: a4bc65fd

如果图像不存在,除非您还指定了build,否则Compose会尝试拉出它,在这种情况下,它将使用指定的选项来构建它并使用指定的标签对其进行标记。

labels

使用Docker标签将元数据添加到容器中。您可以使用数组或字典。

建议您使用反向DNS表示法,以防止标签与其他软件使用的标签冲突。

labels:
  com.example.description: "Accounting webapp"
  com.example.department: "Finance"
  com.example.label-with-empty-value: ""
labels:
  - "com.example.description=Accounting webapp"
  - "com.example.department=Finance"
  - "com.example.label-with-empty-value"
links

警告

--link标志是Docker的遗留功能。它最终可能会被删除。除非您绝对需要继续使用它,否则建议您使用 用户定义的网络 来促进两个容器之间的通信,而不要使用--link

用户定义的网络不支持的一项功能 --link是在容器之间共享环境变量。但是,您可以使用其他机制(例如卷)以更可控的方式在容器之间共享环境变量。

链接到另一个服务中的容器。指定服务名称和链接别名("SERVICE:ALIAS"),或者仅指定服务名称。

web:
  links:
    - "db"
    - "db:database"
    - "redis"

可以使用与别名相同的主机名访问链接服务的容器,如果未指定别名,则可以使用服务名。

不需要链接即可使服务进行通信-默认情况下,任何服务都可以使用该服务的名称访问任何其他服务。(另请参见Compose中的Networking中Links主题。)

链接也以与depends_on相同的方式表示服务之间的依赖关系 ,因此它们确定了服务启动的顺序。

注意

如果同时定义链接和网络,则它们之间具有链接的服务必须共享至少一个公共网络才能进行通信。

使用docker stack deploy时的注意事项

在集群模式下部署堆栈links时,忽略该选项

network_mode

网络模式。使用与docker client --network参数相同的值,以及特殊形式service:[service name]

network_mode: "bridge"
network_mode: "host"
network_mode: "none"
network_mode: "service:[service name]"
network_mode: "container:[container name/id]"

注意

networks

要加入的网络,引用顶级networks密钥下的条目 。

services:
  some-service:
    networks:
     - some-network
     - other-network
volumes

挂载主机路径或命名卷,指定为服务的子选项。

您可以将主机路径安装为单个服务的定义的一部分,而无需在顶级volumes密钥中进行定义。

但是,如果要在多个服务之间重用卷,请在顶级volumes密钥中定义一个命名卷。将命名卷与服务,群集和堆栈文件一起使用

更改为版本3文件格式。

顶级键定义了一个命名卷,并从每个服务的volumes列表中引用了该卷。这将替换volumes_from早期版本的Compose文件格式。

此示例显示了服务mydata正在使用的命名卷()web,以及为单个服务(db服务 下的第一个路径volumes)定义的绑定安装。该db服务还使用一个名为dbdatadbservice 下的第二个路径volumes)的命名卷,但是使用旧的字符串格式定义它来装入命名卷。volumes如图所示,命名卷必须在顶级 键下列出。

version: "3.8"
services:
  web:
    image: nginx:alpine
    volumes:
      - type: volume
        source: mydata
        target: /data
        volume:
          nocopy: true
      - type: bind
        source: ./static
        target: /opt/app/static

  db:
    image: postgres:latest
    volumes:
      - "/var/run/postgres/postgres.sock:/var/run/postgres/postgres.sock"
      - "dbdata:/var/lib/postgresql/data"

volumes:
  mydata:
  dbdata:

注意

有关卷的一般信息,请参阅文档中的“ 使用卷卷插件”部分。

想进一步了解配置详情可以 查阅 官方文档 https://docs.docker.com/compose/compose-file/#networks

发布了21 篇原创文章 · 获赞 16 · 访问量 5883

猜你喜欢

转载自blog.csdn.net/qq_41692766/article/details/105666833