5. 删除本机镜像

如果有不用的镜像,可以使用 docker rmi 命令在本地删除镜像,以减少磁盘占用空间。

docker rmi 命令

命令格式

docker rmi <镜像ID1> <镜像ID2> ...
# 或
docker rmi <镜像名1[:标签名1]> <镜像名2[:标签名2]> ...

命令别名: docker image rm, docker image remove

如果不给出 标签名 默认为 latest 标签。

docker rmi 常用选项

选项
说明
-f--force
强制删除(删除已经创建容器的镜像)。

示例

weimingze@mzstudio:~$ sudo docker images
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
mysql        latest    edbdd97bf78b   2 months ago   859MB
ubuntu       24.04     602eb6fb314b   2 months ago   78.1MB
weimingze@mzstudio:~$ sudo docker rmi ubuntu:24.04
Untagged: ubuntu:24.04
Deleted: sha256:602eb6fb314b5fafad376a32ab55194e535e533dec6552f82b70d7ac0e554b1c
Deleted: sha256:3abdd8a5e7a8909e1509f1d36dcc8b85a0f95c68a69e6d86c6e9e3c1059d44b3
weimingze@mzstudio:~$ sudo docker images
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
mysql        latest    edbdd97bf78b   2 months ago   859MB
weimingze@mzstudio:~$ sudo docker rmi edbdd97bf78b
Untagged: mysql:latest
Deleted: sha256:edbdd97bf78b4338bbb96fa1348c8743a328b97ea3290b20adcab25bc17637de
Deleted: sha256:5ee46883cd23ccea0c130113edfca5ef2b202eb1866c6a0e868fc1f556755c75
Deleted: sha256:cc7bc92145face1c727f2014d0341f21d18247e0c7df0543e2d6ac020a6dbdbc
Deleted: sha256:a0229cd926f7a0e0afeea987e0b9d4419964e02d6d84330aee7615863687deb0
Deleted: sha256:54366fcda8e9d2e5cd0f3452adb3b2ab34c6216aa73e24889cbdcdb15788f399
Deleted: sha256:c3e04f405b930b3c39ffeeaa9583e72d1f007fc3d6a208a894ac8c793f02fa84
Deleted: sha256:8ec93f6326350a63a5858a425afcd3028ed2dcc6303784c51359b48c032916ad
Deleted: sha256:24882858314385467bf296310805d4b7229bff39c29ed9a434689adc37543291
Deleted: sha256:35caa70a7a17d9478f62ffd10c7fe27493877644fdbe82d181bc5bb93e8e0f62
Deleted: sha256:c222c78b1ef751569013c1ec5a3ad2b5a8254b3600920aaaf358e0b32872bf23
Deleted: sha256:825f4932222fe8e4ee14d896e0f324da04fb8420e5335f3ee039f32fa47e5ee3
weimingze@mzstudio:~$ sudo docker images
REPOSITORY   TAG       IMAGE ID   CREATED   SIZE
weimingze@mzstudio:~$

删除所有镜像

组合使用 docker images -qdocker rmi 可以删除所有镜像。

sudo docker rmi $(sudo docker images -q)

示例

