docker以可伸缩的方式提供环境变量
我正在寻找一种可扩展的解决方案,以解决容器化应用程序可能存在的众多环境问题。假设我正在创建一个web应用程序,我有通常的部署环境,docker以可伸缩的方式提供环境变量,docker,docker-compose,Docker,Docker Compose,我正在寻找一种可扩展的解决方案,以解决容器化应用程序可能存在的众多环境问题。假设我正在创建一个web应用程序,我有通常的部署环境,开发、测试、生产,但我也有多个应用程序实例,用于不同的客户端,client1、client2、client3等 如果我必须创建单独的docker compose文件,这会很快变得一团糟: docker-compose-client1-develop.yml docker-compose-client1-testing.yml docker-compose-client
开发、测试、生产
,但我也有多个应用程序实例,用于不同的客户端,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
文件和docker变量替换让我在这方面取得了很大进展,现在我可以拥有一个docker compose.yml
文件,只需执行以下操作:
services:
webapp:
image: 'myimage:latest'
env_file:
- ./clients/${CLIENT}.env # client specific .env file
environment:
- DEPLOY # develop, testing, production
所以现在我只需要在运行docker compose up
时设置CLIENT
和DEPLOY
环境变量,这很好,但我想知道一种将这些环境变量传递到docker compose
的便捷方法。有可能(至少在开发过程中)进行相当数量的上下文切换。每次我运行时,是否有一种整洁的方法将不同的客户机
和部署
环境变量传递到docker compose
例如,您可以使用basedocker compose.yml
文件,该文件是生产一个和多个扩展文件,您只需更改需要重载的内容:
docker 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
我个人在我的许多项目中经常使用这种技术。您试图实现的是为每个命令设置环境变量
你在Linux上运行吗?看看命令。只需预先编写docker compose
命令行,如下所示:
env CLIENT=client1 DEPLOY=production docker-compose ...
在Windows上,您可能需要做一些更复杂的事情(如),但也可能有更简单的方法。这绝对是一种选择。我唯一的问题是,它最终会按照docker compose-f docker-compose.yml-f docker-compose.dev.yml-f docker-compose.client1.yml-up-d的行输入一些东西,这有点冗长。我希望得到类似于docker compose-e CLIENT=“client1”-e DEPLOY=“develope”的东西up-d
这只稍微短一点,但更明确一点。您仍然需要为每个客户端创建一个文件,并为每个部署环境创建一个文件。就我个人而言,我在Linux上运行,因此这对我来说非常有用。有些开发人员可能在Windows上工作,这让我感到尴尬。我希望有一个可移植的解决方案,但我怀疑这个methodEnvironment变量可能不存在,因为它本质上是特定于操作系统的。恐怕没有一个跨平台的解决方案(但您可以编写一个包装器)最终与此解决方案一起使用,围绕docker compose
编写了一个精简的python包装器,它可以为我们的windows用户设置环境变量,linux用户可以使用它,也可以只使用env