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配置项将被忽略。
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配置项将被忽略。