Docker三剑客之Compose-三
2017-04-19 11:23
686 查看
title: Docker三剑客之Compose(三)——Compose配置文件详解
date: 2015-12-05 15:20:17
tags: docker
这篇文章介绍Compose的配置文件,它是一个YAML文件。所有的顶层字符定义了一个服务,每一个服务可以有多个配置,其中至少有
和
接下来介绍
- 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
格式:
示例:
由于容器的名称必须互不相同,当指定了自定义的容器名称后,在使用
通过
env文件中,每一行是一个
上述配置的意思是使用
写入到
和
只有
更多内容请参考Docker之四种网络模式
可以指定宿主机上的相对路径,指定相对路径时其相对于
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
为容器指定一个可选的父cgroupcgroup_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
相关文章推荐
- docker三剑客之docker compose
- Docker 三剑客之Docker Compose详解
- Docker三剑客之Compose-一
- Docker 三剑客之 Docker Compose
- Docker(四):Docker 三剑客之 Docker Compose
- 容器技术|Docker三剑客之docker-compose
- Docker(四):Docker 三剑客之 Docker Compose
- 学习使用Docker、Docker-Compose和Rancher搭建部署Pipeline(一)
- Docker-Compose
- ubuntu16.04安装最新版docker、docker-compose、docker-machine
- 安装docker-compose
- Ubuntu 16.04安装Docker-Compose
- docker-compose安装
- Docker-compose 到 Kubernetes 的迁移工具!
- Centos7 安装docker-compose
- docker-compose.yml 语法说明
- 利用docker-compose实现elk+redice的但宿主机环境搭建
- docker compose 应用案例 web负载均衡
- docker-compose安装TensorFlow
- docker新版的实践(一:docker-compose)