如何快速清理 docker 资源的方法

如果经常使用 docker,你会发现 docker 占用的资源膨胀很快,其中最明显也最容易被察觉的应该是对磁盘空间的占用。本文将介绍如何快速的清理 docker 占用的系统资源,具体点说就是删除那些无用的 镜像、容器、网络和数据卷。

查看 docker 占用的资源

在进行资源清理之前我们有必要搞清楚 docker 都占用了哪些系统的资源。这需要综合使用不同的命令来完成。

  • docker container ls:默认只列出正在运行的容器,-a 选项会列出包括停止的所有容器。
  • docker image ls:列出镜像信息,-a 选项会列出 intermediate 镜像(就是其它镜像依赖的层)。
  • docker volume ls:列出数据卷。
  • docker network ls:列出 network。
  • docker info:显示系统级别的信息,比如容器和镜像的数量等。

通过这些命令查看 docker 使用的资源情况后,相信你已经决定要清理 docker 占用的一些资源了!让我们先从那些未被使用的资源开始。

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

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

$ docker system prune

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

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

这次不仅会删除数据卷,而且连确认的过程都没有了!注意,使用 --all 参数后会删除所有未被引用的镜像而不仅仅是 dangling 镜像。

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

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

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

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

  • docker container prune # 删除所有退出状态的容器
  • docker volume prune # 删除未被使用的数据卷
  • docker image prune # 删除 dangling 或所有未被使用的镜像

让 docker 回到安装时的状态

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

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

docker container stop 命令可以停止一个或多个容器,我们只需要把系统中所有在运行的容器罗列出来就可以了。由于 docker 并不介意我们再次停止一个已经停止了的容器,干脆简单粗暴点,直接列出所有的容器(包括已经停止的)!

$ docker container ls -a -q

-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)

创建 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 保持清爽和高效。

参考:

