我不确定如何命名Dockerfiles。许多GitHub用户使用Dockerfile,但没有文件扩展名。我给他们一个名字和扩展;如果有,那又怎样?或者我就叫它Dockerfile?
[请阅读完整答案]如果您想使用hub.docker.com上的autobuilder,请不要更改dockerfile的名称。不要为docker文件使用扩展名,让它为空。 文件名应该是:(没有扩展名)
Dockerfile
然而,现在你可以这样命名dockerfile,
test1.Dockerfile
$ docker build -f dockerfiles/test1.Dockerfile -t test1_app .
or
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 .
如果你只有一个docker文件(每个目录),Dockerfile是很好的。你可以使用任何你想要的标准,如果你需要多个docker文件在同一个目录- 如果你有充分的理由。在最近的一个项目中,有AWS docker文件和本地开发环境文件,因为环境差异很大:
Dockerfile Dockerfile.aws
dev.Dockerfile、测试。Dockerfile,构建。Dockerfile等等。
在VS Code中,我使用<purpose>。Dockerfile,它被正确识别。
我给他们一个名字和扩展;如果有,那又怎样?
你可以随意命名Dockerfiles。默认的文件名是Dockerfile(没有扩展名),使用默认可以使使用容器时的各种任务更容易。
根据您的具体要求,您可能希望更改文件名。例如,如果您正在为多个体系结构进行构建,您可能希望添加一个扩展,将该体系结构指示为树脂。io团队已经为HAProxy容器做了他们的多容器ARM示例:
Dockerfile.aarch64
Dockerfile.amd64
Dockerfile.armhf
Dockerfile.armv7hf
Dockerfile.i386
Dockerfile.i386-nlp
Dockerfile.rpi
在提供的示例中,每个Dockerfile都是从不同的、特定于体系结构的上游映像构建的。在使用命令行构建容器时,可以使用——file, -f选项指定用于构建的特定Dockerfile。
我在同一个目录下创建了两个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的调试版本,一次使用生产版本。
总之,如果在构建上下文的根目录中有一个名为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”。
推荐文章
- 如何在docker映像的新容器中运行bash ?
- docker -撰写持久数据MySQL
- 从主机连接到docker容器中的mysql
- 对于不可变集合上的非突变“add”方法,最好的名称是什么?
- 当我使用Alpine作为基本图像时,如何添加用户?
- Docker -绑定0.0.0.0:4000失败:端口已经分配
- 将Python诗歌与Docker集成
- 如何在系统启动时运行docker-compose up -d ?
- 如何确定一个进程是否运行在lxc/Docker内部?
- 在docker容器上挂载多个卷?
- Kubernetes如何使部署更新映像
- Docker-compose up vs Docker-compose up -build vs Docker-compose build -no-cache
- 在Docker Alpine容器中启动一个shell
- 允许docker容器连接到本地/主机postgres数据库
- 在Docker Desktop中定位数据卷(Windows)