Docker组合:单个主机上有多个独立的环境,可以覆盖卷和端口

我们需要使用一个单独的撰写文件 ,在单个主机上创build多个独立的应用程序。

我意识到,通过使用-p选项指定项目名称,我们可以在一台主机上使用docker撰写多个独立的envs。

但是,是否有可能重写ports:volumes:在不同的环境的撰写文件,而不是有2个独立的docker组成文件?

例如,我想覆盖下面的属性,最好通过命令行参数。

对于开发环境

 ports: 8081:8080 volumes: /etc/myapp/dev/properties/:/etc/myapp/properties 

对于QA环境

 ports: 8082:8080 volumes: /etc/myapp/qa/properties/:/etc/myapp/properties 

您可以使用template.yml并传递想要生成docker-compose.yml的variables

首先,用以下内容创build一个template.yml

 version: "2" ... ports: "$HOST_PORT":8080 volumes: "$HOST_VOLUME":/etc/myapp/properties 

现在,你可以用环境创build一个你想要的variables的脚本。 对于开发环境,它看起来像这样:

 #!/bin/bash # Variables to use in template.yml export HOST_PORT="8081" export HOST_VOLUME="/etc/myapp/dev/properties/" # build docker-compose.yml from the template source env.sh; rm -rf docker-compose.yml; envsubst < "template.yml" > "docker-compose.yml"; 

这将生成具有具体值docker-compose.yml

以下是一个用法示例: https : //github.com/bsferreira/mysql-fabric