配置选项
1.bulid
服务除了可以基于指定的镜像,还可以基于⼀份 Dockerfile,在使⽤ up 启动之时执⾏构建任务,这个构建标签就是 build,它可以指定Dockerfile 所在⽂件夹的路径。Compose 将会利⽤它⾃动构建这个镜像,然后使⽤这个镜像启动服务容器
build: /path/to/build/dir
也可以是相对路径
build: ./dir
设定上下⽂根⽬录,然后以该⽬录为准指定 Dockerfile
build:
context: ../
dockerfile: path/of/Dockerfile
例⼦
version: '3'
services:
webapp:
build: ./dir
如果context中有指定的路径,并且可以选定 Dockerfile 和 args。那么 arg 这个标签,就像 Dockerfile 中的 ARG 指令,它可以在构建过程中指定环境变量,但是在构建成功后取消,在 l ⽂件中也⽀持这样的写法:
version: '3'
services:
webapp:
build:
context: ./dir
dockerfile: Dockerfile-alternate
args:
buildno: 1
与ENV不同的是,ARG可以为空值
args:
- buildno
- password
如果要指定image以及build,选项格式为
build: ./dir
image: webapp:tag
这会在./dir⽬录⽣成⼀个名为webaapp和标记为tag的镜像
Note:当⽤(Version 3) Compose ⽂件在集模式下部署堆栈时,该选项被忽略。因为docker stack命令只接受预先构建的镜像
2. context
context选项可以是 Dockerfile 的⽂件路径,也可以是到链接到 git 仓库的 url
当提供的值是相对路径时,它被解析为相对于撰写⽂件的路径,此⽬录也是发送到 Docker 守护进程的context
build:
context: ./dir
3. dockerfile
使⽤此 dockerfile ⽂件来构建,必须指定构建路径
build:
context: .
dockerfile: Dockerfile-alternate
4. args
添加构建参数,这些参数是仅在构建过程中可访问的环境变量
⾸先,在Dockerfile中指定参数:
ARG buildno
ARG password
RUN echo "Build number: $buildno"
RUN script-requiring-password.sh "$password"
然后指定build下的参数,可以传递映射或列表
build:
context: .
args:
buildno: 1
password: secret
build:
context: .
args:
- buildno=1
- password=secret
指定构建参数时可以省略该值,在这种情况下,构建时的值默认构成运⾏环境中的值
args:
- buildno
- password
Note: YAML 布尔值(true,false,yes,no,on,off)必须使⽤引号括起来,以为了能够正常被解析为字符串5. cache_from
编写缓存解析镜像列表
build:
context: .
cache_from:
- alpine:latest
- corp/web_app:3.14
6. labels
使⽤Docker标签将元数据添加到⽣成的镜像中,可以使⽤数组或字典。
建议使⽤反向DNS标记来防⽌签名与其他软件所使⽤的签名冲突
build:
context: .
labels:
build:
context: .
labels:
- "ample.description=Accounting webapp"
- "ample.department=Finance"
- "ample.label-with-empty-value"
7.shm_size
设置容器/dev/shm分区的⼤⼩,值为表⽰字节的整数值或表⽰字符的字符串
build:
context: .
shm_size: '2gb'
build:
context: .
shm_size: 10000000
8. target
根据对应的 Dockerfile 构建指定 Stage
build:
context: .
target: prod
9. cap_add、cap_drop
添加或删除容器功能,可查看
cap_add:
-
ALL
cap_drop:
- NET_ADMIN
- SYS_ADMIN
Note:当⽤(Version 3) Compose ⽂件在集模式下部署堆栈时,该选项被忽略。因为docker stack命令只接受预先构建的镜像
10. command
覆盖容器启动后默认执⾏的命令
command: bundle exec thin -p 3000
该命令也可以是⼀个列表,⽅法类似于 dockerfile:
command: ["bundle", "exec", "thin", "-p", "3000"]
11. configs
使⽤服务configs配置为每个服务赋予相应的访问权限,⽀持两种不同的语法。
Note: 配置必须存在或在configs此堆栈⽂件的顶层中定义,否则堆栈部署失效
1.SHORT 语法
SHORT 语法只能指定配置名称,这允许容器访问配置并将其安装在/<config_name>容器内,源名称和⽬标装⼊点都设为配置名称。version: "3.3"
services:
redis:
image: redis:latest
deploy:
replicas: 1
configs:
- my_config
- my_other_config
configs:
my_config:
file: ./
my_other_config:
external: true
以上实例使⽤ SHORT 语法将redis服务访问授予my_config和my_other_config ,并被my_other_config定义为外部资源,这意味着它已经在 Docker 中定义。可以通过docker config create命令或通过另⼀个堆栈部署。如果外部部署配置都不存在,则堆栈部署会失败并出现config not found错误。
Note: config 定义仅在 3.3 版本或在更⾼版本的撰写⽂件格式中受⽀持,YAML 的布尔值(true, false, yes, no, on, off)必须要使⽤引号引起来(单引号、双引号均可),否则会当成字符串解析。
2. LONG 语法
LONG 语法提供了创建服务配置的更加详细的信息
source:Docker 中存在的配置的名称
target:要在服务的任务中装载的⽂件的路径或名称。如果未指定则默认为/<source>
uid和gid:在服务的任务容器中拥有安装的配置⽂件的数字UID或GID。如果未指定,则默认为在Linux上。Windows不⽀持。
mode:在服务的任务容器中安装的⽂件的权限,以⼋进制表⽰法。例如,0444代表⽂件可读的。默认是0444。如果配置⽂件⽆法写⼊,是因为它们安装在临时⽂件系统中,所以如果设置了可写位,它将被忽略。可执⾏位可以设置。如果您不熟悉UNIX⽂件权限模式,
下⾯⽰例在容器中将my_config名称设置为redis_config,将模式设置为0440(group-readable)并将⽤户和组设置为103。该 `redis 服务⽆法访问my_other_config配置。
version: "3.3"
services:
redis:
image: redis:latest
deploy:
replicas: 1
configs:
- source: my_config
target: /redis_config
uid: '103'
gid: '103'
mode: 0440
configs:
docker重启容器命令my_config:
file: ./
my_other_config:
external: true
可以同时授予多个配置的服务相应的访问权限,也可以混合使⽤ LONG 和 SHORT 语法。定义配置并不意味着授予服务访问权限。
12. cgroup_parent
可以为容器选择⼀个可选的⽗ cgroup
cgroup_parent: m-executor-abcd
注意:当使⽤(Version 3)Compose ⽂件在集模式下部署堆栈时,忽略此选项
13. container_name
为⾃定义的容器指定⼀个名称,⽽不是使⽤默认的名称
container_name: my-web-container
因为 docker 容器名称必须是唯⼀的,所以如果指定了⼀个⾃定义的名称,不能扩展⼀个服务超过1个容器
14. credential_spec
为托管服务账户配置凭据规范,此选项仅适⽤于 Windows 容器服务
在credential_spec上的配置列表格式为file://<filename>或registry://<value-name>
使⽤file: 应该注意引⽤的⽂件必须存在于 CredentialSpecs,docker 数据⽬录的⼦⽬录中。在 Windows 上,该⽬录默认
为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
15. deploy
指定与部署和运⾏服务相关的配置
version: '3'
services:
redis:
image: redis:alpine
deploy:
replicas: 6
update_config:
parallelism: 2
delay: 10s
restart_policy:
condition: on-failure
这⾥有⼏个⼦选项
1. endpoint_mode
指定连接到组外部客户端服务发现⽅法
endpoint_mode:vip:Docker 为该服务分配了⼀个虚拟 IP(VIP),作为客户端的 “前端“ 部位⽤于访问⽹络上的服务。
endpoint_mode: dnsrr : DNS轮询(DNSRR)服务发现不使⽤单个虚拟 IP。Docker为服务设置 DNS 条⽬,使得服务名称的 DNS 查询返回⼀个 IP 地址列表,并且客户端直接连接到其中的⼀个。如果想使⽤⾃⼰的负载平衡器,或者混合 Windows 和 Linux 应⽤程序,则DNS 轮询调度(round-robin)功能就⾮常实⽤。
version: "3.3"
services:
wordpress:
image: wordpress
ports:
- 8080:80
networks:
- overlay
deploy:
mode: replicated
replicas: 2
endpoint_mode: vip
mysql:
image: mysql
volumes:
- db-data:/var/lib/mysql/data
networks:
- overlay
deploy:
mode: replicated
replicas: 2
endpoint_mode: dnsrr
volumes:
db-data:
networks:
overlay:
相关信息:、
2.labels
指定服务的标签,这些标签仅在服务上设置。
version: "3"
services:
web:
image: web
deploy:
labels:
通过将deploy外⾯的labels标签来设置容器上的labels
version: "3"
services:
web:
image: web
labels:
global:每个集节点只有⼀个容器
replicated:指定容器数量(默认)
version: '3'
services:
worker:
image: dockersamples/examplevotingapp_worker
deploy:
mode: global
4. placement
指定 constraints 和 preferences
version: '3'
services:
db:
image: postgres
deploy:
placement:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。