2017-08-12 12 views
1

は同じ構成(imagevolumesなど)と、n個の容器が含まれている以下docker-compose.ymlファイルを有するcommand属性除きます。繰り返しなくてもそれを書くことができますか?いくつかの設定を変更する必要がある場合は、すべての変更を変更するのではなく、1か所で行うことができます。ドッカー-compose.ymlコンパクトな一般的な構成

1つのオプションは、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

あなたはあなたの第一の容器

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 

ための第二のファイルを使用しての設定を再利用するextendsキーワードを使用することができますが、それがある場合にのみ異なる構成を使用する必要がありますdocker service scale service=3またはdocker-compose(v3)

を使用してサービスとして展開して簡単にスケーリングすることができないため、絶対に必要です
0

環境変数を使用できます。それとも、本当に必要なのはテンプレートエンジンです。多くのテンプレートエンジンが利用可能です。私が過去に使ったものはconfdです。あなたはこのループにあなたをできるようにしてtoml設定ファイルを使用して、異なるボリュームのマッピングと異なるコンテナ数を持つことになります

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

リンク

の下で同じのクイックスタートガイドを得ることができます。

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/

関連する問題