docker-compose可扩展的方式来提供环境变量

时间:2018-02-15 14:13:01

标签: docker docker-compose

我正在寻找一个可扩展的解决方案,以解决为容器化应用程序提供多种可能环境的问题。假设我正在创建一个Web应用程序,我有通常的部署环境develop, testing, production,但我也为不同的客户端提供了多个应用程序实例client1, client2, client3等。

如果我必须创建单独的docker-compose文件,这很快就会变得一团糟:

docker-compose-client1-develop.yml
docker-compose-client1-testing.yml
docker-compose-client1-production.yml
docker-compose-client2-develop.yml
...

将特定于客户端的配置分解为.env文件并且dockers变量替换让我大部分都在那里,我现在可以拥有一个docker-compose.yml文件并且只是这样做:

services:
  webapp:
    image: 'myimage:latest'
    env_file:
     - ./clients/${CLIENT}.env  # client specific .env file
    environment:
     - DEPLOY  # develop, testing, production

所以现在我只需要在运行CLIENT时设置DEPLOYdocker-compose up环境变量,这很好,但我想知道一种方便的方法来传递这些环境变量到docker-compose。对于大量的上下文切换,存在潜在的(至少在开发期间)。每次运行时,是否有一种将不同的CLIENTDEPLOY env vars传递给docker-compose up的整洁方式?

2 个答案:

答案 0 :(得分:3)

您是否尝试过docker-compose file extending

例如,您可以拥有基础docker-compose.yml文件,这是生产文件和多个扩展文件,您只需要更改需要重载的文件:

<强>搬运工-compose.dev.yml

version: '2'
services:
  webapp:
    env_file: path_to_the_file_env

然后你只需使用两者:

docker-compose -f docker-compose.yml -f docker-compose.dev.yml up

为了提高产量,它就像以下一样简单:

docker-compose up

我个人在很多项目中都经常使用这种技术。

答案 1 :(得分:3)

您要实现的目标是设置环境变量 per-command

你在Linux上运行吗?看看env命令。只需在您的docker-compose命令行前面添加如下:

env CLIENT=client1 DEPLOY=production docker-compose ...

在Windows上,您可能需要执行更复杂的操作(例如this),但可能有更简单的方法。