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

Docker Compose文件详解 V2

2017-08-05 11:39 351 查看
Compose file reference语法:web:
build: ./web
ports:
- "5000:5000"
volumes:
- .:/code
links:- redis
redis:
image:redisbuild:可使用相对目录或绝对目录
ports:可使用端口范围
links:可使用别名,例如: -redis:web-redisbuildbuild: ./dir
# build后可直接接Dockerfile所在目录,该目录必须存在Dockerfilebuild:
context: ./dir
dockerfile: Dockerfile-alternate
args:
buildno: 1
image: webapp:tag
# contest指定Dockerfile的目录。dockerfile指定Dockerfile文件名
# args:不清楚
# images:指定dockerfile构建出的镜像名,默认使用docker-compose.yml所在的文件夹名+service名contextbuild:
context: ./dir
#指定Dockerfile所在的目录dockerfilebuild:
context: .
dockerfile: Dockerfile-alternatebuild: .
dockerfile: Dockerfile-alternate
# 当Dockerfile文件名不是默认名称时,使用dockerfile参数指定Dockerfile的文件名argscap_add, cap_dropAdd or drop container capabilities. See man 7 capabilities for a full list.cap_add:
- ALLcap_drop:
- NET_ADMIN
- SYS_ADMINcommand覆盖Dockerfile中的commandcommand: bundle exec thin -p 3000
# 类似于dockerfile中的命令:
command: [bundle, exec, thin, -p, 3000]container_name指定容器的名称
container_name: my-web-container
depends_on表示服务之前的依赖关系,有两个效果:docker-compose up,启动web服务之前、启动redis、db。docker-compose up web,启动web容器时,检查依赖depends_on的配置内容,先启动db和redis'2'
services:
build: .
depends_on:
- db
- redis

redis:image: redis
db:

image: postgres
dns自定义DNS,可以是单个的,也可以是列表.dns: 8.8.8.8
dns:
- 8.8.8.8

- 9.9.9.9

dns_search

Custom DNS search domains. Can be a single value or a list.dns_search: example.com
dns_search:
- dc1.example.com

- dc2.example.com
tmpfs
在容器中挂载一个tmpfs。# tmpfs可以理解成虚拟机磁盘,是创建在内存上,不是在硬盘上。读取速度快,重启后数据消失
run
tmpfs:

- /run

- /tmp
entrypoint覆盖默认的entrypoint.
entrypoint: /code/entrypoint.sh
可以是个列表,类似dockerfile中的语法
entrypoint:

- php

- -d

- zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts-20100525/xdebug.so

- -d

- memory_limit=-1

- vendor/bin/phpunit
env_file指定变量的文件,默认为docker-compose文件夹下的 .env 文件.同一个变量,通过export设置,会覆盖env_file中的变量.
env_file: .env

env_file:

- ./common.env

- ./apps/web.env

envenvironment设置环境变量,支持数组和字典.environment:
RACK_ENV: development
'true'
SESSION_SECRET:

environment:
- RACK_ENV=development
- SHOW=true

- SESSION_SECRET
expose暴漏端口,并不会暴漏到宿主机上,而是提供给内部容器通信.
expose:- "3000"- "8000"
extends、external_links待补充extra_hosts添加主机映射. Use the same values as the docker client
--add-host
parameter.
extra_hosts:- "somehost:162.242.195.82"

- "otherhost:50.31.209.229"映射结果会体现在
/etc/hosts

:
162.242.195.82
somehost50.31.209.229 otherhost
image指定基础镜像. 可以是镜像名称、镜像ID。
version1中不允许build和image同时出现,version2中允许,image代表指定build之后的镜像名称。
image: redisimage: ubuntu:14.04image: tutum/influxdbimage: example-registry.com:4000/postgresqlimage: a4bc65fd
labels指定容器的标签.
labels:com.example.description: "Accounting webapp"com.example.department: "Finance"com.example.label-with-empty-value: ""labels:- "com.example.description=Accounting webapp"- "com.example.department=Finance"- "com.example.label-with-empty-value"
links连接其他容器,可以设置别名,设置link之后,hostname与IP的对应关系会写入到 /etc/hosts中. 和depend_on类似,设置link后,也间接的规定了容器的启动顺序.web:
links:
- db- redislogging设置容器的日志驱动.version 2 通过logging替换log_driver和log_optoptions:
syslog-address: "tcp://192.168.0.42:123"

