如何在Dockerfile中设置映像名称?


299

您可以在构建自定义图像时设置图像名称,如下所示:

docker build -t dude/man:v2 . # Will be named dude/man:v2

有没有一种方法可以在Dockerfile中定义映像的名称,所以我不必在docker build命令中提及它?


1
对于任何好奇的人,请使用FROM ... AS名称不起作用
Rufus

Answers:


265

Dockerfile中不支持图像的标记。这需要在您的构建命令中完成。解决方法是,您可以使用docker-compose.yml进行构建,以标识目标映像名称,然后运行docker-compose build。一个示例docker-compose.yml看起来像

version: '2'

services:
  man:
    build: .
    image: dude/man:v2

就是说,有人反对使用compose进行构建,因为这不适用于swarm模式部署。因此,您将返回在问题中给出的命令:

docker build -t dude/man:v2 .

就个人而言,我倾向于在文件夹(build.sh)中使用一个小的Shell脚本进行构建,该脚本传递任何args,并在其中包含图像名称以保存输入。对于生产来说,构建是由在管道脚本中具有映像名称的ci / cd服务器处理的。


302

如何不使用yml文件构建具有自定义名称的图像:

docker build -t image_name .

如何使用自定义名称运行容器:

docker run -d --name container_name image_name

78
我不再评论,但问题是“如何在Dockerfile中设置映像名称?” 不是“如何设置Docker映像名称?” 答案就在问题本身中。
Novaterata

68
我已经回到这个问题上两次了,尽管在技术上是
不合时宜的

7
如果您一致地将放置Dockerfile在与您的图像名称相同的目录中,则可以将其docker build -t $(basename $PWD) .用作构建命令。然后,您可以使用“构建”中的CTRL-R搜索来查找和重复使用该命令,而无需进行编辑。您也可以根据需要将其设为别名。
布鲁诺·布鲁诺斯基

无论如何,谢谢你的回答。我花了几个小时才能通过互联网获得这个。我无法得到正确的答案,如果他也需要在容器中命名,那么为他的图像命名的人就不能没有这个。
Susaj S Nair

38

如果您必须引用特定的docker文件,则这是另一个版本:

version: "3"
services:
  nginx:
    container_name: nginx
    build:
      context: ../..
      dockerfile: ./docker/nginx/Dockerfile
    image: my_nginx:latest

那你就跑

docker-compose build

1
我喜欢这个答案,它显示了container_name和image name:tag之间的区别。如果只是对发生的事情有更多的解释:“ container_name”命名最终从映像中弹出的容器。“图像”命名并标记创建的图像,从中构建容器。正如其他人提到的那样,正如OP所要求的那样,无法从Dockerfile中指定映像名称,因此我们改用docker-compose.yml文件,并通过“ docker-compose up -d --build”运行它
Sean McCarthy

-7

您可以使用Ubuntu上的'AS'来完成此操作:16.04 AS FooImage


6
AS语法指定了在多阶段构建中使用的目标名称,并且该名称也可以代替COPY --from该多阶段构建中的语法的映像。但是,它没有指定生成本身的结果名称/标记。
BMitch
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.