- Docker技術入門與實戰(第3版)
- 楊保華 戴王劍 曹亞侖
- 998字
- 2018-11-08 18:34:12
3.4 刪除和清理鏡像
本節主要介紹Docker鏡像的rm和prune子命令。
1.使用標簽刪除鏡像
使用docker rmi或docker image rm命令可以刪除鏡像,命令格式為docker rmi IMAGE [IMAGE...],其中IMAGE可以為標簽或ID。
支持選項包括:
? -f, -force:強制刪除鏡像,即使有容器依賴它;
? -no-prune:不要清理未帶標簽的父鏡像。
例如,要刪除掉myubuntu:latest鏡像,可以使用如下命令:
$ docker rmi myubuntu:latest Untagged: myubuntu:latest
讀者可能會想到,本地的ubuntu:latest鏡像是否會受到此命令的影響。無須擔心,當同一個鏡像擁有多個標簽的時候,docker rmi命令只是刪除了該鏡像多個標簽中的指定標簽而已,并不影響鏡像文件。因此上述操作相當于只是刪除了鏡像0458a4468cbc的一個標簽副本而已。
保險起見,再次查看本地的鏡像,發現ubuntu:latest鏡像(準確地說,0458a4468cbc鏡像)仍然存在:
$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE Ubuntu 18.04452a96d81c30 5 weeks ago 79.6MB Ubuntu latest 452a96d81c30 5 weeks ago 79.6MB
但當鏡像只剩下一個標簽的時候就要小心了,此時再使用docker rmi命令會徹底刪除鏡像。
例如通過執行docker rmi命令來刪除只有一個標簽的鏡像,可以看出會刪除這個鏡像文件的所有文件層:
$ docker rmi busybox:latest Untagged: busybox:latest Untagged: busybox@sha256:1669a6aa7350e1cdd28f972ddad5aceba2912f589f19a090ac75b7083da748db Deleted: sha256:5b0d59026729b68570d99bc4f3f7c31a2e4f2a5736435641565d93e7c25bd2c3 Deleted: sha256:4febd3792a1fb2153108b4fa50161c6ee5e3d16aa483a63215f936a113a88e9a
2.使用鏡像ID來刪除鏡像
當使用docker rmi命令,并且后面跟上鏡像的ID(也可以是能進行區分的部分ID串前綴)時,會先嘗試刪除所有指向該鏡像的標簽,然后刪除該鏡像文件本身。
注意,當有該鏡像創建的容器存在時,鏡像文件默認是無法被刪除的,例如:先利用ubuntu:18.04鏡像創建一個簡單的容器來輸出一段話:
$ docker run ubuntu:18.04 echo 'hello! I am here! ' hello! I am here!
使用docker ps -a命令可以看到本機上存在的所有容器:
$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a21c0840213e ubuntu:18.04 "echo 'hello! I am he" About a minute ago Exited (0) About a minute ago romantic_euler
可以看到,后臺存在一個退出狀態的容器,是剛基于ubuntu:18.04鏡像創建的。
試圖刪除該鏡像,Docker會提示有容器正在運行,無法刪除:
$ docker rmi ubuntu:18.04 Error response from daemon: conflict: unable to remove repository reference "ubuntu:18.04" (must force) - container a21c0840213e is using its referenced image 8f1bd21bd25c
如果要想強行刪除鏡像,可以使用-f參數:
$ docker rmi -f ubuntu:18.04 Untagged: ubuntu:18.04 Deleted: sha256:8f1bd21bd25c3fb1d4b00b7936a73a0664f932e11406c48a0ef19d82fd0b7342
注意,通常并不推薦使用-f參數來強制刪除一個存在容器依賴的鏡像。正確的做法是,先刪除依賴該鏡像的所有容器,再來刪除鏡像。
首先刪除容器a21c0840213e:
$ docker rm a21c0840213e
然后使用ID來刪除鏡像,此時會正常打印出刪除的各層信息:
$ docker rmi 8f1bd21bd25c Untagged: ubuntu:18.04 Deleted: sha256:8f1bd21bd25c3fb1d4b00b7936a73a0664f932e11406c48a0ef19d82fd0b7342 Deleted: sha256:8ea3b9ba4dd9d448d1ca3ca7afa8989d033532c11050f5e129d267be8de9c1b4 Deleted: sha256:7db5fb90eb6ffb6b5418f76dde5f685601fad200a8f4698432ebf8ba80757576 Deleted: sha256:19a7e879151723856fb640449481c65c55fc9e186405dd74ae6919f88eccce75 Deleted: sha256:c357a3f74f16f61c2cc78dbb0ae1ff8c8f4fa79be9388db38a87c7d8010b2fe4 Deleted: sha256:a7e1c363defb1f80633f3688e945754fc4c8f1543f07114befb5e0175d569f4c
3.清理鏡像
使用Docker一段時間后,系統中可能會遺留一些臨時的鏡像文件,以及一些沒有被使用的鏡像,可以通過docker image prune命令來進行清理。
支持選項包括:
? -a, -all:刪除所有無用鏡像,不光是臨時鏡像;
? -filter filter:只清理符合給定過濾器的鏡像;
? -f, -force:強制刪除鏡像,而不進行提示確認。
例如,如下命令會自動清理臨時的遺留鏡像文件層,最后會提示釋放的存儲空間:
$ docker image prune -f ... Total reclaimed space: 1.4 GB
- Functional Python Programming
- Getting Started with Gulp(Second Edition)
- .NET 4.0面向對象編程漫談:基礎篇
- Spring實戰(第5版)
- WordPress Plugin Development Cookbook(Second Edition)
- 面向對象程序設計(Java版)
- RabbitMQ Essentials
- 案例式C語言程序設計實驗指導
- 智能手機故障檢測與維修從入門到精通
- 軟件體系結構
- C++程序設計教程
- 監控的藝術:云原生時代的監控框架
- Mastering Drupal 8
- Apache Solr for Indexing Data
- Design Patterns and Best Practices in Java