2017-08-12 71 views
1

具有docker-compose.yml文件下面,其中包含與相同的結構(imagevolumes等)除了command屬性n容器。有沒有寫過沒有重複?那麼如果我不得不改變一些配置,我可以在一個地方做,而不是改變所有的事件。搬運工-compose.yml緊湊通用配置

一個選項是使用我在image中使用的變量,但這不會解決問題,我想在所有容器中添加另一個volume

P.S - 不必在需要時更改爲版本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.. 

謝謝。

回答

2

可以使用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或與碼頭構成(V3)

deploy: 
    mode: replicated 
    replicas: 3 
0

您可以使用環境變量。否則你真正需要的是一個模板引擎。有很多模板引擎可用。我以前用過的一個是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/