220

我不确定如何命名 Dockerfile。GitHub 上的许多使用Dockerfile没有文件扩展名。我给他们一个名字和扩展名吗?如果是这样呢?或者我只是打电话给他们Dockerfile

4

11 回答 11

222

[请阅读完整答案]如果您想使用 hub.docker.com 上的自动生成器,请不要更改 dockerfile 的名称。不要为 docker 文件使用扩展名,将其保留为空。文件名应该只是:(根本没有扩展名)

Dockerfile

但是,现在您可以将 dockerfile 命名为,

test1.Dockerfile
$ docker build -f dockerfiles/test1.Dockerfile  -t test1_app .

或者

Dockerfile.test1
$ docker build -f dockerfiles/Dockerfile.test1  -t test1_app .

这也将起作用。

如果您处理位于同一上下文中的多个文件,则可以使用 STDIN:

test1.Dockerfile
$ docker build -t test1_app - < test1.Dockerfile
于 2014-09-28T10:33:35.260 回答
128

dev.Dockerfile,test.Dockerfilebuild.Dockerfile

在我使用的 VS Code 上<purpose>.Dockerfile,它被正确识别。

于 2018-02-20T06:36:42.960 回答
47

我知道这是一个老问题,有很多答案,但我惊讶地发现没有人建议官方文档中使用的命名约定:

$ docker build -f dockerfiles/Dockerfile.debug -t myapp_debug .
$ docker build -f dockerfiles/Dockerfile.prod  -t myapp_prod .

上述命令将构建当前构建上下文(由 指定.)两次,一次使用 a 的调试版本,Dockerfile一次使用生产版本。

总之,如果您Dockerfile在构建上下文的根目录中调用了一个文件,它将被自动拾取。如果您需要多个Dockerfile相同的构建上下文,建议的命名约定是:

Dockerfile.<purpose>

这些 dockerfile 可以位于构建上下文的根目录中,也可以位于子目录中,以使您的根目录更加整洁。

于 2020-09-21T15:50:49.247 回答
36

我认为每个容器都应该有一个目录,其中包含 Dockerfile(无扩展名)。例如:

  /db/Dockerfile
  /web/Dockerfile
  /api/Dockerfile

构建时只需使用目录名称,Docker 就会找到 Dockerfile。例如:

docker build -f ./db .
于 2017-03-15T13:07:51.443 回答
26

我在同一个目录中创建了两个 Dockerfile,

# vi one.Dockerfile
# vi two.Dockerfile

构建两个 Dockerfile 使用,

# docker build . -f one.Dockerfile
# docker build . -f two.Dockerfile

注意:您应该在当前工作目录中..

于 2019-01-02T10:21:57.927 回答
21

这似乎是真的,但就我个人而言,这似乎是糟糕的设计。当然,有一个默认名称(带扩展名),但允许其他名称,并且有一种方法可以为命令指定 docker 文件的名称。

拥有一个扩展也很好,因为它允许将应用程序与该扩展类型相关联。当我在 MacOSX 中单击 Dockerfile 时,它​​会将其视为 Unix 可执行文件并尝试运行它。

如果 Docker 文件有扩展名,我可以告诉操作系统使用特定应用程序启动它们,例如我的文本编辑器应用程序。我不确定,但当前行为也可能与文件权限有关。

于 2016-10-10T13:50:42.720 回答
20

我给他们一个名字和扩展名吗?如果是这样呢?

你可以随意命名你的 Dockerfiles。默认文件名是Dockerfile(不带扩展名),使用默认文件名可以使使用容器时的各种任务更容易。

根据您的具体要求,您可能希望更改文件名。例如,如果您正在为多个架构构建,您可能希望添加一个扩展来指示架构,就像resin.io团队为 HAProxy 容器所做的那样,他们的多容器 ARM 示例

Dockerfile.aarch64
Dockerfile.amd64
Dockerfile.armhf
Dockerfile.armv7hf
Dockerfile.i386
Dockerfile.i386-nlp
Dockerfile.rpi

在提供的示例中,每个 Dockerfile 都从不同的、特定于架构的上游镜像构建。在使用命令行构建容器时,可以使用--file, -f选项指定用于构建的特定 Dockerfile 。

于 2018-07-06T07:46:21.990 回答
19

如果你想使用 hub.docker.com 上的自动生成器,它必须是 Dockerfile. 所以那里:)

于 2014-09-27T18:05:10.163 回答
4

Dockerfile如果您只有一个 docker 文件(每个目录),那就太好了。如果您在同一目录中需要多个 docker 文件,则可以使用任何您想要的标准 - 如果您有充分的理由。在最近的一个项目中,有 AWS docker 文件和本地开发环境文件,因为环境差异很大:

Dockerfile Dockerfile.aws

于 2017-11-20T15:33:53.437 回答
4

Dockerfile(自定义名称和文件夹):

   docker/app.Dockerfile
   docker/nginx.Dockerfile

建造:

   docker build  -f ./docker/app.Dockerfile .
   docker build  -f ./docker/nginx.Dockerfile .
于 2020-05-28T22:49:12.530 回答
3

有 2 种广泛的 Dockerfile 命名约定:

1. 使用默认的 Dockerfile:

坚持基础,这种方法适合简单、独立和明确定义的项目。

$ docker build -f ./Dockerfile.Dockerfile .

2. 使用自定义 Dockerfile:

保持定制,这种方法使开发人员熟悉应用程序上下文,促进文件操作并提高调试能力,尤其是在多个 dockerfile 的情况下。

$ docker build -t <containername> . -f <mycustomdockerfile>.Dockerfile

健康提醒:

这些约定同样适用于常见的 docker 镜像构建命令,例如“docker image build”和“docker-compose build”。

于 2021-04-26T14:48:29.513 回答