【发布时间】:2020-11-11 16:13:47
【问题描述】:
所以我现在被这个问题困扰了很长一段时间。
我知道我们应该这样编写代码,以便我们可以随时使项目开源,而不会影响机密方面。
所以,我似乎理解直接在 Dockerfile 或 docker-compose.yml 中定义环境变量是不可取的,我们应该将它们全部定义在一个单独的文件中,例如 .env强>。
现在,我知道我们可以在处理 docker-compose 时使用docker-compose -f docker-compose.yml --env-file=.env up。
我想知道以下两件事:
- 如何处理 Dockerfile 从构建到运行(环境变量文件部分,如
--env-file) - 我们是应该在其中构建已定义环境变量的映像,然后与其他人共享该映像,以便他们不必在运行映像时重新定义环境变量而烦恼,还是应该构建一个通用映像和然后让用户随意定义环境变量。什么是最佳做法?
有人也可以评论以下内容(使用 Dockerfile)
方法一:
example_Dockerfile:
FROM python:latest
# many other steps in between
RUN printf 'key=21345' > config
ENTRYPOINT ["./boot.sh"]
构建和运行的步骤:
docker build -f example_Dockerfile -t my_container .docker run --env-file=example.env my_container
我知道方法 1 是正确的,但我想知道是否可以做类似方法 2(以下)的事情。
方法二:
example_Dockerfile:
FROM python:latest
# many other steps in between
RUN printf 'key=${KEY}' > config
ENTRYPOINT ["./boot.sh"]
example.env:
# many other environment variables
KEY = 21345
如果您还可以提供命令步骤以这种方法构建和运行容器来执行此操作,那就太棒了。
这两种方法的主要区别在于,在方法 2 中,我在 .env 文件中定义了 KEY 变量,并希望以某种方式将其集成到Dockerfile(通过使用 ${KEY},就像我们在 docker-compose.yml 中所做的那样),而在 Dockerfile
如果有人能举例说明上述两点,我将不胜感激。
非常感谢。
【问题讨论】:
标签: docker docker-compose environment-variables dockerfile containers