Clean out your Docker images, containers and volumes with single commands

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Docker 清理命令集锦

    杀死所有正在运行的容器 复制代码 代码如下: docker kill $(docker ps -a -q) 删除所有已经停止的容器 复制代码 代码如下: docker rm $(docker ps -a -q) 删除所有未打 dangling 标签的镜像 复制代码 代码如下: docker rmi $(docker images -q -f dangling=true) 删除所有镜像 复制代码 代码如下: docker rmi $(docker images -q) 为这些命令创建别名 复制代码

  • Docker磁盘空间使用分析与清理的方法

    本文介绍了Docker磁盘空间使用分析与清理的方法,分享给大家,具体如下: 用了一段时间Docker后,会发现它占用了不少硬盘空间.还好Docker 1.13引入了解决方法,它提供了简单的命令System来查看/清理Docker使用的磁盘空间. 前情提要 #MyVersion [root@dockercon ~]# docker version Client: Version: 17.12.0-ce API version: 1.35 Go version: go1.9.2 Git commit

  • 如何快速清理 docker 资源的方法

    如果经常使用 docker,你会发现 docker 占用的资源膨胀很快,其中最明显也最容易被察觉的应该是对磁盘空间的占用.本文将介绍如何快速的清理 docker 占用的系统资源,具体点说就是删除那些无用的 镜像.容器.网络和数据卷. 查看 docker 占用的资源 在进行资源清理之前我们有必要搞清楚 docker 都占用了哪些系统的资源.这需要综合使用不同的命令来完成. docker container ls:默认只列出正在运行的容器,-a 选项会列出包括停止的所有容器. docker imag

  • Android studio 快速删除无用资源的方法

    1.在Anaylze中选择Run Inspection by Name... 2.在点击之后弹出的窗口输入unused resources后,回车 3.根据情况,选择情况,选择整个项目.指定Module...,也可以自己过滤.点击ok 4.得到结果,里面全是没用的文件.可以一个个删,也可以一次性删除 总结 以上所述是小编给大家介绍的Android studio 快速删除无用资源的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的.在此也非常感谢大家对我们网站的支持! 您

  • 定时清理docker私服镜像的方法

    使用CI构建docker镜像进行发布极大促进了大家的版本发布效率,于是镜像仓库也就急速膨胀.为了缓解磁盘压力,我们需要设置一些清理策略. 对于不同docker镜像的清理策略应该是不同的.比如,默认保留最近5个版本的镜像,对于工具类的image保留全部,对于业务类的image保留一个月之类的. 简单保留5个image的方式如下: 下载 https://github.com/mlabouardy/nexus-cli , 使用cli来执行删除. 下载 wget https://s3.eu-west-2

  • Intellij IDEA快速实现Docker镜像部署的方法步骤

    目录 1.Docker开启远程访问 2.Intellij IDEA安装Docker插件 3.spring boot服务Docker部署 4.创建Docker镜像 参考: 1.Docker开启远程访问 [root@izwz9eftauv7x69f5jvi96z docker]# vim /lib/systemd/system/docker.service #修改ExecStart这行 ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:

  • ubuntu服务器上快速部署docker的方法

    最近在学习docker,今天学习了一下ubuntu服务器上快速部署docker,所以,今天添加一点小笔记. 安装curl sudo apt-get install curl 安装docker curl -sSL https://get.daocloud.io/docker | sh 添加非root用户到docker group(这里是ubuntu) sudo usermod -aG docker ubuntu 设置daocloud加速 step1 在www.daocloud.io上注册一个账户

  • 快速安装Docker详细步骤教程

    目录 一.Docker的基本组成 1.Docker服务端和客户端 客户端-服务端(C/S) : 浏览器 - 服务端(B/S) : 2.Docker的基本组成 二.Docker的在线安装 三.Docker内网环境的离线安装 四.运行第一个容器 了解Docker是如何的与众不同,如此的蒂花之秀后,我们紧接着从Docker的基础循序渐进的讲解. 一.Docker的基本组成 1.Docker服务端和客户端 在对Docker的基本组成讲解之前,我们需要明白的是Docker是一个客户端-服务端(C/S)架构

  • Docker容器使用方法详解

    目录 一.新建并启动 一.新建并启动 所需要的命令主要为 dockerrun.例如,下⾯的命令输出⼀个“HelloWorld”,之后终⽌容器. $ docker run ubuntu:16.04 /bin/echo 'Hello world' Hello world 这跟在本地直接执⾏ /bin/echo 'hello world' ⼏乎感觉不出任何区别.下⾯的命令则启动⼀个 bash 终端,允许⽤户进⾏交互. $ docker run -t -i ubuntu:16.04 /bin/bash

  • C#资源释放方法实例分析

    本文实例讲述了C#资源释放方法.分享给大家供大家参考,具体如下: 1.try{}finally{} 2.using 只有类型实现了IDisposable接口并且重写Dispose()方法可以使用using语句实现资源释放. 首先来看MSDN中关于这个接口的说明: [ComVisible(true)] public interface IDisposable { // Methods void Dispose(); } 1.[ComVisible(true)]: 指示该托管类型对 COM 是可见的

  • docker-py 用Python调用Docker接口的方法

    官方文档:[https://docker-py.readthedocs.io/en/stable/images.html] 众所周知,Docker向外界提供了一个API来管理其中的资源.这个API可以是socket文件形式的(一般也是默认的,在/var/run/docker.sock中),也可以是TCP形式的.以前想要通过编程的方法来调用这些API还是傻傻的用subprocess等和系统层面交互的模块来调用,而docker-py这个模块则是直接把DockerAPI的调用封装了进去,让我们可以更加

  • 一文快速入门Docker推荐

    Docker提供一种安全.可重复的环境中自动部署软件的方式,拉开了基于与计算平台发展方式的变革序幕.如今Docker在互联网公司使用已经非常普遍.本文用十分钟时间,带你快速入门Docker. Docker是什么 Docker是什么? 官网首页的介绍: Enterprise Container Platform for High-Velocity Innovation. Securely build, share and run any application, anywhere 百度百科告诉我们

随机推荐