Apollo深度磁盤清理

摘要

在Apollo的使用過程當中,會出現磁盤空間不足的狀況,Apollo的官方提供的方法是刪除apollo/data/log或者刪除apollo/data/bag文件。可是即便刪除了這些,磁盤空間並無徹底恢復。這是因爲docker的一些文件佔用了很是多的磁盤空間。在這裏我提供了一些docker文件的清理辦法。對於再也不使用的對象如鏡像、容器、volumes以及網絡 Docker採起的是被動清理(類比垃圾回收)機制:除非使用docker提供的命令手動進行清理,不然它們通常是不會被清除掉。這些沒有使用的對象固然會佔用額外寶貴的空間資源。Docker爲不一樣的對象提供了各自的對象清理命令prune;另外還提供了docker system prune命令可一次性清理多個未使用對象。今天要討論的就是這些關於對象清理的命令:prune。(這些內容來源於網絡,可是我忘記了來源,因此沒有貼出網址,若是哪位做者發現是本身的原創,能夠通知我,我會把引用的出處貼出來。)javascript

Prune Images

    命令 docker image prune 用以清理再也不使用的docker鏡像。執行docker image prune默認會清除"懸空"鏡像。什麼是「懸空」鏡像?就是既沒有標籤名也沒有容器引用的鏡像就叫"懸空"鏡像。具體操做以下:java

  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 標誌就能夠搞定:docker

  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 pruneui

Prune containers

    若是容器啓動時沒有指定--rm選項,容器中止時是不可以自動清除的。有時候咱們無所事事的敲下docker ps -a命令會驚奇的發現,天哪,竟然有這麼多容器,有運行着的也有中止了的。它們是哪裏來的?它們到底還有沒有人在關注?這種狀況在一個開發環境上尤爲常見。要知道,即便容器已經停掉了也會佔用空間資源。好吧,讓咱們用 docker container prune命令來結束這些一團糟的東西吧:spa

  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, 這裏有更多的詳細的例子。ip

prune volumes

    Volumes可被一個或多個容器使用會消耗host端的空間,但它不會自動清理,由於那樣就有可能破壞掉有用的數據。ci

  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  
相關文章
相關標籤/搜索