簡體   English   中英

docker-compose.yml緊湊通用配置

[英]docker-compose.yml compact common configuration

下面有docker-compose.yml文件,其中包含n個具有相同配置的容器( imagevolumes等), command屬性除外 有沒有寫重復的地方嗎? 那么如果我必須更改某些配置,我可以在一個地方完成它,而不必更改所有出現的情況。

一種選擇是使用image使用的變量,但這並不能解決我要向所有容器添加另一個volume問題。

PS-不需要更改版本3。

version: '2'
services:
  container1:
    image: ${CONTAINER_IMAGE}
    user: my_user
    hostname: my_hostname
    command: unique running command for container1
    env_file:
      - 'docker.env'
    volumes:
      - ./builds/image:/image
      - ~/workspace/component1:/component1
      - ~/workspace/component2:/component2
    links:
      - db:db
      - elastic-docker:elastic-docker
      - graphite:graphite-docker
      - zookeeper:zookeeper
    depends_on:
      - rabbitmq

  container2:
    image: ${CONTAINER_IMAGE}
    user: my_user
    hostname: my_hostname
    command: unique running command for container2
    env_file:
      - 'docker.env'
    volumes:
      - ./builds/image:/image
      - ~/workspace/component1:/component1
      - ~/workspace/component2:/component2
    links:
      - db:db
      - elastic-docker:elastic-docker
      - graphite:graphite-docker
      - zookeeper:zookeeper
    depends_on:
      - rabbitmq

  container3:
    image: ${CONTAINER_IMAGE}
    user: my_user
    hostname: my_hostname
    command: unique running command for container3
    env_file:
      - 'docker.env'
    volumes:
      - ./builds/image:/image
      - ~/workspace/component1:/component1
      - ~/workspace/component2:/component2
    links:
      - db:db
      - elastic-docker:elastic-docker
      - graphite:graphite-docker
      - zookeeper:zookeeper
    depends_on:
      - rabbitmq

  #and so on..

謝謝。

您可以使用extends關鍵字重用第一個容器的配置

version: '2'
services:
  c1:
    image: alpine
    command: echo 1
  c2:
    extends: c1
    command: echo 2

或使用第二個文件作為模板

version: '2'
services:
  template:
    image: alpine

version: '2'
services:
  c1:
    extends:
      file: template.yml
      service: template
    command: echo 1

但只有在絕對需要時才應使用不同的配置,因為如果沒有這樣的配置,則無法將其部署為服務,並可以通過docker service scale service=3或docker-compose(v3)輕松擴展

 deploy:
   mode: replicated
   replicas: 3

您可以使用環境變量。 否則,您真正需要的是模板引擎。 有許多可用的模板引擎。 我過去使用過的一種是confd 您可以在下面的鏈接上獲得快速入門指南

https://github.com/kelseyhightower/confd/blob/master/docs/quick-start-guide.md

這將允許您使用toml配置文件循環並具有不同的卷映射和不同的容器計數。

您甚至可以使用基於BASH的循環和腳本來生成撰寫文件。 但是維護文件將變得越來越困難。

PS:您可能對以下鏈接感興趣:

https://theagileadmin.com/2015/11/12/templating-config-files-in-docker-containers/

http://steveadams.io/2016/08/18/Environment-Variable-Templates.html

http://tarunlalwani.com/post/simple-parameterized-config-files-docker/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM