docker-compose详解(三)

957de5803c8dd147f4aa4305c286fbcd.png

Docker Compose是一个用于定义和运行多容器Docker应用程序的工具。它允许用户使用YAML格式的配置文件(通常是docker-compose.yml)来配置应用程序所需的所有服务,并可以通过一个命令来启动或关闭这些容器。

服务配置(接上一篇)

6. container_name

指定自定义容器的名称,而不是使用默认名称。例如:

container_name: my-web-container

因为Docker容器的名称必须唯一,所以为一个服务指定了自定义容器名称后,该服务不能进行扩展。如果尝试为该服务扩容将会导致错误。

使用docker stack deploy时的注意事项:在swarm mode下部署堆栈时,container_name配置项将被忽略。

7. credential_spec

在3.3版的配置文件格式中加入

在3.8或更高版本文件格式中支持将组托管服务帐户(GMSA)配置与Compose配置文件一起使用。

配置托管服务帐户的凭据规格(credential spec)。此选项仅用于使用Windows容器的服务。credential_spec配置必须采用file://或registry://格式。使用file:时,引用的文件必须存在于Docker数据目录的CredentialSpecs子目录中,在Windows上,Docker数据目录默认为C:\ProgramData\Docker\。以下示例从名为C:\ProgramData\Docker\CredentialSpecs\my-credential-spec.json的文件加载凭证规格:

credential_spec:
  file: my-credential-spec.json

使用registry:时,将从守护进程主机上的Windows注册表中读取凭据规格。其注册表值必须位于HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Virtualization\Containers\CredentialSpecs。以下示例从注册表中名为my-credential-spec的值加载凭证规格:

credential_spec:
  registry: my-credential-spec

为服务配置GMSA凭据规格时,只需用config指定凭据规格。例如:

version: "3.8"
services:
  myservice:
    image: myimage:latest
    credential_spec:
      config: my_credential_spec
configs:
  my_credentials_spec:
    file: ./my-credential-spec.json|

8. depends_on

指定服务之间的依赖关系,解决服务启动先后顺序问题。指定服务之间的依赖关系,将会导致以下行为:

docker-compose up以依赖顺序启动服务。

docker-compose up SERVICE会自动包含SERVICE的依赖项。

docker-compose stop以依赖顺序停止服务。

例如以下示例:

version: "3.8"
services:
  web:
    build: .
    depends_on:
      - db
      - redis
  redis:
    image: redis
  db:
    image: postgres

启动时会先启动db和redis,最后才启动web。在使用docker-compose up web启动web时,也会启动db和redis,因为在web服务中指定了依赖关系。在停止时也在web之前先停止db和redis。

使用depends_on时的注意事项:

服务不会等待该服务所依赖的服务完全启动之后才启动。例如上例,web不会等到db和redis完全启动之后才启动。

V3版不再支持的condition形式的depends_on。

V3版中,在swarm mode下部署堆栈时,depends_on配置项将被忽略。

9. deploy

在3版的配置文件格式中加入

指定部署和运行服务的相关配置。该配置仅在swarm mode下生效,并只能通过docker stack deploy命令部署,docker-compose up和docker-compose run命令将被忽略。例如:

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

deploy配置项中包含endpoint_mode、labels、mode、placement、replicas、resources、restart_policy、update_config等子配置项。

(1) endpoint_mode

在3.2版的配置文件格式中加入

为外部客户端连接到swarm指定服务发现方式:

endpoint_mode: vip:Docker为服务分配了一个前端的虚拟IP,客户端通过该虚拟IP访问网络上的服务。Docker在客户端和服务的可用工作节点之间进行路由请求,而无须关系有多少节点正在参与该服务或这些节点的IP地址或者端口。这是默认设置。

endpoint_mode: dnsrr:DNS轮询(DNSRR),Docker设置服务的DNS条目,以便对服务名称的DNS查询返回IP地址列表,并且客户端通过轮询的方式直接连接到其中之一。

例如:

version: "3.8"
services:
  wordpress:
    image: wordpress
    ports:
      - "8080:80"
    deploy:
      mode: replicated
      replicas: 2
      endpoint_mode: vip

(2) labels

指定服务的标签。这些标签仅在服务上设置,而不在服务的任何容器上设置。例如:

version: "3.8"
services:
  web:
    image: web
    deploy:
      labels:
        com.example.description: "This label will appear on the web service"

(3) mode

指定服务的容器副本模式。可以为:

global:每个swarm节点只有一个该服务容器。

replicated:整个集群中存在指定份数的服务容器副本,为默认值。

例如,指定容器副本模式为global:

version: "3.8"
services:
  worker:
    image: dockersamples/examplevotingapp_worker
    deploy:
      mode: global

(4) placement

指定constraints和preferences。constraints可以指定只有符合要求的节点上才能运行该服务容器,preferences可以指定容器分配策略。例如,指定集群中只有满足node.rolemanager和engine.labels.operatingsystemubuntu 18.04条件的节点上能运行db服务容器,并且在满足node.labels.zone的节点上均匀分配:

