您的位置:首页 > 运维架构 > Docker

Docker三剑客之Compose-三

2017-04-19 11:23 686 查看
title: Docker三剑客之Compose(三)——Compose配置文件详解

date: 2015-12-05 15:20:17

tags: docker

categories: Docker 三剑客

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

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


docker run
一样,在Dockerfile中指定过的配置项(比如:
CMD
EXPOSE
VOLUME
ENV
)无需在
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

b
4000
uild

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
中要指定
file
service
两个标识。
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-file
docker-compose up
docker-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

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


volumes_from:
- service_name
- container_name
- service_name:rw
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: