在 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 磁盘空间的过度占用,您可以定期执行清理操作。可以创建一个脚本,并定期通过 cron
或 systemd
来执行清理操作。
例如,可以创建一个清理脚本 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 资源。
总结
- 删除未使用的镜像:
docker image prune -a
- 删除未使用的容器:
docker container prune
- 删除未使用的卷:
docker volume prune
- 删除未使用的网络:
docker network prune
- 全面清理:
docker system prune -a --volumes
- 清理构建缓存:
docker builder prune
以上方法可帮助有效地释放 Docker 环境中的磁盘空间。