如果我使用与现有docker镜像相同的名称构建新的镜像,旧的镜像会被覆盖吗?
如果我使用与现有docker镜像相同的名称构建新的镜像,旧的镜像会被覆盖吗?
Docker中的镜像没有名称,它们有标签。
标签是对镜像的引用。多个标签可能引用同一镜像。
如果您重新分配已使用的标签,则原始镜像将失去该标签,但仍将存在(仍可通过其镜像ID访问,并且其他标签可能会引用它)。
一种简单的清理未使用图像并节省磁盘空间的方法是通过将其添加到~/.bashrc
或~/.bash_profile
来在终端中设置一个清理命令别名:
alias docker_rmi_dangling="docker rmi $(docker images -qa -f 'dangling=true')"
然后在shell中运行 docker_rmi_dangling
.
(灵感来源于这篇评论)
docker build --tag my-image:latest --label my-label ubuntu:latest
docker image prune --force --filter='label=my-label'
更新: 必须按照严格的顺序执行以下步骤:
docker build ...
docker image prune ..
docker build ...
docker image prune ..
如果您执行以下步骤:
docker build ...
docker image prune ..
docker build ...
docker build ...
docker image prune ..
您将会得到从第三步开始的镜像,并且不会被删除。
docker build ...
docker image prune ..
docker build ...
docker image prune ..
docker build ...
docker image prune ..
docker build ...
docker build ...
docker image prune ..
docker tag oldNameTag newNameTag
<none>
的镜像。它将删除所有悬空的镜像。docker image prune
或者
docker rmi $(docker images --filter "dangling=true" -q --no-trunc)
更多细节可以在这里找到。
e/g/:
docker build -t <USER>/<CONTAINER>:<VERSION>
docker build -t maluuba/haproxy:2
docker build -t maluuba/haproxy:latest #Default behavior when you don't use version
docker build -t maluuba/haproxy:old
删除所有容器和镜像的两个快捷别名。
#Containers
$ alias rmdockerall="docker rm $(docker ps -a -q)"
#Images
$ alias rmidockerall="docker rmi $(docker images -a -q)"