version: "3.8"
services:
  db:
    image: postgres
    deploy:
      placement:
        constraints:
          - "node.role==manager"
          - "engine.labels.operatingsystem==ubuntu 18.04"
        preferences:
          - spread: node.labels.zone

(5) max_replicas_per_node

在3.8版的配置文件格式中加入

如果服务的容器副本模式为replicated(默认),可以指定每个节点上运行的最大容器副本数量。当指定的容器副本数量大于最大容器副本数量时,将引发no suitable node (max replicas per node limit exceed)错误。例如:

version: "3.8"
services:
  worker:
    image: dockersamples/examplevotingapp_worker
    networks:
      - frontend
      - backend
    deploy:
      mode: replicated
      replicas: 6
      placement:
        max_replicas_per_node: 1

(6) replicas

如果服务的容器副本模式为replicated(默认),指定运行的容器副本数量。例如:

version: "3.8"
services:
  worker:
    image: dockersamples/examplevotingapp_worker
    networks:
      - frontend
      - backend
    deploy:
      mode: replicated
      replicas: 6

(7) resources

配置资源限制。例如,指定redis服务使用的cpu份额为25%到50%,内存为20M到50M:

version: "3.8"
services:
  redis:
    image: redis:alpine
    deploy:
      resources:
        limits:
          cpus: '0.50'
          memory: 50M
        reservations:
          cpus: '0.25'
          memory: 20M

在V3版Compose配置文件中的改变:resources取代了V3版之前的Compose配置文件中旧的资源限制的配置项,包括cpu_shares、cpu_quota、cpuset、mem_limit、memswap_limit、mem_swappiness。

在非swarm mode容器上设置资源限制:此处的resources配置项只有用于deploy配置项之下和swarm mode。如果要在非swarm mode部署中设置资源限制,需使用V2版Compose配置文件中CPU、memory和其他资源的配置项。

(8) restart_policy

指定容器的重启策略。代替restart。有以下配置选项:

condition:重启策略。值可以为none、on-failure或any,默认为any。

delay:尝试重启的等待时间。指定为持续时间(durations)。默认值为0。

max_attempts:重启最多尝试的次数,超过该次数将放弃。默认为永不放弃。如果在window配置的时间之内未成功重启,则此次尝试不计入max_attempts的值。

window:在决定重启是否成功之前的等待时间。指定为持续时间(durations)。默认值为立即决定。

例如,指定重启策略为失败时重启,等待5s,重启最多尝试3次,决定重启是否成功前的等待时间为120s:

version: "3.8"
services:
  redis:
    image: redis:alpine
    deploy:
      restart_policy:
        condition: on-failure
        delay: 5s
        max_attempts: 3
        window: 120s

(9) rollback_config

在3.7版的配置文件格式中加入

配置在更新失败的情况下如何回滚服务。有以下配置选项:

parallelism:一次回滚的容器数量。如果设置为0,则所有容器同时回滚。

delay:每个容器组之间的回滚所等待的时间。默认值为0s。

failure_action:回滚失败后的行为。有continue和pause两种,默认值为pause。

monitor:每次任务更新后监视失败的时间(ns|us|ms|s|m|h)。默认值为0s。

max_failure_ratio:在回滚期间能够容忍的最大失败率。默认值为0。

order:设置回滚顺序。stop-first为在开启新任务之前停止旧任务,start-first为首先启动新任务,和正在运行任务短暂重叠,默认值为stop-first。

(10) update_config

配置如何更新服务。该配置对滚动更新很有用。有以下配置选项:

parallelism:一次更新的容器数量。

delay:更新一组容器之间的等待时间。

failure_action:更新失败后的行为。有continue、rollback和pause三种,默认值为pause。

monitor:每次任务更新后监视失败的时间(ns|us|ms|s|m|h)。默认值为0s。

max_failure_ratio:在更新期间能够容忍的最大失败率。

order:设置更新顺序。stop-first为在开启新任务之前停止旧任务,start-first为首先启动新任务,和正在运行任务短暂重叠,默认值为stop-first。注意该配置项在3.4版的配置文件格式中加入,仅支持3.4或更高版本。

例如,指定每次更新2个容器,更新等待时间10s,更新顺序为先停止旧任务再开启新任务:

version: "3.8"
services:
  vote:
    image: dockersamples/examplevotingapp_vote:before
    depends_on:
      - redis
    deploy:
      replicas: 2
      update_config:
        parallelism: 2
        delay: 10s
        order: stop-first

(11) 不支持docker stack deploy的配置项

以下为支持docker-compose up和docker-compose run,不支持docker stack deploy或deploy配置项的配置项:

build
cgroup_parent
container_name
devices
tmpfs
external_links
links
network_mode
restart
security_opt
userns_mode

10. devices

指定设备映射列表。与Docker客户端create的--device选项类似。例如:

devices:
  - "/dev/ttyUSB0:/dev/ttyUSB0"

使用docker stack deploy时的注意事项:在swarm mode下部署堆栈时,devices配置选项将被忽略。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值