docker - 如何将Dockerfile中的ENV命令集替换为其他文件,以供重用?

标签 docker environment-variables dockerfile

我有两个带有环境变量列表的Dockerfile(也许会有更多),两个文件都相同。比方说:

ENV VAR1="value1"
ENV VAR2="value2"
ENV VAR3="value3"
我可以以某种方式将此设置移动到一个文件,该文件可以在需要的所有Dockerfile中使用吗?
我想删除重复项,并在设置这些变量的地方放一个普通的地方。

最佳答案

您可以将它们拆分为自定义基本镜像。该图像看起来像

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概念),凭据(远离镜像,将它们撤回很容易) ,版本和网址。您可能可以不使用固定值(使用/app而不是$INSTALL_PATH),或者在应用程序代码中使用合理的默认值。

关于docker - 如何将Dockerfile中的ENV命令集替换为其他文件,以供重用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64481925/

相关文章:

docker - 在rbenv环境中为gem-mecab制作docker镜像时出错

docker - Docker撰写共享文件夹

linux - 缺少 Jenkins 环境变量

scripting - 如何检查是否在 ant 脚本中设置了 dos 环境属性

laravel - 如何在scss中获取环境变量

docker - 在Docker-Compose中控制启动顺序

docker - 在 Dockerfile 中使用 mount 命令时出错

docker - 无法使用 Artifactory 插件将 Docker 镜像推送到 Jenkins 管道中的 Artifactory

docker - 错误:IO::Pipe:无法执行:没有这样的文件或目录

php - 我应该在生产代码库上使用 Symfony Flex 吗?