docker - 如何将 Dockerfiles 中的一组 ENV 命令替换为可以重用的其他文件?
问题描述
我有两个带有环境变量列表的 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 概念)、凭据(远离映像,很容易将它们取出) 、版本和 URL。您可能能够摆脱对这些使用固定值(使用/app
而不是$INSTALL_PATH
),或者在您的应用程序代码中使用合理的默认值。
推荐阅读
- java - 编写正则表达式模式以便于理解/维护?
- jquery - 对特定列进行排序不起作用 - jquery Datatables
- react-native - 打开另一个屏幕 React-navigation 3.. flatlist
- import - 导入 SQL Google Cloud SQL:HTTPError 403:权限不足
- python - 获取包含修饰函数的文件的路径
- keras - 定义具有附加权重的自定义 keras 层时如何使用 GRUCell?
- python - Tensorflow/Keras:模型的输出层期望的输入形状与它收到的不同
- sql - SQL的列级加密在哪里使用?
- css - svg中的响应式图像
- javascript - 如何在 SetTimeout 之后运行另一个函数?