在阅读了12 因素应用程序的配置点后,我决定用环境变量覆盖包含默认值的配置文件。
我有 3 个Dockerfile
,一个用于 API,一个用于前端,一个用于工作人员。我有一个docker-compose.yml
来运行这 3 个服务和一个数据库。
现在我想知道是否应该在Dockerfile
s 或中定义环境变量docker-compose.yml
?使用一个而不是另一个有什么区别?
在阅读了12 因素应用程序的配置点后,我决定用环境变量覆盖包含默认值的配置文件。
我有 3 个Dockerfile
,一个用于 API,一个用于前端,一个用于工作人员。我有一个docker-compose.yml
来运行这 3 个服务和一个数据库。
现在我想知道是否应该在Dockerfile
s 或中定义环境变量docker-compose.yml
?使用一个而不是另一个有什么区别?
看到这个:
您可以使用 'environment' 键在服务的容器中设置环境变量,就像使用 docker run -e VARIABLE=VALUE ...
此外,您可以在 dockerfile 中使用ENV来定义环境变量。
区别在于:
环境变量define inDockerfile
不仅会使用in docker build
,还会持久化到容器中。这意味着如果您没有设置-e
when docker run
,它仍然具有与定义相同的环境变量Dockerfile
。
而环境变量定义docker-compose.yaml
仅用于docker run
.
也许下一个例子可以让你更清楚地理解:
Dockerfile:
FROM alpine
ENV http_proxy http://123
码头工人-compose.yaml:
app:
environment:
- http_proxy=http://123
如果在 中定义环境变量Dockerfile
,则使用此映像的所有容器也将具有http_proxy
as http://123
。但实际情况可能是在你构建镜像的时候,你需要这个代理。但是,该容器可能由其他人运行,可能不需要此代理或仅具有另一个 http_proxy,因此他们必须删除http_proxy
in 入口点或更改为 in 中的另一个值docker-compose.yaml
。
如果在里面定义了环境变量docker-compose.yaml
,那么用户在做的时候可以选择自己的http_proxy docker-compose up
,http_proxy
如果用户没有配置就不会设置docker-compose.yaml
。