Dockerfile 是否总是必须放在构建上下文根目录中?

Does Dockerfile always have to be placed in the build context root?

假设我有一个 Django 项目,想创建几个 Dockerfile,它们将使用不同的设置集和系统包(不要与 Python 库混淆)。 对于运行的应用,我必须将完整的项目代码库复制到图像中。

现在我看到了 Setting up a docker / fig Mesos environment 这启发了我将每个单独的 Dockerfile 放入项目根目录中它自己的目录中。

docker build env1/ 可以预见地创建一个 env1 的 tarball 并使用它来构建图像。

有什么方法可以重新定义 Dockerfile 名称或构建上下文根?

Docker 1.5 向 "Specify the Dockerfile to use in build" 引入了一个选项:

Specify the Dockerfile to use in build

Contributed by: Doug Davis – Link to PR

This is possibly one of the most requested feature in the past few months: the ability to specify the file to use in a docker build rather than relying on the default Dockerfile. docker build -f allows you to define multiple Dockerfiles in a single project and specify which one to use at build time. This can be helpful if you require separate Dockerfiles for testing and production environments.

有了这个功能,您就不需要为多个 Dockerfile 建立单独的文件夹,因此不再需要为每个 Dockerfile 建立不同的文件夹。只需在您的根文件夹中放置多个 Dockerfile,然后使用 -f 选项构建每个 Dockerfile。