清理docker资源

引言:这几天,开发测试用服务器又磁盘满了,因为开发过程中经常有临时的build部署,服务器上的废弃images等资源累积很快,又得清理docker的资源了,整理下脚本,添加个定时任务去清理吧。

由此,整理下清理docker资源的命令,以方便备查。清理 Docker  是一个常见需求,因为 Docker 的镜像、容器、网络和卷可能会占用大量磁盘空间。如果你发现 Docker 的磁盘空间不足,可以按照以下步骤来清理不必要的资源。


1. 清理未使用的镜像

当你拉取镜像或构建镜像时,Docker 会保留它们,哪怕它们已经不再被使用。

清理未使用的镜像
sudo docker image prune
  • 只会删除 未被任何容器使用的悬空镜像(dangling images)
  • 悬空镜像是指没有标签(<none>)的镜像。
清理所有未使用的镜像
sudo docker image prune -a
  • 删除所有没有被任何容器使用的镜像(包括带标签的镜像)。
  • 如果某些镜像可能会在未来再次使用,建议不要使用 -a 参数。

2. 清理未使用的容器

当你停止一个容器后,容器的存储空间仍然会占用磁盘,直到你手动删除它。

列出所有停止的容器
sudo docker ps -a -f status=exited
删除所有停止的容器
sudo docker container prune
  • 会删除所有停止的容器。
  • 如果你只想删除特定的容器,可以先使用 docker ps -a 查看容器 ID,然后手动删除:
    sudo docker rm <container_id>

3. 清理未使用的卷

Docker 卷用于持久化容器数据,即使容器被删除,卷仍会保留。因此,未使用的卷可能会占用大量空间。

列出所有未使用的卷
sudo docker volume ls -f dangling=true
删除所有未使用的卷
sudo docker volume prune
  • 注意:未使用的卷是指没有被任何容器挂载的卷。

4. 清理未使用的网络

Docker 网络也会随着时间的推移累积,尤其是一些用户自定义网络或孤立网络。

列出所有未使用的网络
sudo docker network ls
删除未使用的网络
sudo docker network prune
  • 只会删除未被任何容器使用的网络。
  • 注意:默认的网络(如 bridgehost 和 none)不会被清理。

5. 一键清理所有未使用的资源

如果你想一次性清理所有未使用的 Docker 资源(镜像、容器、卷、网络),可以使用以下命令:

sudo docker system prune
清理所有未使用的资源(包括未使用的镜像)
sudo docker system prune -a
  • -a 参数会删除所有未被使用的镜像,而不仅仅是悬空镜像。
  • 注意:这可能会删除你以后可能需要的镜像,请谨慎使用。

6. 查看磁盘占用情况

在清理之前或之后,你可以查看 Docker 的磁盘空间使用情况。

查看 Docker 资源的磁盘占用
sudo docker system df
示例输出
TYPE TOTAL ACTIVE SIZE RECLAIMABLE Images 5 2 1.2GB 800MB (66%) Containers 3 1 500MB 400MB (80%) Local Volumes 4 2 2GB 1.5GB (75%) Build Cache 0 0 0B 0B

7. 手动删除特定资源

删除特定的容器
sudo docker rm <container_id>
删除特定的镜像
sudo docker rmi <image_id>
删除特定的卷
sudo docker volume rm <volume_name>
删除特定的网络
sudo docker network rm <network_name>

8. 清理 Docker 的构建缓存

Docker 在构建镜像时会产生缓存,随着时间的推移可能占用大量磁盘空间。

清理构建缓存
sudo docker builder prune
清理所有的构建缓存(包括运行中的)
sudo docker builder prune --all

9. 定期清理的建议

为了避免 Docker 资源堆积,可以设置定期清理的计划任务。例如,使用 cron 定期运行以下命令:

设置定期清理未使用的资源

编辑 cron 任务:

sudo crontab -e

添加以下内容(每周清理一次未使用的资源):

0 2 * * 0 docker system prune -f

总结

清理 Docker 的资源需要根据实际需求选择合适的命令:

  1. 清理未使用的镜像:docker image prune -a
  2. 清理停止的容器:docker container prune
  3. 清理未使用的卷:docker volume prune
  4. 清理未使用的网络:docker network prune
  5. 一键清理所有未使用资源:docker system prune -a

在清理之前,建议使用 docker system df 查看资源占用情况。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值