一、标准例子
version: "3"
services:
redis:
image: redis:alpine
ports:
- "6379"
networks:
- frontend
deploy:
replicas: 2
update_config:
parallelism: 2
delay: 10s
restart_policy:
condition: on-failure
db:
image: postgres:9.4
volumes:
- db-data:/var/lib/postgresql/data
networks:
- backend
deploy:
placement:
constraints: [node.role == manager]
vote:
image: dockersamples/examplevotingapp_vote:before
ports:
- 5000:80
networks:
- frontend
depends_on:
- redis
deploy:
replicas: 2
update_config:
parallelism: 2
restart_policy:
condition: on-failure
result:
image: dockersamples/examplevotingapp_result:before
ports:
- 5001:80
networks:
- backend
depends_on:
- db
deploy:
replicas: 1
update_config:
parallelism: 2
delay: 10s
restart_policy:
condition: on-failure
worker:
image: dockersamples/examplevotingapp_worker
networks:
- frontend
- backend
deploy:
mode: replicated
replicas: 1
labels: [APP=VOTING]
restart_policy:
condition: on-failure
delay: 10s
max_attempts: 3
window: 120s
placement:
constraints: [node.role == manager]
visualizer:
image: dockersamples/visualizer:stable
ports:
- "8080:8080"
stop_grace_period: 1m30s
volumes:
- "/var/run/docker.sock:/var/run/docker.sock"
deploy:
placement:
constraints: [node.role == manager]
networks:
frontend:
backend:
volumes:
db-data:
二、文件详解
services
services下面的标签(redis,db)是用户自己自定义,它就是服务名称。
image
则是指定服务的镜像名称或镜像 ID,格式(imageID:Tag)
ports
端口映射,格式(HOST:CONTAINER),如果只是指定容器的端口,宿主机会随机映射端口。
networks
volumes
挂载一个目录或者一个已存在的数据卷容器,格式(HOST:CONTAINER)
links
解决的是容器连接问题,与Docker client的—link一样效果,会连接到容器
links:
- db
- dba:database
environment
这个标签的作用是设置镜像变量,它可以保存变量到镜像里面,也就是说启动的容器也会包含这些变量设置。
environment:
RACK_ENV: development
SHOW: 'true'
## or
environment:
- RACK_ENV=development
- SHOW=true
depends_on
command
使用 command 可以覆盖容器启动后默认执行的命令。
command: bundle exec thin -p 3000
container_name
指定容器的名字,默认格式(<项目名称><服务名称><序号>)
restart
默认值为 no ,即在任何情况下都不会重新启动容器;
当值为 always 时,容器总是重新启动;
当值为 on-failure 时,当出现 on-failure 报错容器退出时,容器重新启动。
networks
建立一个网络