• Apollo深度磁盘清理


    摘要

    在Apollo的使用过程中,会出现磁盘空间不足的情况,Apollo的官方提供的方法是删除apollo/data/log或者删除apollo/data/bag文件。但是即使删除了这些,磁盘空间并没有完全恢复。这是由于docker的一些文件占用了非常多的磁盘空间。在这里我提供了一些docker文件的清理办法。对于不再使用的对象如镜像、容器、volumes以及网络 Docker采取的是被动清理(类比垃圾回收)机制:除非使用docker提供的命令手动进行清理,否则它们一般是不会被清除掉。这些没有使用的对象当然会占用额外宝贵的空间资源。Docker为不同的对象提供了各自的对象清理命令prune;另外还提供了docker system prune命令可一次性清理多个未使用对象。今天要讨论的就是这些关于对象清理的命令:prune。(这些内容来源于网络,但是我忘记了来源,所以没有贴出网址,如果哪位作者发现是自己的原创,可以通知我,我会把引用的出处贴出来。)

    Prune Images

        命令 docker image prune 用以清理不再使用的docker镜像。执行docker image prune默认会清除"悬空"镜像。什么是“悬空”镜像?就是既没有标签名也没有容器引用的镜像就叫"悬空"镜像。具体操作如下:

    1. $ docker image prune  
    2.   
    3. WARNING! This will remove all dangling images.  
    4. Are you sure you want to continue? [y/N] y  

        有时侯我们想要清除所有没有容器引用的镜像,增加一个 -a 标志就可以搞定:

    1. $ docker image prune -a  
    2.   
    3. WARNING! This will remove all images without at least one container associated to them.  
    4. Are you sure you want to continue? [y/N] y  

        清除操作会提醒你是否真心想要清除对象,默认是选项会是yes;但是如果你嫌提示麻烦,可以通过-f 或者--force标志来进行强制清除。
        更加人性化的是,Docker提供了--filter标志筛选出想要保留的镜像。例如:只清除超过创建时间超过24小时的镜像可以这样来操作:

    1. $ docker image prune -a --filter "until=24h"  

        当然还能够通过其他的表达式来定制我的镜像清理计划。更多的示例参考docker image prune

    Prune containers

        如果容器启动时没有指定--rm选项,容器停止时是不能够自动清除的。有时候我们无所事事的敲下docker ps -a命令会惊奇的发现,天哪,居然有这么多容器,有运行着的也有停止了的。它们是哪里来的?它们到底还有没有人在关注?这种情况在一个开发环境上尤其常见。要知道,即使容器已经停掉了也会占用空间资源。好吧,让我们用 docker container prune命令来结束这些一团糟的东西吧:

    1. $ docker container prune  
    2.   
    3. WARNING! This will remove all stopped containers.  
    4. Are you sure you want to continue? [y/N]   

        和镜像清理的情况一样,也会有提示信息告诉你是否继续,默认是yes;如果提示信息烦到了你的话就加上 -f 或者 --force标志强制清除就可以了。
        默认情况下docker container prune命令会清理掉所有处于stopped状态的容器;如果不想那么残忍统统都删掉,也可以使用--filter标志来筛选出不希望被清理掉的容器。下面是一个筛选的例子,清除掉所有停掉的容器,但24内创建的除外:

    1. $ docker container prune --filter "until=24h"  

        其他的筛选条件的实现可以参考:docker container prune reference, 这里有更多的详细的例子。

    prune volumes

        Volumes可被一个或多个容器使用会消耗host端的空间,但它不会自动清理,因为那样就有可能破坏掉有用的数据。

    1. $ docker volume prune  
    2.   
    3. WARNING! This will remove all volumes not used by at least one container.  
    4. Are you sure you want to continue? [y/N] y  

        和conatiner一样,手动清理Volume时会有提示信息,增加-f 或--force标志可以跳过提示信息直接清理。使用过滤参数--filter来筛选出不希望清理的无用Volume,否则默认会将所有没有使用的volumes都清理掉。下面的例子演示了除lable=keep外的volume外都清理掉(没有引用的volume):

    1. $ docker volume prune --filter "label!=keep"  

        其他的筛选条件的实现可以参考:docker volume prune reference,这里给出了更多参考示例。

    prune networks

        虽然Docker networks占用的空间不多,但是它会创建iptable 规则、虚拟网桥设备以及路由表项,有洁癖的你看到这么多"僵尸"对象会不会抓狂?当然,我们还是要用清理神器:docker network prune 来清理没有再被任何容器引用的networks:

    1. $ docker network prune  
    2.   
    3. WARNING! This will remove all networks not used by at least one container.  
    4. Are you sure you want to continue? [y/N] y  

        可以通过 -f 或者 --force标志跳过提示信息来强制执行该命令。默认情况会清除所有没有再被引用的networks,如果想要过滤一些特定的networks,可以使用--filter来实现。下面这个例子就是通过--filter来清理没有被引用的、创建超过24小时的networks:

    1. $ docker network prune --filter "until=24h"  

        更多关于docker network的--filter的筛选条件可参考示例:docker network prune reference 。

    prune everything

        如题,这里要讲的就是清理everything:images ,containers,networks一次性清理操作可以通过docker system prune来搞定。在Docker 17.06.0 以及更早的版本中,这个docker system prune也会将volume一起清理掉;在Docker 17.06.1以及后期的版本中则必须要手动指定--volumes标志才能够清理掉volumes:

    1. $ docker system prune  
    2.   
    3. WARNING! This will remove:  
    4.         - all stopped containers  
    5.         - all networks not used by at least one container  
    6.         - all dangling images  
    7.         - all build cache  
    8. Are you sure you want to continue? [y/N] y  

        在Docker 17.06.1或更高版本中添加--volumes标志的情况:

    1. $ docker system prune --volumes  
    2. WARNING! This will remove:  
    3.         - all stopped containers  
    4.         - all networks not used by at least one container  
    5.         - all volumes not used by at least one container  
    6.         - all dangling images  
    7.         - all build cache  
    8. Are you sure you want to continue? [y/N] y  
  • 相关阅读:
    beginAppearanceTransition
    runtime基础
    UIStoryboard跳转界面
    xcode所有版本下载地址
    UIImage添加滤镜
    苹果copy等其他的英文改成中文
    UITextField输入中文
    keyboard添加down按钮
    2020-07-08:mysql只有一个表a,什么情况下会造成死锁,解决办法是什么?
    2020-07-05:tcp和udp的区别和应用场景。如何实现断点续传?
  • 原文地址:https://www.cnblogs.com/hgl0417/p/9399998.html
Copyright © 2020-2023  润新知