docker-compose.yml紧凑型通用配置

docker-compose.yml紧凑型通用配置,docker,docker-compose,Docker,Docker Compose,具有下面的docker compose.yml文件,其中包含具有相同配置的n个容器(image,卷等),但命令属性除外。有没有办法不重复地写?然后,如果我必须改变一些配置,我可以在一个地方做,而不是改变所有的事件 一个选项是使用我在图像中使用的变量,但这并不能解决我想向所有容器添加另一个卷的问题 注:如果需要,不要介意更改为第3版 version: '2' services: container1: image: ${CONTAINER_IMAGE} user: my_use

具有下面的
docker compose.yml
文件,其中包含具有相同配置的n个容器(
image
等),但
命令
属性除外。有没有办法不重复地写?然后,如果我必须改变一些配置,我可以在一个地方做,而不是改变所有的事件

一个选项是使用我在
图像中使用的变量,但这并不能解决我想向所有容器添加另一个
卷的问题

注:如果需要,不要介意更改为第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)轻松地对其进行扩展


您可以使用环境变量。或者你真正需要的是一个模板引擎。有许多模板引擎可用。我过去用过的一个是
confd
。您可以在下面的链接上获得相同的快速入门指南

这将允许您使用
toml
config文件循环并拥有不同的卷映射和不同的容器计数

您甚至可以使用基于BASH的循环和脚本来生成compose文件。但是维护您的文件会变得越来越困难

PS:您可能感兴趣的一些链接:

 deploy:
   mode: replicated
   replicas: 3