《Docker技术入门与实战(第3版)》——3.4 删除和清理镜像

举报
华章计算机 发表于 2019/06/02 02:25:52 2019/06/02
【摘要】 本书摘自《Docker技术入门与实战(第3版)》——书中的第3章,第3.4节作者是杨保华、戴王剑、曹亚仑。

3.4 删除和清理镜像

本节主要介绍 Docker 镜像的rm和prune子命令。

1.使用标签删除镜像

使用docker rmi或docker image rm命令可以删除镜像,命令格式为docker rmi IMAGE [IMAGE...],其中IMAGE可以为标签或ID。

支持选项包括:

-f, –force:强制删除镜像,即使有容器依赖它;

–no-prune:不要清理未带标签的父镜像。

例如,要删除掉myubuntu:latest镜像,可以使用如下命令:

$ docker rmi myubuntu:latest

Untagged: myubuntu:latest

读者可能会想到,本地的ubuntu:latest镜像是否会受到此命令的影响。无须担心,当同一个镜像拥有多个标签的时候,docker rmi命令只是删除了该镜像多个标签中的指定标签而已,并不影响镜像文件。因此上述操作相当于只是删除了镜像0458a4468cbc的一个标签副本而已。

保险起见,再次查看本地的镜像,发现ubuntu:latest镜像(准确地说,0458a4468cbc镜像)仍然存在:

$ docker images

REPOSITORY TAG IMAGE ID CREATED SIZE

Ubuntu 18.04 452a96d81c30 5 weeks ago 79.6MB

Ubuntu latest 452a96d81c30 5 weeks ago 79.6MB

但当镜像只剩下一个标签的时候就要小心了,此时再使用docker rmi命令会彻底删除镜像。

例如通过执行docker rmi命令来删除只有一个标签的镜像,可以看出会删除这个镜像文件的所有文件层:

$ docker rmi busybox:latest

Untagged: busybox:latest

Untagged: busybox@sha256:1669a6aa7350e1cdd28f972ddad5aceba2912f589f19a090ac75b7083da748db

Deleted: sha256:5b0d59026729b68570d99bc4f3f7c31a2e4f2a5736435641565d93e7c25bd2c3

Deleted: sha256:4febd3792a1fb2153108b4fa50161c6ee5e3d16aa483a63215f936a113a88e9a

2.使用镜像ID来删除镜像

当使用docker rmi命令,并且后面跟上镜像的 ID (也可以是能进行区分的部分 ID 串前缀)时,会先尝试删除所有指向该镜像的标签,然后删除该镜像文件本身。

注意,当有该镜像创建的容器存在时,镜像文件默认是无法被删除的,例如:先利用ubuntu:18.04镜像创建一个简单的容器来输出一段话:

$ docker run ubuntu:18.04 echo 'hello! I am here!'

hello! I am here!

使用docker ps -a命令可以看到本机上存在的所有容器:

$ docker ps -a

CONTAINER ID      IMAGE      COMMAND      CREATED     STATUS     PORTS     NAMES

a21c0840213e    ubuntu:18.04    "echo 'hello! I am he"   About a minute ago   Exited (0) About a minute ago    romantic_euler

可以看到,后台存在一个退出状态的容器,是刚基于ubuntu:18.04镜像创建的。

试图删除该镜像,Docker会提示有容器正在运行,无法删除:

$ docker rmi ubuntu:18.04

Error response from daemon: conflict: unable to remove repository reference "ubuntu:18.04" (must force) - container a21c0840213e is using its referenced image 8f1bd21bd25c

如果要想强行删除镜像,可以使用-f参数:

$ docker rmi -f ubuntu:18.04

Untagged: ubuntu:18.04

Deleted: sha256:8f1bd21bd25c3fb1d4b00b7936a73a0664f932e11406c48a0ef19d82fd0b7342

注意,通常并不推荐使用-f参数来强制删除一个存在容器依赖的镜像。正确的做法是,先删除依赖该镜像的所有容器,再来删除镜像。

首先删除容器a21c0840213e:

$ docker rm a21c0840213e

然后使用 ID 来删除镜像,此时会正常打印出删除的各层信息:

$ docker rmi 8f1bd21bd25c

Untagged: ubuntu:18.04

Deleted: sha256:8f1bd21bd25c3fb1d4b00b7936a73a0664f932e11406c48a0ef19d82fd0b7342

Deleted: sha256:8ea3b9ba4dd9d448d1ca3ca7afa8989d033532c11050f5e129d267be8de9c1b4

Deleted: sha256:7db5fb90eb6ffb6b5418f76dde5f685601fad200a8f4698432ebf8ba80757576

Deleted: sha256:19a7e879151723856fb640449481c65c55fc9e186405dd74ae6919f88eccce75

Deleted: sha256:c357a3f74f16f61c2cc78dbb0ae1ff8c8f4fa79be9388db38a87c7d8010b2fe4

Deleted: sha256:a7e1c363defb1f80633f3688e945754fc4c8f1543f07114befb5e0175d569f4c

3.清理镜像

使用 Docker 一段时间后,系统中可能会遗留一些临时的镜像文件,以及一些没有被使用的镜像,可以通过docker image prune命令来进行清理。

支持选项包括:

-a, –all:删除所有无用镜像,不光是临时镜像;

–filter filter:只清理符合给定过滤器的镜像;

-f, –force:强制删除镜像,而不进行提示确认。

例如,如下命令会自动清理临时的遗留镜像文件层,最后会提示释放的存储空间:

$ docker image prune -f

...

Total reclaimed space: 1.4 GB


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。