Docker 环境下检查及清理磁盘空间的方法

在 Docker 环境下,磁盘空间可能会因为镜像、容器、卷和网络等资源的积累而逐渐增大。清理这些不再使用的资源可以帮助释放磁盘空间。以下是一些常用的清理方法:

1. 清理未使用的镜像 (Images)

Docker 镜像占用的磁盘空间通常比较大。您可以清理那些不再使用的镜像。

查看所有镜像

docker images

删除未使用的镜像

  • 删除单个镜像:

    docker rmi <image_id>

  • 清理所有未使用的镜像:

    docker image prune

    该命令会删除所有悬空的镜像(即没有任何容器使用的镜像)。

  • 如果要强制删除所有未使用的镜像和悬空镜像,可以使用:

    docker image prune -a

    注意:-a 参数会删除所有没有容器依赖的镜像,包括没有标签的镜像。

2. 清理未使用的容器 (Containers)

容器虽然停止运行,但仍然占用磁盘空间。可以删除那些不再使用的容器。

查看所有容器(包括已停止的)

docker ps -a

删除单个容器

docker rm <container_id>

删除所有停止的容器

docker container prune

该命令会删除所有已经停止的容器。

3. 清理未使用的卷 (Volumes)

Docker 卷用于持久化数据,可能在删除容器后仍然存在,并占用磁盘空间。可以清理未使用的卷。

查看所有卷

docker volume ls

删除单个卷

docker volume rm <volume_name>

删除所有未使用的卷

docker volume prune

该命令会删除所有未挂载到容器上的卷。

4. 清理未使用的网络 (Networks)

Docker 创建的网络也可能占用磁盘空间,特别是在您创建了多个自定义网络之后。

查看所有网络

docker network ls

删除单个网络

docker network rm <network_name>

删除所有未使用的网络

docker network prune

该命令会删除所有未使用的网络。

5. 全面清理

如果您希望一次性清理 Docker 中所有未使用的资源,可以使用 docker system prune 命令:

删除所有未使用的容器、网络、镜像和卷

docker system prune

该命令会删除:

  • 所有停止的容器。
  • 所有未使用的网络。
  • 所有悬空的镜像。
  • 所有未挂载的卷。

删除所有未使用的资源(包括未使用的卷)

docker system prune -a --volumes

  • -a:删除所有未使用的镜像(包括当前未使用的镜像)。
  • --volumes:同时删除未使用的卷。

6. 清理构建缓存 (Build Cache)

Docker 在构建镜像时会使用缓存以加速构建过程。长时间使用后,这些构建缓存会占用相当大的磁盘空间。

清理构建缓存

docker builder prune

该命令会清理所有未使用的构建缓存。

7. 查看 Docker 使用的磁盘空间

如果您想查看 Docker 使用了多少磁盘空间,可以使用以下命令:

docker system df

该命令会显示 Docker 当前使用的空间,包括镜像、容器、卷和缓存的磁盘占用情况。

8. 定期清理脚本

为了避免 Docker 磁盘空间的过度占用,您可以定期执行清理操作。可以创建一个脚本,并定期通过 cronsystemd 来执行清理操作。

例如,可以创建一个清理脚本 docker_cleanup.sh

#!/bin/bash
# 清理未使用的镜像
docker image prune -af
# 清理停止的容器
docker container prune -f
# 清理未使用的卷
docker volume prune -f
# 清理未使用的网络
docker network prune -f
# 清理构建缓存
docker builder prune -f
# 打印清理结果 docker system df

然后,您可以使用 cron 定期执行该脚本,自动清理不再使用的 Docker 资源。

总结

  1. 删除未使用的镜像docker image prune -a
  2. 删除未使用的容器docker container prune
  3. 删除未使用的卷docker volume prune
  4. 删除未使用的网络docker network prune
  5. 全面清理docker system prune -a --volumes
  6. 清理构建缓存docker builder prune

以上方法可帮助有效地释放 Docker 环境中的磁盘空间。