如何清理 docker?

How to cleanup docker?

我们正在使用 docker 进行持续构建。我已经删除了不需要的图像和容器。最多只有 4 张 5GB 的图像。但看起来其他东西正在吃掉所有磁盘 space。关于如何清理和改进的任何提示 space?

    Filesystem      Size  Used Avail Use% Mounted on
udev             48G     0   48G   0% /dev
tmpfs           9.5G   26M  9.5G   1% /run
/dev/sda1       456G  428G  5.2G  99% /
tmpfs            48G  7.4M   48G   1% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs            48G     0   48G   0% /sys/fs/cgroup
tmpfs           100K     0  100K   0% /run/lxcfs/controllers
tmpfs           9.5G     0  9.5G   0% /run/user/1000
none            456G  428G  5.2G  99% /var/lib/docker/aufs/mnt/4b96935f7fb6b517031df23849292a06eab92013d0610d922588688132013a5e
shm              64M     0   64M   0% /var/lib/docker/containers/c3b48e0215e05e13f79466de64cb0a2b4646cef30e020e651c59cb1950f0d70d/shm
none            456G  428G  5.2G  99% /var/lib/docker/aufs/mnt/4388442c65c13654a7d1cd51894aa5c06137166628a0a52d6854abc230417140
shm              64M     0   64M   0% /var/lib/docker/containers/027ce91cd66eca1ed134decdb8c13e6676fd34b1f6affe406513220037e63936/shm
none            456G  428G  5.2G  99% /var/lib/docker/aufs/mnt/13595cb64024d0d8f3cf7c09f90e37baccee08ea9b9b624c41d971a195d614e0
shm              64M     0   64M   0% /var/lib/docker/containers/3212761e701699313a127d50a423677c1d0ddaf9099ae37e23b25b8caaa72b37/shm
none            456G  428G  5.2G  99% /var/lib/docker/aufs/mnt/149839edbef826cdf289e66988c206dd6afebdb4257cc22e91551f65ea034f77
shm              64M     0   64M   0% /var/lib/docker/containers/9c084651b9ecf035257a34b9dd4415689e4c685e660e3013ad9673955834be

常见的错误是忘记删除卷。

对于 CI 和 CD,删除容器时使用 docker rm -v 是一个好习惯,使用 -v 可以确保删除自动创建的卷。

当然,如果您在此处有一些值,请键入 docker volume ls,这意味着您的某些容器创建了一些卷。

您可以使用 docker volume rm $(docker volume ls -q) 一次全部删除它们(它不会删除任何当前使用的卷,而是显示一条错误消息,但请谨慎使用)

在 Docker 1.13 版本之后,有 new prune commands 清理 docker 环境。

使用 docker system df 通过可回收 space 获取有关容器、图像及其磁盘使用情况的统计信息。

使用 docker system prune 摆脱停止的容器、悬空卷和悬空图像。

要仅删除已停止的容器,您可以使用 docker container prunedocker image prune 删除所有悬挂图像。

您可以使用以下命令清理 docker 个工件(取决于您需要清理的内容):

docker container prune
docker image prune
docker network prune
docker volume prune

这些命令支持“-a”选项,如果指定,该选项将删除所有工件(例如,docker container prune -a 将删除所有容器)

如果您需要清理您可能想要使用的所有内容:

docker system prune -a

这就像上面提到的所有命令的组合。