Docker三剑客之Compose-三

本文详细介绍了Docker Compose的配置文件,包括build、cap_add & cap_drop、command等服务配置项,以及如何通过Compose管理多容器分布式部署的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

title: Docker三剑客之Compose(三)——Compose配置文件详解
date: 2015-12-05 15:20:17
tags: docker

categories: Docker 三剑客

Docker Compose是一个编排多容器分布式部署的工具,提供命令集管理容器化应用的完整开发周期,包括服务构建,启动和停止。


这篇文章介绍Compose的配置文件,它是一个YAML文件。所有的顶层字符定义了一个服务,每一个服务可以有多个配置,其中至少有imagebuild指定其镜像来源。默认配置文件是./docker-compose.yml

docker run一样,在Dockerfile中指定过的配置项(比如:CMDEXPOSEVOLUMEENV)无需在Compose配置文件中再次指定。

接下来介绍Compose服务的配置项,主要有:
- build
- cap_add & cap_drop
- command
- cgroup_parent
- container_name
- devices
- dns & dns_search
- dockerfile
- env_file
- environment
- expose
- extends
- external_links
- extra_hosts
- image
- links
- log_driver
- net
- ports
- volumes & volume_driver
- volumes_from

build

build的值或者是一个包含了Dockerfile文件的目录,或者是一个git库的URL。使用相对路径时,相对目录是Compose配置文件所在的目录。这个目录也作为上下文context被发送给docker daemon
格式:

build: /path/to/build/dir

build不能和image同时使用

cap_add & cap_drop

添加或取消容器的能力capabilities,可以通过man 7 capabilities查看后面值的列表;
示例:

cap_add:
    - ALL
cap_drop:
    - NET_ADMIN
    - SYS_ADMIN

command

使用command:可以覆盖Dockerfile中或拉去的镜像的CMD命令;

command: bundle exec thin -p 3000

cgroup_parent

为容器指定一个可选的父cgroup

cgroup_parent: m-executor-abcd

container_name

指定一个容器名称,这回覆盖默认的容器名称

container_name: my-web-container

由于容器的名称必须互不相同,当指定了自定义的容器名称后,在使用docker-compose scale命令时不能指定相应服务的容器个数大于1。否则会出错。

devices

列出设备间的映射,这和在docker client中使用--device标识是一样的。

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

dns & dns_search

dns为服务容器指定dns服务器,dns_search为容器指定dns search domain。两个都可以是单个值也可以是列表:

dns: 8.8.8.8

dns:
    - 8.8.8.8
    - 8.8.4.4

dockerfile

dockerfile指令必须和build指令一起使用,指定可选的Dockerfile的位置。

build: /path/to/build/dir
dockerfile: Dockerfile-alternate

dockerfile指令不能和image指令一起使用,否则会报错;

env_file

通过文件添加环境变量,可以是单个也可以是列表;如果通过docker-compose -f指定了Compose配置文件的位置,则env_file的位置相对于这个位置。

通过environment指令指定的环境变量会覆盖env_file中定义的环境变量。

env_file: .env

env_file:
    - ./common.env
    - ./apps/web.env

env文件中,每一行是一个VAR=VAL对,以#开头的行被认为是注释,忽略掉,例如:

# Set Rails/Rack environment
RACK_ENV=development

environment

用于添加环境变量,可以有如下两种格式:

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

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

expose

对外暴露端口,但不绑定到宿主机上,这些端口一般只用于--link

expose:
    - "3000"
    - "8000"

extends

extends指令使用其它服务的配置扩展当前服务的配置,通常在extends中要指定fileservice两个标识。file用来指定用于扩展的服务的配置文件;service用于指定用于扩展的服务的名称。例如:

web:
  extends:
    file: common-services.yml
    service: webapp

上述配置的意思是使用common-services.yml中的webapp服务扩展当前文件中的web服务。扩展的结果就好像在当前服务(web)的配置中添加了扩展服务(webapp)的配置一样。关于配置扩展的更多内容不久后会写一篇单独的文章介绍。

external_links

external_links指令用于连接定义在docker-compose.yml文件之外甚至Compose项目之外的容器,尤其是提供了共享服务的容器。其值的格式与--link标识很像,也是CONTAINER:ALIAS的形式,例如:

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

extra_hosts

extra_hosts指令用于向容器添加IP到主机名的映射,这些数据会写入到容器的/etc/hosts文件中,格式为:

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

写入到/etc/hosts文件中为:

162.242.195.82  somehost
50.31.209.229   otherhost

image

image指令用于指定服务使用的镜像,本地的或是远程的,Compose会自动将其pull下来。其值可以是标签,也可以是镜像ID。

image: ubuntu
image: orchardup/postgresql
image: a4bc65fd

links

links指令用于连接到其他服务的容器,值的格式为SERVICE:ALIAS(服务名:别名),也可以只指定服务名(此时,别名和服务名一样)。

links:
 - db
 - db:database
 - redis

docker run中的--link标识一样,links也会将连接到的容器的IP地址写入/etc/hosts文件。同时也会创建相应的环境变量。

log_driver

为服务指定log driver,这和docker run中的--log-driver标签是一样的,默认值是json-file

log_driver: "json-file"
log_driver: "syslog"
log_driver: "none"

只有json-filedocker-compose updocker-compose logs直接支持。使用其他的driver不会产生日志。

net

为服务容器指定网络模式,其作用和docker run中的--net标识是一样的。

net: "bridge"
net: "none"
net: "container:[name or id]"
net: "host"

更多内容请参考Docker之四种网络模式

ports

对外暴露接口,与docker run中的-p标识的效果一样,将容器的内部接口映射到宿主机的接口上。值的格式也与-p标识一样。

ports:
 - "3000"
 - "3000-3005"
 - "8000:8000"
 - "9090-9091:8080-8081"
 - "49100:22"
 - "127.0.0.1:8001:8001"
 - "127.0.0.1:5000-5010:5000-5010"

volume & volume_driver

向容器添加卷,既可以指定容器中的目录为卷,也可以将宿主机的目录挂载到容器中作为卷。

volumes:
 - /var/lib/mysql
 - ./cache:/tmp/cache
 - ~/configs:/etc/configs/:ro

可以指定宿主机上的相对路径,指定相对路径时其相对于Compose配置文件的目录,相对路径必须以...开头。

volumes_from

挂载其他容器或服务中的数据卷,通时可选指定rorw

volumes_from:
 - service_name
 - container_name
 - service_name:rw
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值