构建一个与现有镜头同名的新docker镜像

lol*_*ski 14 docker

如果我构建一个与现有镜头同名的新docker镜像,是否会覆盖旧镜头?

Tho*_*zco 21

Docker中的图像没有名称,它们有标签.

标签是对图像的引用.多个标签可以指代相同的图像.

如果重新分配已使用的标记,则原始图像将丢失标记,但将继续存在(它仍可通过其图像ID访问,其他标记可能会引用它).

  • 它们都有名字和标签。您可以在下面验证这一点。https://docs.docker.com/v17.09/engine/reference/commandline/build/#options (2认同)
  • @Gi0rgi0s Docker 使用的术语可能有点不一致。“标签”有时引用“名称:标签”组合,有时仅引用它的后半部分。也就是说,在构建 Docker 映像的上下文中(即在这个问题的上下文中),“--tag”参数确实引用了整个组合,而不仅仅是“:”之后的尾随部分(也就是说,从您的评论,我不确定你想表达什么观点)。 (2认同)

jhm*_*jhm 6

清理未使用的映像并节省磁盘空间的一种简单方法是通过将其添加到~/.bashrc或在终端中为清理命令添加别名 ~/.bash_profile

alias docker_rmi_dangling="docker rmi $(docker images -qa -f 'dangling=true')"

然后docker_rmi_dangling在你的 shell 中运行。

(灵感来自此评论


Vit*_*dir 6

无法覆盖格式相同名称的 docker 镜像,但如果为镜像name:tag设置标签,则可以在构建后自动删除它:my-labelmy-image:latest

docker build --tag my-image:latest --label my-label ubuntu:latest
docker image prune --force --filter='label=my-label'
Run Code Online (Sandbox Code Playgroud)

更新:必须遵循严格的顺序:

  1. docker build ...
  2. docker image prune ..
  3. docker build ...
  4. docker image prune ..

如果你运行:

  1. docker build ...

  2. docker image prune ..

  3. docker build ...

  4. docker build ...

  5. docker image prune ..

您将获得步骤 3 中未删除的图像。