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

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

是否有一种方法可以在Dockerfile中定义图像的名称,这样我就不必在docker构建命令中提到它了?


当前回答

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

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

然后你就跑

docker-compose build

其他回答

Dockerfile内部不支持图像标记。这需要在构建命令中完成。作为一种变通方法,您可以使用docker-compose进行构建。Yml,它标识目标映像名称,然后运行docker-compose构建。一个docker-compose示例。Yml看起来就像

version: '2'

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

也就是说,有一个推动做构建与组合,因为这并不适用于蜂群模式部署。所以你回到了你在问题中给出的命令:

docker build -t dude/man:v2 .

就我个人而言,我倾向于在我的文件夹(build.sh)中使用一个小的shell脚本进行构建,该脚本传递任何参数,并包括图像的名称,以节省输入。对于生产,构建由一个ci/cd服务器处理,该服务器在管道脚本中有映像名称。

如何在不使用yml文件的情况下建立一个自定义名称的图像:

docker build -t image_name .

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

docker run -d --name container_name image_name

我的Dockerfile单独的解决方案是添加一个shebang行:

#!/usr/bin/env -S docker build . --tag=dude/man:v2 --network=host --file

FROM ubuntu:22.04
# ...

然后运行chmod +x Dockerfile和。/Dockerfile。 我甚至添加了更多的docker构建命令行参数,比如指定主机网络。

注意:带有-S/——split-string支持的env仅适用于较新的coreutils版本。

使用特定的Dockerfile,您可以尝试: docker build——tag < docker镜像名称>——file <特定Dockerfile> . docker build——tag < docker镜像名称>。 例如 Dockerfile_Second Dockerfile_Second Dockerfile_Second Dockerfile_Second

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

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

然后你就跑

docker-compose build