一、标准例子

  1. version: "3"
  2. services:
  3. redis:
  4. image: redis:alpine
  5. ports:
  6. - "6379"
  7. networks:
  8. - frontend
  9. deploy:
  10. replicas: 2
  11. update_config:
  12. parallelism: 2
  13. delay: 10s
  14. restart_policy:
  15. condition: on-failure
  16. db:
  17. image: postgres:9.4
  18. volumes:
  19. - db-data:/var/lib/postgresql/data
  20. networks:
  21. - backend
  22. deploy:
  23. placement:
  24. constraints: [node.role == manager]
  25. vote:
  26. image: dockersamples/examplevotingapp_vote:before
  27. ports:
  28. - 5000:80
  29. networks:
  30. - frontend
  31. depends_on:
  32. - redis
  33. deploy:
  34. replicas: 2
  35. update_config:
  36. parallelism: 2
  37. restart_policy:
  38. condition: on-failure
  39. result:
  40. image: dockersamples/examplevotingapp_result:before
  41. ports:
  42. - 5001:80
  43. networks:
  44. - backend
  45. depends_on:
  46. - db
  47. deploy:
  48. replicas: 1
  49. update_config:
  50. parallelism: 2
  51. delay: 10s
  52. restart_policy:
  53. condition: on-failure
  54. worker:
  55. image: dockersamples/examplevotingapp_worker
  56. networks:
  57. - frontend
  58. - backend
  59. deploy:
  60. mode: replicated
  61. replicas: 1
  62. labels: [APP=VOTING]
  63. restart_policy:
  64. condition: on-failure
  65. delay: 10s
  66. max_attempts: 3
  67. window: 120s
  68. placement:
  69. constraints: [node.role == manager]
  70. visualizer:
  71. image: dockersamples/visualizer:stable
  72. ports:
  73. - "8080:8080"
  74. stop_grace_period: 1m30s
  75. volumes:
  76. - "/var/run/docker.sock:/var/run/docker.sock"
  77. deploy:
  78. placement:
  79. constraints: [node.role == manager]
  80. networks:
  81. frontend:
  82. backend:
  83. volumes:
  84. db-data:

二、文件详解

services

services下面的标签(redisdb)是用户自己自定义,它就是服务名称。

image

则是指定服务的镜像名称或镜像 ID,格式(imageID:Tag

ports

端口映射,格式(HOST:CONTAINER),如果只是指定容器的端口,宿主机会随机映射端口。

networks

加入指定网络,在同一个网络中的容器可以相互访问

volumes

挂载一个目录或者一个已存在的数据卷容器,格式(HOST:CONTAINER

links

解决的是容器连接问题,与Docker client的—link一样效果,会连接到容器

  1. links:
  2. - db
  3. - dba:database

environment

这个标签的作用是设置镜像变量,它可以保存变量到镜像里面,也就是说启动的容器也会包含这些变量设置。

  1. environment:
  2. RACK_ENV: development
  3. SHOW: 'true'
  4. ## or
  5. environment:
  6. - RACK_ENV=development
  7. - SHOW=true

depends_on

容器的依赖,解决了容器的依赖、启动先后的问题。

command

使用 command 可以覆盖容器启动后默认执行的命令。

  1. command: bundle exec thin -p 3000

container_name

指定容器的名字,默认格式(<项目名称><服务名称><序号>

restart

默认值为 no ,即在任何情况下都不会重新启动容器;
当值为 always 时,容器总是重新启动;
当值为 on-failure 时,当出现 on-failure 报错容器退出时,容器重新启动。

networks

建立一个网络