我不确定如何命名Dockerfiles。GitHub上的许多人使用Dockerfile而没有文件扩展名。我给他们一个名字和扩展;如果有,那又怎样?还是直接称它们为Dockerfile?
Dockerfile
如果你想使用hub.docker.com上的autobuilder,它必须是 Dockerfile。所以就这样了:)
[请阅读完整的答案]如果你想使用hub.docker.com上的autobuilder,请不要更改dockerfile的名称。不要为docker文件使用扩展名,让它为空。 文件名应该是(没有扩展名)
然而,现在你可以这样命名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
这似乎是真的,但就我个人而言,这似乎是一个糟糕的设计。当然,有一个默认名称(带扩展名),但允许使用其他名称,并有一种方法为命令指定docker文件的名称。
拥有扩展也很好,因为它允许将应用程序与该扩展类型关联。当我在MacOSX中点击Dockerfile时,它会将其视为Unix可执行文件并尝试运行它。
如果Docker文件有一个扩展名,我可以告诉操作系统用一个特定的应用程序启动它们,例如我的文本编辑器应用程序。我不确定,但当前的行为也可能与文件权限有关。
我认为每个容器都应该有一个Dockerfile(没有扩展名)的目录。例如:
/db/Dockerfile /web/Dockerfile /api/Dockerfile
当你只使用目录名构建时,Docker会找到Dockerfile。例句:
docker build -f ./db .
Dockerfile.aws
dev.Dockerfile, test.Dockerfile, build.Dockerfile等。
dev.Dockerfile
test.Dockerfile
build.Dockerfile
在VS Code上,我使用<purpose>.Dockerfile,它得到了正确的识别。
<purpose>.Dockerfile
我给他们一个名字和扩展;如果有,那又怎样?
你可以随意命名Dockerfiles。默认文件名是Dockerfile(没有扩展名),使用默认文件名可以使使用容器时的各种任务更容易。
根据您的具体要求,您可能希望更改文件名。例如,如果你正在为多个体系结构构建,你可能希望添加一个扩展来指示体系结构,就像resin.io团队为HAProxy容器多容器ARM实例所做的那样:
Dockerfile.aarch64 Dockerfile.amd64 Dockerfile.armhf Dockerfile.armv7hf Dockerfile.i386 Dockerfile.i386-nlp Dockerfile.rpi
在提供的示例中,每个Dockerfile都是从不同的、特定于体系结构的上游映像构建的。用于构建的特定Dockerfile可以在使用命令行构建容器时使用--file, -f选项指定。
--file, -f
我在同一个目录下创建了两个dockerfile,
# vi one.Dockerfile # vi two.Dockerfile
来构建dockerfile,
# docker build . -f one.Dockerfile # docker build . -f two.Dockerfile
注意:你应该在当前的工作目录。
Dockerfile(自定义名称和文件夹):
docker/app.Dockerfile docker/nginx.Dockerfile
构建:
docker build -f ./docker/app.Dockerfile . docker build -f ./docker/nginx.Dockerfile .
我知道这是一个老问题,有很多答案,但我惊讶地发现没有人建议在官方文档中使用的命名约定:
$ docker build -f dockerfiles/Dockerfile.debug -t myapp_debug . $ docker build -f dockerfiles/Dockerfile.prod -t myapp_prod . 上面的命令将构建当前构建上下文(由.指定)两次,一次使用Dockerfile的调试版本,一次使用生产版本。
$ docker build -f dockerfiles/Dockerfile.debug -t myapp_debug . $ docker build -f dockerfiles/Dockerfile.prod -t myapp_prod .
上面的命令将构建当前构建上下文(由.指定)两次,一次使用Dockerfile的调试版本,一次使用生产版本。
.
总之,如果在构建上下文的根目录中有一个名为Dockerfile的文件,它将被自动拾取。如果同一个构建上下文需要多个Dockerfile,建议的命名约定是:
Dockerfile.<purpose>
这些dockerfile可以位于构建上下文的根目录中,也可以位于子目录中,以使根目录更加整洁。
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”。