我不确定如何命名 Dockerfile。GitHub 上的许多使用Dockerfile
没有文件扩展名。我给他们一个名字和扩展名吗?如果是这样呢?或者我只是打电话给他们Dockerfile
?
11 回答
[请阅读完整答案]如果您想使用 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
dev.Dockerfile
,test.Dockerfile
等build.Dockerfile
。
在我使用的 VS Code 上<purpose>.Dockerfile
,它被正确识别。
我知道这是一个老问题,有很多答案,但我惊讶地发现没有人建议官方文档中使用的命名约定:
$ 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 可以位于构建上下文的根目录中,也可以位于子目录中,以使您的根目录更加整洁。
我认为每个容器都应该有一个目录,其中包含 Dockerfile(无扩展名)。例如:
/db/Dockerfile
/web/Dockerfile
/api/Dockerfile
构建时只需使用目录名称,Docker 就会找到 Dockerfile。例如:
docker build -f ./db .
我在同一个目录中创建了两个 Dockerfile,
# vi one.Dockerfile
# vi two.Dockerfile
构建两个 Dockerfile 使用,
# docker build . -f one.Dockerfile
# docker build . -f two.Dockerfile
注意:您应该在当前工作目录中..
这似乎是真的,但就我个人而言,这似乎是糟糕的设计。当然,有一个默认名称(带扩展名),但允许其他名称,并且有一种方法可以为命令指定 docker 文件的名称。
拥有一个扩展也很好,因为它允许将应用程序与该扩展类型相关联。当我在 MacOSX 中单击 Dockerfile 时,它会将其视为 Unix 可执行文件并尝试运行它。
如果 Docker 文件有扩展名,我可以告诉操作系统使用特定应用程序启动它们,例如我的文本编辑器应用程序。我不确定,但当前行为也可能与文件权限有关。
我给他们一个名字和扩展名吗?如果是这样呢?
你可以随意命名你的 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 。
如果你想使用 hub.docker.com 上的自动生成器,它必须是 Dockerfile
. 所以那里:)
Dockerfile
如果您只有一个 docker 文件(每个目录),那就太好了。如果您在同一目录中需要多个 docker 文件,则可以使用任何您想要的标准 - 如果您有充分的理由。在最近的一个项目中,有 AWS docker 文件和本地开发环境文件,因为环境差异很大:
Dockerfile
Dockerfile.aws
Dockerfile(自定义名称和文件夹):
docker/app.Dockerfile
docker/nginx.Dockerfile
建造:
docker build -f ./docker/app.Dockerfile .
docker build -f ./docker/nginx.Dockerfile .
有 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”。