清理Docker的无用资源占用教程

  • 内容
  • 评论
  • 相关

Docker作为现在最流行的技术之一,几乎是前端和后端的开发人员都必备的技术栈。虽然Docker这么好用,但是在使用过程中也有不少的坑,比如说资源占用这个大坑。

Docker磁盘占用问题

Docker的磁盘占用问题是最常见的Docker使用问题之一,每个使用Docker的新人在使用Docker一段时间之后都会遇到这个问题,在使用Docker一段时间后发现宿主机的磁盘很容易就快被占满。其实Docker不仅仅占用的是磁盘资源,还占用了很多其他的资源,那么再清理Docker占用的资源之前我们首先要了解Docker究竟占用了哪些资源。

docker ls -a #查看全部容器,包括未启动的
docker images -a #列出所有镜像,包括intermediate。(镜像依赖层)
docker volume #列出数据卷
docker network ls #列出所有的网络
docker info #显示一些关于docker的系统信息

通过以上命令就能查看到当前Docker究竟占用了哪些资源,有哪些资源是可以被清理的,如果还是不太清楚的话可以在命令后面加上--help选项,会有详细的解释。

一键删除未被Docker使用的资源

docker system prune

这个命令被用来删除那些已停止的容器、dangling 镜像、未被容器引用的 network 和构建过程中的 cache,安全起见,这个命令默认不会删除那些未被任何容器引用的数据卷,如果需要同时删除这些数据卷,你需要显式的指定 --volumns 参数。如果加上 --all 参数,那么不仅仅只是删除 dangling images(悬停镜像),连未被使用的镜像也会被删除。

这里解释下什么是悬停镜像(dangling images),悬停镜像就是指那些tag为<none>的镜像,一般是由于更新了新的镜像但是新镜像并没有引用旧的镜像造成的。

我们还可以使用以下子命令来清理对应的Docker资源

docker container prune #删除所有未启动的docker容器
docker volume prune #删除未被使用的数据卷
docker images prune #删除所有未被使用的镜像
docker network prune #删除所有未被使用的网络

当前这些命令都是在Docker1.13之前的版本这是命令都是没有的,那么我们只能通过以下方法来清理Docker。

docker rmi $(docker images -f "dangling=true" -q) #删除所有悬停镜像,不删除未使用镜像
docker rmi $(docker images -q) #删除所有未使用的镜像和悬停镜像
docker volume rm $(docker volume ls -qf dangling=true) #删除所有未被容器使用的数据卷
docker rm -v $(docker ps -aq -f status=exited) #删除所有已退出的容器
docker rm -v $(docker ps -aq -f status=dead) #删除所有状态为dead的容器

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可,非商业性质可转载须署名链接,详见本站版权声明。

评论

0条评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注