侧边栏壁纸
博主头像
汪洋

即使慢,驰而不息,纵会落后,纵会失败,但一定可以达到他所向的目标。 - 鲁迅

  • 累计撰写 192 篇文章
  • 累计创建 74 个标签
  • 累计收到 120 条评论

Docker - 容器和镜像的清理

汪洋
2023-02-14 / 0 评论 / 5 点赞 / 341 阅读 / 1,380 字

背景

根目录磁盘空间不多,就只剩5个G左右了,操作需要,涉及到频繁创建/删除容器,发现每创建一个容器,在删除后,磁盘空间并没有恢复。久而久之。根目录就满了

# docker 空间占用查看
$ docker system df
    TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
    Images          4         4         2.06GB    0B (0%)
    Containers      4         3         598.1kB   0B (0%)
    Local Volumes   39        3         5.854GB   5.325GB (90%)
    Build Cache     0         0         0B        0B

虚拟机内实际运行的只有四个容器,但是这里显示容器卷有39个

$ docker system df -v 

命令可以进一步查看空间占用细节,以确定是哪个镜像、容器或本地卷占用过高空间

清理方法

# 删除无用卷
$ docker volume prune

删除后再次查看,空间即释放掉了

其他清理容器/镜像的方法

1、自动清理命令

# 对空间进行自动清理
$ docker system prune
"""
该命令所清理的对象如下:
    已停止的容器
    未被任何容器使用的卷
    未被任何容器所关联的网络
    所有悬空的镜像
"""

# docker system prune 后可以加额外的参数,如:
# docker system prune -a : 一并清除所有未被使用的镜像和悬空镜像。
# docker system prune -f : 用以强制删除,不提示信息

另外除了 system 级别的,还有针对容器或是镜像级别的删除命令:

$ docker image prune:删除悬空的镜像
# 悬空镜像(dangling image):未配置任何 Tag(也就是无法被引用)的镜像。通常是由于镜像编译过程中未指定 -t 参数配置 Tag 导致的

$ docker container prune:删除无用的容器
      --默认情况下 docker container prune 命令会清理掉所有处于 stopped 状态的容器
      --如果不想那么残忍统统都删掉,也可以使用 --filter 标志来筛选出不希望被清理掉的容器。例子:清除掉所有停掉的容器,但 24 内创建的除外:
          --$ docker container prune --filter "until=24h"  

$ docker volume prune:删除无用的卷。
$ docker network prune:删除无用的网络

2、手动清除

对于悬空镜像和未使用镜像可以使用手动进行个别删除:

1、删除所有悬空镜像,不删除未使用镜像:

$ docker rmi $(docker images -f "dangling=true" -q)

2、删除所有未使用镜像和悬空镜像

$ docker rmi $(docker images -q)

3、清理卷

如果卷占用空间过高,可以清除一些不使用的卷,包括一些未被任何容器调用的卷(-v 详细信息中若显示 LINKS = 0,则是未被调用):

# 删除所有未被容器引用的卷
$ docker volume rm $(docker volume ls -qf dangling=true)

4、容器清理

如果发现是容器占用过高的空间,可以手动删除一些:

# 删除所有已退出的容器
$ docker rm -v $(docker ps -aq -f status=exited)
# 删除所有状态为 dead 的容器
$ docker rm -v $(docker ps -aq -f status=dead)
0

评论区