我正在寻找一个可扩展的解决方案,以解决为容器化应用程序提供多种可能环境的问题。假设我正在创建一个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
时设置DEPLOY
和docker-compose up
环境变量,这很好,但我想知道一种方便的方法来传递这些环境变量到docker-compose
。对于大量的上下文切换,存在潜在的(至少在开发期间)。每次运行时,是否有一种将不同的CLIENT
和DEPLOY
env vars传递给docker-compose up
的整洁方式?
答案 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)