docker-compose详解(六)

5fdf1bfa161a23f824fd0476ec25bfb7.png

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

服务配置(接上一篇)docker-compose详解(五)

31. secrets

为每个服务授予对保密数据(secrets)的访问权限。支持short和long两种格式的语法。更多secrets信息,参考secrets。

使用docker stack deploy时的注意事项:该保密数据(secret)必须已存在或者在Compose配置文件顶层secrets配置项中定义,否则堆栈部署将失败。

short语法仅指定secret名称来授予容器访问secret数据的权限并将其挂载到容器的/run/secrets/<secret_name>上。source名称和目标挂载点都设置为secret名称。例如以下示例,授予了redis服务对secrets的my_secret和my_other_secret的访问权限,其中my_secret的值设置到文件./my_secret.txt的内容中,my_other_secret定义为外部资源,这意味着它已经在Docker中通过运行docker secret create命令或其他堆栈部署进行定义,如果外部secret不存在,堆栈部署将会失败并显示secret not found错误:

version: "3.8"
services:
  redis:
    image: redis:latest
    deploy:
      replicas: 1
    secrets:
      - my_secret
      - my_other_secret
secrets:
  my_secret:
    file: ./my_secret.txt
  my_other_secret:
    external: true

long语法提供了在服务的任务容器内如何创建secret的更多粒度:

source:Docker中存在的secret名称。

target:指定要挂载到服务的任务容器的/run/secrets/中的文件名称。如果未指定,默认为source的值。

uid和gid:指定服务的任务容器的/run/secrets/中所拥有的该文件的UID或GID。如果未指定,两者都默认为0。

mode:以八进制表示法指定要挂载到服务的任务容器的/run/secrets/中的文件权限。例如,0444代表可读。默认值在Docker 1.13.1为0000,在较新版本为0444。secret内容已挂载到临时文件系统中,所以不可写,如果设置了可写位将被忽略。可以设置可执行位。如果不熟悉UNIX文件权限模式,可以使用权限计算器 。

例如以下示例,指定secret名称为my_secret,授予redis服务对my_secret的访问权限,指定要挂载到redis服务的任务容器的/run/secrets/中的文件名称为redis_secret,指定UID和GID均为103,指定要挂载到服务的任务容器的/run/secrets/中的文件权限为0440(group-readable),但该redis服务没有访问my_other_secret的权限:

version: "3.8"
services:
  redis:
    image: redis:latest
    deploy:
      replicas: 1
    secrets:
      - source: my_secret
        target: redis_secret
        uid: '103'
        gid: '103'
        mode: 0440
secrets:
  my_secret:
    file: ./my_secret.txt
  my_other_secret:
    external: true

可以授予服务访问多个secret的权限,并且可以混合long和short语法。定义secret并不意味着授予服务对其的访问权限。

32. security_opt

为每个容器覆盖默认的标签(label)。例如配置标签中的用户名和角色名:

security_opt:
  - label:user:USER
  - label:role:ROLE

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

8f7ada6bcd3405c913904bcea4509033.png

33. stop_grace_period

指定在发送SIGKILL之前,如果容器无法处理SIGTERM或使用stop_signal指定的任何停止信号时,试图停止该容器所需要的等待时间。默认情况下,stop在发送SIGKILL之前等待10秒以退出容器。时间指定为duration。具体示例如下:

stop_grace_period: 1s
stop_grace_period: 1m30s

34. stop_signal

设置停止容器的信号。默认使用SIGTERM停止容器。例如指定SIGUSR1信号:

stop_signal: SIGUSR1

35. sysctls

在容器中设置的内核参数。可以使用数组或字典两种格式。例如指定连接数为1024和开启TCP的syncookies:

sysctls:
  net.core.somaxconn: 1024
  net.ipv4.tcp_syncookies: 0
sysctls:
  - net.core.somaxconn=1024
  - net.ipv4.tcp_syncookies=0

使用docker stack deploy时的注意事项:在swarm mode下部署堆栈时,sysctls配置项要求Docker Engine 19.03或以上。

36. tmpfs

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

挂载一个临时文件系统到容器内部。可以是一个值或一个列表。例如:

tmpfs: /run

tmpfs:
  - /run
  - /tmp

在容器内挂载一个临时文件系统。Size可以指定挂载的tmpfs大小,以字节为单位。默认情况下不受限制。例如:

- type: tmpfs
     target: /app
     tmpfs:
       size: 1000

使用docker stack deploy时的注意事项:在swarm mode下部署堆栈时使用3至3.5版本的Compose配置文件,tmpfs配置项将被忽略。

37. ulimits

覆盖容器的默认ulimit值。可以单一地将限制值设为一个整数,也可以将soft/hard限制指定为映射。例如,指定最大进程数为65535,指定文件句柄数,其中软限制为20000,系统硬限制为40000,软限制应用可以随时修改,不能超过硬限制,硬限制只能root用户提高:

ulimits:
  nproc: 65535
  nofile:
    soft: 20000
    hard: 40000

38. userns_mode

指定用户命名空间模式。如果Docker守护进程配置了用户名称空间,则禁用此服务的用户名称空间。以下是使用主机上的用户命名空间的配置示例:

userns_mode: "host"

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值