我们执行命令
docker images -a
有时候会发现不少
:
镜像,使用
docker rmi image_name
删除这些none镜像时候,有时候能够成功,有时候却不能成功。这究竟为什么?
我们知道镜像是分层的,上面一层依赖下一层,下一层是上一次的父镜像层。就像下面这样:
我们可以通过
docker inspect
查看镜像ID 和父层镜像ID
上图中镜像ip-scout的ID是
28ee11309524
,它的父镜像层ID是
a8e836f776fa
, 接着我们看看上图父镜像层信息:
我们发现ip-scout镜像的父镜像层就是
:
,这就是一部分
:
镜像的来源–在
docker build
或
docker pull
过程中产生的中间层镜像,这些none镜像是无法删除的。最上层镜像由于我们命名了所以不再是你none,就好比
28ee11309524
的名称就是
ip-scout:latest
我们可以通过
docker history
查看所有层:
:
另一个来源是悬空镜像(dangling),这种一般发生在build或者pull过程。其中一个情况就是重新构建镜像时候,如果依赖的父镜像已经更新了,我们新构建的新镜像指向了新的父镜像,而我们之前构建的镜像指向的还是旧的父镜像,那么之前镜像就变成
untagged
和
dangling
,这类镜像占用空间,可以使用下面命令进行删除的:
1
|
docker rmi $(docker images -f "dangling=true" -q)
|