net

Version 1 file format only. In version 2, use network_mode.为容器指定网络类型,version 1专用,version 2使用network_mode.
net: "bridge"net: "host"net: "none"net: "container:[service name or container name/id]"

network_mode

Version 2 file format only. In version 1, use net.为容器指定网络类型.
network_mode: "bridge"network_mode: "host"network_mode: "none"network_mode: "service:[service name]"network_mode: "container:[container name/id]"

networks

Version 2 file format only. In version 1, use net.
Networks to join, referencing entries under the top-level
networks
key
.services:
some-service:
networks:
- some-network
- other-networkaliases
待补充ipv4_address, ipv6_address
指定容器的IP地址等,用法待补充,未操作pid
通过设置,容器可通过ps查询宿主机的进程.
pid: "host"
ports暴漏容器的端口,可设置为8080:8080 或 :8080(宿主机端口随机).Note:建议使用引号
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"
stop_signal
待补充ulimits设置ulimit值,可替换掉docker或dockerfile默认的值.ulimits:
nproc: 65535
nofile:
soft: 20000
hard: 40000volumes, volume_driver挂载卷,如果不指定宿主机目录,会在volume默认目录创建挂载点。可单独挂载文件、可设置目录权限. 。
volumes:# Just specify a path and let the Engine create a volume- /var/lib/mysql# Specify an absolute path mapping- /opt/data:/var/lib/mysql# Path on the host, relative to the Compose file- ./cache:/tmp/cache# User-relative path- ~/configs:/etc/configs/:ro# Named volume

var/lib/mysql
# datavolume是通过docker volume create --name datavolume创建如果不使用宿主机存储,须臾奥指定
volume_driver
.例如rancher的convoy fs。
volume_driver: mydriver
volumes_from从其他服务或容器挂载所有的volume, 可设置制度访问 (
ro
)或读写 (
rw
). 如果不设置,默认为读写模式。volumes_from:
- service_name
- service_name:ro
- container:container_name
- container:container_name:rwNote: The
Container:...
formats are only supported in the version 2 file format. In version 1, you can use container names without marking them as such:
- service_name- service_name:ro- container_name- container_name:rw

cpu_shares, cpu_quota, cpuset, domainname, hostname, ipc,
mac_address, mem_limit, memswap_limit, privileged, read_only, restart,
shm_size, stdin_open, tty, user, working_dir

单独的值,类似于docker run的参数.cpu_shares: 73
cpu_quota: 50000
cpuset: 0,1user: postgresql
working_dir: /codedomainname: foo.com
hostname: foo
ipc: host
mac_address: 02:42:ac:11:65:43mem_limit: 1000000000
memswap_limit: 2000000000
privileged: truerestart: alwaysread_only: true
shm_size: 64M
stdin_open: true
tty: trueVolume configuration referencedriver设置volume的驱动,默认是local.
driver: foobar
driver_opts设置驱动的参数,不同的驱动所需要的参数不同.可选.driver_opts:
foo: "bar"
baz: 1external如果设置为true,指定volume在compose的外部,docker-compose up 时不去创建该volume。如果不存在报错.version: '2'services:
db:image: postgres
volumes:
- data:/var/lib/postgresql/datavolumes:
data:
external: trueYou can also specify the name of the volume separately from the name used to refer to it within the Compose file:volumes:
data:
external:
name: actual-name-of-volumeA more extended example, defining volumes and networks:version: '2'
services:
web:
build: .
ports:
- "5000:5000"
volumes:
- .:/code
networks:
- front-tier
- back-tier
redis:
image: redis
volumes:- redis-data:/var/lib/redis
networks:
- back-tier
volumes:
redis-data:
driver: local
networks:
front-tier:
driver: bridge
back-tier:
driver: bridge或version: '2'
services:
db:image: postgres
volumes:
- data:/var/lib/postgresql/data
volumes:
data: {}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: