0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Docker占用资源过高,如何快速清理Docker?

阿铭linux 来源:电子发烧友网 作者:工程师谭军 2018-07-06 10:05 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

docker 减肥记

如果经常使用 docker,你会发现 docker 占用的资源膨胀很快,其中最明显也最容易被察觉的应该是对磁盘空间的占用。

如何快速的清理 docker 占用的系统资源,具体点说就是删除那些无用的镜像、容器、网络和数据卷…

1

查看 docker 占用的资源

在进行资源清理之前我们有必要搞清楚 docker 都占用了哪些系统的资源。

这需要综合使用不同的命令来完成。

docker container ls:默认只列出正在运行的容器,-a 选项会列出包括停止的所有容器。

docker image ls:列出镜像信息,-a 选项会列出 intermediate 镜像(就是其它镜像依赖的层)。

docker volume ls:列出数据卷。

docker network ls:列出 network。

docker info:显示系统级别的信息,比如容器和镜像的数量等。

通过这些命令查看 docker 使用的资源情况后,

相信你已经决定要清理 docker 占用的一些资源了!

2

让我们先从那些未被使用的资源开始。

只删除那些未被使用的资源

Docker 提供了方便的 docker system prune 命令来删除那些已停止的容器、dangling 镜像、未被容器引用的 network 和构建过程中的 cache:

$ docker system prune

安全起见,这个命令默认不会删除那些未被任何容器引用的数据卷,如果需要同时删除这些数据卷,你需要显式的指定 --volumns 参数。比如你可能想要执行下面的命令:

$ docker system prune --all --force --volumns

这次不仅会删除数据卷,而且连确认的过程都没有了!

注意使用 --all 参数后会删除所有未被引用的镜像而不仅仅是 dangling 镜像。

这里有必要解释一下何为 dangling images,其实可以简单的理解为未被任何镜像引用的镜像。比如在你重新构建了镜像后,那些之前构建的且不再被引用的镜像层就变成了 dangling images:

Docker占用资源过高,如何快速清理Docker?

在本地的镜像更新之后,就会出现类似图中红框内的 镜像。这表示旧的镜像已经不再被引用了,此时它们就变成了 dangling images。如果使用 -a 参数,你还会发现另外一种类型的 镜像,它们的 repository 和 tag 列都表现为

Docker占用资源过高,如何快速清理Docker?

这些镜像被称为 intermediate 镜像(就是其它镜像依赖的层)。

我们还可在不同在子命令下执行 prune,这样删除的就是某类资源:

docker container prune #删除所有退出状态的容器

docker volume prune #删除未被使用的数据卷

docker image prune #删除 dangling 或所有未被使用的镜像

3

让 docker 回到安装时的状态

这里的 "安装时的状态" 指资源占用情况而不是 docker 的相关配置。这也是一种比较常见的用例,比如就需要在一个干净的 docker 环境中自动化的还原出某天的一个生产环境(使用生产环境的备份数据)用于 bug 调查。

让我们一起来看看都需要做些什么?

回想我们前面介绍的 docker system prune --all --force --volumns 命令,如果在执行这个命令前系统中所有的容器都已停止,那么这个命令就会移除所有的资源!好,现在让我们想办法停掉系统中的所有容器。

docker container stop 命令可以停止一个或多个容器,我们只需要把系统中所有在运行的容器罗列出来就可以了。

由于 docker 并不介意我们再次停止一个已经停止了的容器,干脆简单粗暴点,直接列出所有的容器(包括已经停止的)!

$ docker container ls -a -q

Docker占用资源过高,如何快速清理Docker?

-a 显示所有的容器,-q 只显示数字形式的容器 ID。

然后把这里命令执行的结果作为 docker container stop 命令的参数:

$ docker container stop $(docker container ls -a -q)

完整的恢复 docker 环境的命令如下:

$ docker container stop $(docker container ls -a -q) && docker system prune --all --force --volumns

和前面的 prune 命令类似,也可以完全删除某一类资源:

删除容器:docker container rm $(docker container ls -a -q)

删除镜像:docker image rm $(docker image ls -a -q)

删除数据卷:docker volume rm $(docker volume ls -q)

删除 network:docker network rm $(docker network ls -q)

4

创建 shell 别名

上面的命令可以完成任务但是却很繁琐,我们可以通过 shell 的别名功能来简化这些命令的执行。

alias docker-clean-unused='docker system prune --all --force --volumes'

alias docker-clean-all='docker stop $(docker container ls -a -q) && docker system prune --all --force --volumes'

把上面的命令写入到用户的 ~/.bashrc 文件中就可以了!

Docker占用资源过高,如何快速清理Docker?

执行一次清理任务:

5

总结

经常清理系统资源不仅能够让系统运行的更流畅,也利于我们把精力集中在相关的重点资源上面。

所以建议大家能够使用相关的资源清理命令,让 docker 保持清爽和高效。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Docker
    +关注

    关注

    0

    文章

    526

    浏览量

    14026
  • 资源占用
    +关注

    关注

    0

    文章

    1

    浏览量

    1291

原文标题:Docker减肥小记

文章出处:【微信号:aming_linux,微信公众号:阿铭linux】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    创龙 瑞芯微 RK3588 国产2.4GHz八核 工业开发板—Docker容器部署方法说明

    ,镜像下载与容器运行(含单个 / 多个容器操作),还提及磁盘占用资源查看方法,适配 Debian 11 等环境,为评估板 Docker 应用部署提供完整指导。
    的头像 发表于 10-22 17:21 557次阅读
    创龙 瑞芯微 RK3588 国产2.4GHz八核 工业开发板—<b class='flag-5'>Docker</b>容器部署方法说明

    干货分享 | RK3588 Ubuntu系统Docker容器使用指南

    前言:在瑞芯微RK3588高性能AIoT平台上运行Ubuntu系统时,Docker容器技术能极大提升开发部署效率。通过轻量级虚拟化实现环境隔离与快速迁移,本文将从零开始详解RK3588平台
    的头像 发表于 06-27 12:01 3220次阅读
    干货分享 | RK3588 Ubuntu系统<b class='flag-5'>Docker</b>容器使用指南

    docker无法启用怎么解决?

    mengxing@mengxing-virtual-machine:/etc/docker$ sudo systemctl daemon-reload
    发表于 06-23 07:17

    Docker Volume管理命令大全

    Docker Volume管理命令大全
    的头像 发表于 05-28 17:14 619次阅读

    如何使用Docker部署大模型

    随着深度学习和大模型的快速发展,如何高效地部署这些模型成为了一个重要的挑战。Docker 作为一种轻量级的容器化技术,能够将模型及其依赖环境打包成一个可移植的容器,极大地简化了部署流程。本文将详细介绍如何使用 Docker 部署
    的头像 发表于 05-24 16:39 802次阅读

    Docker Compose的常用命令

    。它通过一个配置文件(docker-compose.yml)来详细定义多个容器之间的关联、网络设置、服务端口等信息。使用一条简单的命令,就可以轻松启动、停止和管理这些容器,极大地简化了多容器应用的部署与管理流程,方便实现应用的快速构建、开发、测试以及部署。
    的头像 发表于 04-30 13:40 935次阅读

    Docker常用命令大全

    Docker 是一种开源的应用容器引擎,广泛应用于开发、部署和运行分布式应用。掌握 Docker 常用命令对于开发人员和运维人员来说非常重要。本文将为大家整理常用的Docker 命令,并按照功能分为多个部分,帮助你高效使用
    的头像 发表于 04-22 12:47 674次阅读

    【技术案例】Android in Docker

    Docker介绍Docker是一个开源的容器化平台,用于打包、分发和运行应用程序。它通过将应用及其所有依赖打包到独立的容器中,确保应用在不同环境中一致运行。Docker提供快速部署、隔
    的头像 发表于 04-02 16:33 1459次阅读
    【技术案例】Android in <b class='flag-5'>Docker</b>

    基于Docker镜像逆向生成Dockerfile

    在本文中, 我们将通过理解Docker镜像如何存储数据, 以及如何使用工具查看镜像方方面面的信息来逆向工程一个Docker镜像; 以及如何使用Python的Docker API来构建一个类似Dedockify的工具来创建Dock
    的头像 发表于 03-10 09:45 1217次阅读
    基于<b class='flag-5'>Docker</b>镜像逆向生成Dockerfile

    华为云 X 实例部署 Docker 应用的性能评测优化与实践指南

      3.2 使用Docker部署Elasticsearch   3.3 使用Docker部署MySQL   3.4 使用Docker部署Nginx   4. 性能测试与评测标准   4.1
    的头像 发表于 01-23 18:03 776次阅读
    华为云 X 实例部署 <b class='flag-5'>Docker</b> 应用的性能评测优化与实践指南

    华为 FlexusX 与 Docker+Nginx 的高效整合之路

    。这一高效整合方案,不仅实现了资源的最大化利用,还大幅提升了 Web 应用的访问速度与稳定性。值此 828 华为云企业上云节之际,我们诚邀您体验 FlexusX 与 Docker
    的头像 发表于 01-23 17:55 581次阅读
    华为 FlexusX 与 <b class='flag-5'>Docker</b>+Nginx 的高效整合之路

    云服务器 Flexus X 实例,Docker 集成搭建 NGINX

    Docker 集成搭建 NGINX 1、购买华为云 Flexus X 实例 Flexus云服务器X实例-华为云 (huaweicloud.com)   2、docker 安装 yum install
    的头像 发表于 01-13 11:09 1233次阅读
    云服务器 Flexus X 实例,<b class='flag-5'>Docker</b> 集成搭建 NGINX

    基于 Docker 与 Jenkins 实现自动化部署

    前言 重塑自动化部署新高度,Docker 携手 Jenkins,在华为云 Flexus X 云服务器的加持下,引领持续集成与部署的新纪元。Flexus X 以其卓越的性能、灵活的资源配置和高效的成本
    的头像 发表于 01-07 17:25 863次阅读
    基于 <b class='flag-5'>Docker</b> 与 Jenkins 实现自动化部署

    docker的基本命令和使用示例

    DotCloud 公司是一家 PAAS 服务提供商,从 docker 的出身也可以看出它的主要功能和方向。
    的头像 发表于 01-06 15:59 783次阅读

    docker通过中间镜像加速部署

    使用 docker 打包镜像的时候, 每次耗费时间最多的就是 docker build 的过程. 特别是对于前端工程的打包, 有时候下载依赖包的时间就要 10 几分钟, 这就导致发布版本的效率极低.
    的头像 发表于 01-06 12:39 849次阅读