如何命名Dockerfiles

时间:2014-09-27 17:56:06

标签: docker dockerfile naming-conventions

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

11 个答案:

答案 0 :(得分:86)

如果要在hub.docker.com上使用autobuilder,请不要更改dockerfile的名称。不要使用docker文件的扩展名,将其保留为null。 文件名应该是:(根本没有扩展名)

Dockerfile

但是,你也可以这样做......

dev.Dockerfileuat.Dockerfileprod.Dockerfile

在VS Code上,您可以使用<purpose>.Dockerfile,它可以正常工作。

答案 1 :(得分:35)

dev.Dockerfiletest.Dockerfilebuild.Dockerfile

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

答案 2 :(得分:23)

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

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

当您构建时只使用目录名称,Docker将找到Dockerfile。 e.g:

docker build -f ./db .

答案 3 :(得分:15)

如果您想在hub.docker.com上使用autobuilder,则必须 Dockerfile。所以:)

答案 4 :(得分:14)

看来这是真的,但就个人而言,在我看来,设计很差。当然,有一个默认名称(带扩展名)但允许其他名称,并有办法为命令指定docker文件的名称。

拥有扩展名也很不错,因为它允许用户将应用程序与该扩展类型相关联。当我点击MacOSX中的Dockerfile时,它将其视为Unix可执行文件并尝试运行它。

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

答案 5 :(得分:9)

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

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

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

总而言之,如果在构建上下文的根目录中有一个名为Dockerfile的文件,它将被自动提取。如果相同的构建上下文需要多个Dockerfile,则建议的命名约定为:

Dockerfile.<purpose>

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

答案 6 :(得分:8)

  

我给他们一个名字和扩展名吗?如果可以的话?

您可以根据自己的喜好命名Dockerfile。默认文件名是Dockerfile(不带扩展名),使用默认文件名可以使处理容器时的各种任务更加容易。

根据您的特定要求,您可能希望更改文件名。例如,如果您要针对多种体系结构进行构建,则可能希望添加一个扩展名,以指示resin.io团队为multi-container ARM example的HAProxy容器所做的工作:

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

在提供的示例中,每个Dockerfile均从不同的,特定于体系结构的上游映像构建。使用命令行构建容器时,可以使用--file, -f option指定用于构建的特定Dockerfile。

答案 7 :(得分:3)

如果您只有一个docker文件(每个目录),

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

Dockerfile Dockerfile.aws

答案 8 :(得分:3)

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

# vi one.Dockerfile
# vi two.Dockerfile

构建两个使用的Dockerfile,

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

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

答案 9 :(得分:2)

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

   docker/app.Dockerfile
   docker/nginx.Dockerfile

内部版本:

   docker build  -f ./docker/app.Dockerfile .
   docker build  -f ./docker/nginx.Dockerfile .

答案 10 :(得分:1)

Dockerfile 有两种主要的命名约定。

1. 使用默认的 Dockerfile:

为简单起见,这种方法适合独立的、易于理解的项目[单个、定义明确、经过测试且可工作的 dockerfile]。

$ docker build -f ./Dockerfile.Dockerfile .

2. 使用自定义 dockerfile:

保持定制,这种方法有助于在测试和调试 [多个 dockerfiles] 中带来熟悉上下文、易于搜索、易于编辑、潜在的灵活性和实验范围。

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

提醒:

这些约定也适用于所有其他常见的 docker 镜像构建命令,包括流行的“docker-compose build”。