docker以可伸缩的方式提供环境变量

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

我正在寻找一种可扩展的解决方案,以解决容器化应用程序可能存在的众多环境问题。假设我正在创建一个web应用程序,我有通常的部署环境,
开发、测试、生产
,但我也有多个应用程序实例,用于不同的客户端,
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

例如,您可以使用base
docker 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