如何命名Dockerfiles

Llo*_*ice 102 naming-conventions docker dockerfile

我不确定如何命名Dockerfiles.很多GitHub在Dockerfile没有文件扩展名的情况下使用.我给他们一个名字和名字吗?如果是这样的话?或者我只是打电话给他们Dockerfile

tk_*_*tk_ 119

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

Dockerfile
Run Code Online (Sandbox Code Playgroud)

  • 当你在同一个目录中有多个Dockerfiles时呢? (73认同)
  • @Thomas 有时您需要将多个 Dockerfile 放在同一目录中,以便在不同的容器之间共享公共文件,因为 docker 上下文不允许访问“../some-common-stuff” (14认同)
  • “D”必须大写还是无关紧要? (6认同)
  • @VisgeanSkeloru在同一目录中没有多个Dockerfile。包含目录成为docker build命令的[context](https://docs.docker.com/engine/reference/builder/#usage),这意味着如果另一个映像的dockerfile被删除,则将不必要地重建每个映像。改变了。 (2认同)

Sah*_*uja 40

在vscode上,我使用dev.Dockerfile它仍然可以正确识别它.

所以我在同一个文件夹中命名多个Dockerfiles的策略是:

test.Dockerfile

  • 构建镜像: docker build 。-f dev.Dockerfile (10认同)
  • 在 IntelliJ Idea Community 2020.2 上也能正确识别! (3认同)

Eri*_*k B 32

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

$ docker build -f dockerfiles/Dockerfile.debug -t myapp_debug .
$ docker build -f dockerfiles/Dockerfile.prod  -t myapp_prod .
Run Code Online (Sandbox Code Playgroud)

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

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

Dockerfile.<purpose>
Run Code Online (Sandbox Code Playgroud)

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

  • 问题是“. Purpose”现在是文件的扩展名,这可能会使系统、文本编辑器或 IDE 感到困惑。`&lt; Purpose&gt; .Dockerfile` 的优点是始终以 `.Dockerfile` 作为扩展名 (8认同)
  • 这也是有道理的,因为像这样,当按字母顺序排序并与目录中的其他文件放在一起时,所有 Dockerfile 都会分组在一起。 (4认同)
  • 这种推理可以应用于所有文件,但按照惯例,我们有扩展名,即文件类型,作为文件名的后缀。 (4认同)
  • 阅读您链接的文档,它确实包含对两种命名格式的引用,例如使用“.Dockerfile”作为扩展名。来自官方文档:`例如,运行 docker build -f myapp.Dockerfile 。首先会查找忽略文件...`。从这里:https://docs.docker.com/engine/reference/commandline/build/#use-a-dockerignore-file (2认同)

gar*_*ryp 25

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

  /db/Dockerfile
  /web/Dockerfile
  /api/Dockerfile
Run Code Online (Sandbox Code Playgroud)

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

docker build -f ./db .
Run Code Online (Sandbox Code Playgroud)

  • 很多情况都不够好.Docker无法查看文件.例如目标,构建等. (4认同)

小智 24

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

# vi one.Dockerfile
# vi two.Dockerfile
Run Code Online (Sandbox Code Playgroud)

构建两个 Dockerfiles 使用,

# docker build . -f one.Dockerfile
# docker build . -f two.Dockerfile
Run Code Online (Sandbox Code Playgroud)

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


Dir*_*tel 15

如果你想在hub.docker.com上使用autobuilder,它必须是 Dockerfile.所以那里:)

  • 我相信这个问题的背景更广泛。也许您可以为不使用 _autobuilder_ 的个人添加其他信息,以使此答案更完整。 (4认同)

Ash*_*ken 15

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

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

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

  • 在这种情况下,我更喜欢使用 &lt;name&gt;.Dockerfile。也可以与 Jetbrains IDE 配合良好。 (2认同)

Jos*_*das 8

我给他们一个名字和名字吗?如果是这样的话?

您可以根据需要为Dockerfiles命名.默认文件名是Dockerfile(没有扩展名),使用默认文件名可以在处理容器时使各种任务更容易.

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

Dockerfile.aarch64
Dockerfile.amd64
Dockerfile.armhf
Dockerfile.armv7hf
Dockerfile.i386
Dockerfile.i386-nlp
Dockerfile.rpi
Run Code Online (Sandbox Code Playgroud)

在提供的示例中,每个Dockerfile都是根据不同的特定于体系结构的上游映像构建的.使用命令行构建容器时,可以使用--file, -f选项指定用于构建的特定Dockerfile .

  • 我喜欢使用扩展来表示架构(或其他)。与其他一些答案不同,所有 Dockerfile 都非常容易在一个大而杂乱的目录中找到;他们自然地排序在一起。 (2认同)

kta*_*lyn 5

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

Dockerfile
Dockerfile.aws
Run Code Online (Sandbox Code Playgroud)