一、标准例子
version: "3"services:redis:image: redis:alpineports:- "6379"networks:- frontenddeploy:replicas: 2update_config:parallelism: 2delay: 10srestart_policy:condition: on-failuredb:image: postgres:9.4volumes:- db-data:/var/lib/postgresql/datanetworks:- backenddeploy:placement:constraints: [node.role == manager]vote:image: dockersamples/examplevotingapp_vote:beforeports:- 5000:80networks:- frontenddepends_on:- redisdeploy:replicas: 2update_config:parallelism: 2restart_policy:condition: on-failureresult:image: dockersamples/examplevotingapp_result:beforeports:- 5001:80networks:- backenddepends_on:- dbdeploy:replicas: 1update_config:parallelism: 2delay: 10srestart_policy:condition: on-failureworker:image: dockersamples/examplevotingapp_workernetworks:- frontend- backenddeploy:mode: replicatedreplicas: 1labels: [APP=VOTING]restart_policy:condition: on-failuredelay: 10smax_attempts: 3window: 120splacement:constraints: [node.role == manager]visualizer:image: dockersamples/visualizer:stableports:- "8080:8080"stop_grace_period: 1m30svolumes:- "/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: developmentSHOW: 'true'## orenvironment:- 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
建立一个网络
