【问题标题】:How can I replace a set of ENV commands in Dockerfiles with placing them to some other file, which can be reused?如何将 Dockerfile 中的一组 ENV 命令替换为可以重用的其他文件?
【发布时间】:2023-04-05 18:08:01
【问题描述】:
我有两个带有环境变量列表的 Dockerfile(可能会有更多),这两个文件都相同。比方说:
ENV VAR1="value1"
ENV VAR2="value2"
ENV VAR3="value3"
我能否以某种方式将此设置移动到一个文件中,该文件可以在所有需要的 Dockerfile 中使用?
我想删除重复项并有一个共同的地方来设置这些变量。
【问题讨论】:
标签:
docker
environment-variables
dockerfile
【解决方案1】:
您可以将它们拆分为自定义基础图像。该图像看起来像
FROM ubuntu:18.04 # or whatever else you're using
ENV VAR1="value1"
ENV VAR2="value2"
ENV VAR3="value3"
# and that's all
在大多数情况下,您必须手动构建它
docker build -t my/env-base -f Dockerfile.env .
然后你可以在下游的Dockerfiles中引用它
FROM my/env-base
# the rest of the Dockerfile commands as normal
像 Docker Compose 这样的工具不会真正意识到这种图像分层。没有好的方法可以列出需要构建为其他事物的依赖项的基础镜像,但不应该单独运行容器。如果您确实更改了这些值,则必须手动重新构建基础映像,然后重新构建应用程序映像。
您还应该考虑是否需要所有这些环境变量。在其他 SO 问题中,我看到用于文件系统路径的变量(可以在隔离的 Docker 映像中修复)、用户名(实际上不是 Docker 概念)、凭据(远离映像,很容易将它们取出) 、版本和 URL。您也许可以不使用这些固定值(使用 /app 而不是 $INSTALL_PATH),或者在您的应用程序代码中设置合理的默认值。