weimingze@mzstudio:~$ sudo docker images
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
mysql        latest    edbdd97bf78b   2 months ago   859MB
ubuntu       24.04     602eb6fb314b   2 months ago   78.1MB
weimingze@mzstudio:~$ sudo docker images -q
edbdd97bf78b
602eb6fb314b
weimingze@mzstudio:~$ sudo docker rmi $(sudo docker images -q)
Untagged: mysql:latest
Deleted: sha256:edbdd97bf78b4338bbb96fa1348c8743a328b97ea3290b20adcab25bc17637de
Deleted: sha256:5ee46883cd23ccea0c130113edfca5ef2b202eb1866c6a0e868fc1f556755c75
Deleted: sha256:cc7bc92145face1c727f2014d0341f21d18247e0c7df0543e2d6ac020a6dbdbc
Deleted: sha256:a0229cd926f7a0e0afeea987e0b9d4419964e02d6d84330aee7615863687deb0
Deleted: sha256:54366fcda8e9d2e5cd0f3452adb3b2ab34c6216aa73e24889cbdcdb15788f399
Deleted: sha256:c3e04f405b930b3c39ffeeaa9583e72d1f007fc3d6a208a894ac8c793f02fa84
Deleted: sha256:8ec93f6326350a63a5858a425afcd3028ed2dcc6303784c51359b48c032916ad
Deleted: sha256:24882858314385467bf296310805d4b7229bff39c29ed9a434689adc37543291
Deleted: sha256:35caa70a7a17d9478f62ffd10c7fe27493877644fdbe82d181bc5bb93e8e0f62
Deleted: sha256:c222c78b1ef751569013c1ec5a3ad2b5a8254b3600920aaaf358e0b32872bf23
Deleted: sha256:825f4932222fe8e4ee14d896e0f324da04fb8420e5335f3ee039f32fa47e5ee3
Untagged: ubuntu:24.04
Deleted: sha256:602eb6fb314b5fafad376a32ab55194e535e533dec6552f82b70d7ac0e554b1c
Deleted: sha256:3abdd8a5e7a8909e1509f1d36dcc8b85a0f95c68a69e6d86c6e9e3c1059d44b3
weimingze@mzstudio:~$ sudo docker images
REPOSITORY   TAG       IMAGE ID   CREATED   SIZE

清理无用镜像

docker image prune 命令用于 清理未被使用的 Docker 镜像(悬空镜像或未被容器引用的镜像)。以减少多磁盘空间的占用。

术语

未被容器引用的镜像 是指有标签等信息,但未创建容器。 悬空镜像 (dangling images) 通常是创建过程中产生的中间层镜,他没有标签,通常标签为 <none>:<none>,他无法创建容器。

docker image prune 命令

命令格式

docker image prune [选项]

如果不给出选项,默认删除 悬空镜像 (dangling images)。

docker image prune 命令的常用选项

选项
说明
-a--all
删除所有未被容器引用的镜像(包括可能有用的缓存镜像)。
-f--force
强制删除。

示例

weimingze@mzstudio:~$ sudo docker images
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
mysql        latest    edbdd97bf78b   2 months ago   859MB
ubuntu       24.04     602eb6fb314b   2 months ago   78.1MB
weimingze@mzstudio:~$ sudo docker image prune
WARNING! This will remove all dangling images.
Are you sure you want to continue? [y/N] y
Total reclaimed space: 0B
weimingze@mzstudio:~$ sudo docker images
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
mysql        latest    edbdd97bf78b   2 months ago   859MB
ubuntu       24.04     602eb6fb314b   2 months ago   78.1MB
weimingze@mzstudio:~$ sudo docker image prune -a
WARNING! This will remove all images without at least one container associated to them.
Are you sure you want to continue? [y/N] y
Deleted Images:
untagged: ubuntu:24.04
deleted: sha256:602eb6fb314b5fafad376a32ab55194e535e533dec6552f82b70d7ac0e554b1c
deleted: sha256:3abdd8a5e7a8909e1509f1d36dcc8b85a0f95c68a69e6d86c6e9e3c1059d44b3

Total reclaimed space: 78.1MB
weimingze@mzstudio:~$ sudo docker images
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
mysql        latest    edbdd97bf78b   2 months ago   859MB
weimingze@mzstudio:~$

从上述示例可以看出,这里没有悬空镜像,因此 sudo docker image prune 没有删除任何镜像。

在上述三个镜像中,ubuntu 没有创建容器。因此 sudo docker image prune -a 删除了 ubuntu 镜像,保留了 mysql 镜像。

查看镜像磁盘占用

使用 docker system df 命令可以查看当前镜像和容器占用系统磁盘的空间。

docker system df 命令

命令格式

docker system df

示例

weimingze@mzstudio:~$ sudo docker images
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
mysql        latest    edbdd97bf78b   2 months ago   859MB
weimingze@mzstudio:~$ sudo docker system df
TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
Images          1         1         859.4MB   0B (0%)
Containers      1         1         6B        0B (0%)
Local Volumes   4         0         627.3MB   627.3MB (100%)
Build Cache     0         0         0B        0B

可见当前有个镜像(Image) 占用 859.4MB;容器(Containers) 1 个,正在运行(ACTIVE:1),占用磁盘空间 6B;本地卷占用 627.3MB;缓存没有占用磁盘空间。