Docker使用Prune命令清理none鏡像

none鏡像的產生和困惑

我們偶爾會看到 none鏡像(虛懸鏡像),那是因為

  1. 構建鏡像過程中因為腳本錯誤導致很多鏡像構建終止,產生很多none標簽的版本
  2. 手動構建鏡像的時候沒有進行提交,遺留來的垃圾鏡像
  3. 這些鏡像占據較大的存儲空間,需要刪除

如下所示

root@instance-o70no2nw:~# docker images -a
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
<none>              <none>              867c2dc0031b        12 hours ago        465MB
mytomcat            8.5.0               34c8c864d046        12 hours ago        465MB
ubuntu              16.04               a3551444fc85        2 days ago          119MB
mysql               8.0.16              d72169616e20        4 days ago          443MB
mysql               latest              d72169616e20        4 days ago          443MB
tomcat              latest              5a069ba3df4d        2 weeks ago         465MB

如何清理none對象

Docker 采用保守的方法來清理未使用的對象(通常稱為“垃圾回收”),例如鏡像、容器、卷和網絡:
除非明確要求 Docker 這樣做,否則通常不會刪除這些對象。這可能會導致 Docker 使用額外的磁盤空間。
對於每種類型的對象,Docker 都提供瞭一條 prune 命令。
另外,可以使用 docker system prune一次清理多種類型的對象。本主題講解如何使用這些 prune 修剪命令

修剪鏡像

清理none鏡像(虛懸鏡像)
命令: docker image prune
默認情況下,docker image prune 命令隻會清理 虛無鏡像(沒被標記且沒被其它任何鏡像引用的鏡像)

root@instance-o70no2nw:~# docker image prune
WARNING! This will remove all dangling images.
Are you sure you want to continue? [y/N] y
Total reclaimed space: 0B

清理無容器使用的鏡像

命令: docker image prune -a

默認情況下,系統會提示是否繼續。要繞過提示,請使用 -f 或 –force 標志。
可以使用 –filter 標志使用過濾表達式來限制修剪哪些鏡像。例如,隻考慮 24 小時前創建的鏡像:

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

修剪容器

停止容器後不會自動刪除這個容器,除非在啟動容器的時候指定瞭 –rm 標志。使用 docker ps -a 命令查看 Docker 主機上包含停止的容器在內的所有容器。你可能會對存在這麼多容器感到驚訝,尤其是在開發環境。停止狀態的容器的可寫層仍然占用磁盤空間。要清理掉這些,可以使用 docker container prune 命令:

$ docker container prune

WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N] y

默認情況下,系統會提示是否繼續。要繞過提示,請使用 -f 或 –force 標志。

默認情況下,所有停止狀態的容器會被刪除。可以使用 –filter 標志來限制范圍。例如,下面的命令隻會刪除 24 小時之前創建的停止狀態的容器:

修剪卷

卷可以被一個或多個容器使用,並占用 Docker 主機上的空間。卷永遠不會被自動刪除,因為這麼做會破壞數據。

$ docker volume prune

WARNING! This will remove all volumes not used by at least one container.
Are you sure you want to continue? [y/N] y

修剪網絡

Docker 網絡不會占用太多磁盤空間,但是它們會創建 iptables 規則,橋接網絡設備和路由表條目。要清理這些東西,可以使用 docker network prune 來清理沒有被容器未使用的網絡。

$ docker network prune

修剪一切

docker system prune 命令是修剪鏡像、容器和網絡的快捷方式。在 Docker 17.06.0 及以前版本中,還好修剪卷。在 Docker 17.06.1 及更高版本中必須為 docker system prune 命令明確指定 –volumes 標志才會修剪卷。

$ docker system prune

WARNING! This will remove:
        - all stopped containers
        - all networks not used by at least one container
        - all dangling images
        - all build cache
Are you sure you want to continue? [y/N] y

如果使用 Docker 17.06.1 或更高版本,同時也想修剪卷,使用 –volumes 標志。

$ docker system prune --volumes

WARNING! This will remove:
        - all stopped containers
        - all networks not used by at least one container
        - all volumes not used by at least one container
        - all dangling images
        - all build cache
Are you sure you want to continue? [y/N] y

到此這篇關於Docker使用Prune命令清理none鏡像的文章就介紹到這瞭,更多相關Docker 清理none鏡像 內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: