【Docker基礎】Docker鏡像管理:docker rmi、prune詳解

目錄

引言

1 Docker鏡像管理概述

1.1 為什么需要鏡像清理?

1.2 鏡像生命周期管理

2 docker rmi命令詳解

2.1 基本語法

2.2 常用選項

2.3 刪除單個鏡像

2.4 刪除多個鏡像

2.5 強制刪除鏡像

2.6 刪除所有鏡像

3 docker rmi工作原理

3.1 鏡像刪除流程

3.2 鏡像分層刪除機制

4 docker prune命令詳解

4.1 docker image prune

4.2 刪除懸空鏡像

4.3 刪除所有未被使用的鏡像

4.4 使用過濾條件

4.5 系統級清理

5 docker prune工作原理

5.1 資源清理流程

5.2 資源識別機制

6 實踐應用場景

6.1 日常維護腳本

6.2 開發環境空間回收

7 安全操作示例

7.1 刪除鏡像前的檢查

7.2 重要鏡像保護

7.3 定期清理策略

7.4 空間監控

8 常見問題與解決方案

8.1 刪除鏡像時報錯"image is referenced in multiple repositories"

8.2 刪除鏡像后磁盤空間未釋放

8.3 誤刪了重要鏡像

8.4 prune命令刪除了需要保留的資源

9 總結


引言

在Docker的日常使用中,鏡像管理是至關重要的環節,隨著開發和部署的進行,系統中會積累大量鏡像,這些鏡像占用磁盤空間并可能造成管理混亂。本文將探討兩個關鍵的鏡像管理命令:docker rmi和docker prune。

1 Docker鏡像管理概述

1.1 為什么需要鏡像清理?

Docker鏡像采用分層存儲結構,這種設計雖然提高了存儲效率,但也帶來了以下問題:
  • 磁盤空間占用:鏡像會隨時間積累,占用大量磁盤空間
  • 版本混亂:同一鏡像的多個版本可能同時存在
  • 安全隱患:過時的鏡像可能包含已知漏洞

1.2 鏡像生命周期管理

理解鏡像的生命周期有助于我們更好地管理Docker環境,從上圖可以看出,docker rmi和docker prune處于生命周期的末端,負責清理不再需要的鏡像

2 docker rmi命令詳解

docker rmi(Remove Image)命令用于刪除一個或多個Docker鏡像。

2.1 基本語法

docker rmi [OPTIONS] IMAGE [IMAGE...]

2.2 常用選項

選項

說明

-f, --force

強制刪除鏡像,即使有容器正在使用它

--no-prune

不刪除未被標記的父鏡像

2.3 刪除單個鏡像

docker rmi ubuntu:20.04

2.4 刪除多個鏡像

docker rmi ubuntu:20.04 nginx:latest

2.5 強制刪除鏡像

  • 當鏡像被容器使用時,需要添加-f參數:
docker rmi -f ubuntu:20.04

2.6 刪除所有鏡像

  • 結合docker images -q可以刪除所有鏡像:
docker rmi $(docker images -q) 
#危險操作警告:這會刪除所有本地鏡像,請謹慎使用!

3 docker rmi工作原理

3.1 鏡像刪除流程

  • 用戶通過Docker客戶端發出docker rmi命令
  • Docker客戶端將請求發送給Docker守護進程
  • 守護進程檢查鏡像是否被容器使用
  • 如果沒有容器使用,則解除鏡像引用并刪除未引用的層
  • 如果有容器使用且沒有-f參數,則返回錯誤
  • 最終將操作結果返回給用戶

3.2 鏡像分層刪除機制

Docker鏡像由多個只讀層組成,刪除鏡像時:
  • 首先移除該鏡像的標簽引用
  • 然后檢查各層是否還被其他鏡像引用
  • 只有不被任何鏡像引用的層才會被實際刪除
如果刪除鏡像A:
  • 層1會被刪除(僅被A引用)
  • 層2會被保留(還被鏡像B引用)
  • 鏡像A的標簽被移除

4 docker prune命令詳解

docker prune是一組用于清理Docker資源的命令,我們主要關注鏡像相關的清理。

4.1 docker image prune

  • 刪除未被使用的鏡像(懸空鏡像):
docker image prune [OPTIONS]
  • 常用選項:

選項

說明

-a, --all

刪除所有未被容器使用的鏡像(不只是懸空鏡像)

--filter

提供過濾條件

-f, --force

不提示確認

4.2 刪除懸空鏡像

docker image prune

4.3 刪除所有未被使用的鏡像

docker image prune -a

4.4 使用過濾條件

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

4.5 系統級清理

  • docker system prune可以一次性清理多種Docker資源:
docker system prune [OPTIONS]
  • 常用選項:

選項

說明

-a, --all

刪除所有未使用的鏡像(不只是懸空鏡像)

--volumes

同時刪除未使用的卷

-f, --force

不提示確認

5 docker prune工作原理

5.1 資源清理流程

  • 根據命令參數確定清理范圍(鏡像、容器、網絡、卷等)
  • 掃描系統中所有相關資源
  • 識別符合刪除條件的資源(未被使用、懸空等)
  • 如果沒有-f參數,則提示用戶確認
  • 執行實際刪除操作
  • 釋放磁盤空間
  • 操作完成

5.2 資源識別機制

  • docker prune識別未使用資源的標準:

資源類型

判斷標準

懸空鏡像

沒有標簽且不被任何鏡像引用的鏡像層

未使用鏡像

沒有被任何容器(包括停止的)使用的鏡像

停止的容器

狀態為Exited的容器

未使用的網絡

沒有被任何容器使用的自定義網絡

未使用的卷

沒有被任何容器引用的卷

6 實踐應用場景

6.1 日常維護腳本

  • 可以創建定期執行的清理腳本:
#!/bin/bash# 刪除所有停止的容器
docker container prune -f# 刪除所有未被使用的網絡
docker network prune -f# 刪除所有懸空鏡像
docker image prune -f# 刪除超過一周前的未使用鏡像
docker image prune -a --force --filter "until=168h"

6.2 開發環境空間回收

  • 當開發環境磁盤空間不足時:
# 全面清理所有未使用資源(包括未使用的卷) 
docker system prune -af --volumes

7 安全操作示例

7.1 刪除鏡像前的檢查

在刪除鏡像前,建議先檢查:
  • 哪些容器在使用該鏡像:
docker ps -a --filter ancestor=IMAGE_NAME
  • 鏡像的詳細信息:
docker ps -a --filter ancestor=IMAGE_NAME

7.2 重要鏡像保護

對于重要鏡像,可以:
  • 推送到鏡像倉庫備份
  • 使用docker save導出為文件:
docker save -o backup.tar IMAGE_NAME

7.3 定期清理策略

建議建立定期清理策略:
  • 每天清理懸空鏡像
  • 每周清理未使用的鏡像
  • 每月全面清理整個系統

7.4 空間監控

  • 設置磁盤空間監控,當Docker占用超過閾值時觸發清理:
# 檢查Docker磁盤使用情況 
docker system df

8 常見問題與解決方案

8.1 刪除鏡像時報錯"image is referenced in multiple repositories"

問題原因:同一個鏡像ID有多個標簽引用
解決方案
  • 先刪除所有引用該鏡像的標簽:
docker rmi repo1:tag repo2:tag
  • 或者使用鏡像ID刪除:
docker rmi IMAGE_ID

8.2 刪除鏡像后磁盤空間未釋放

問題原因:Docker使用存儲驅動可能緩存了數據
解決方案
  • 重啟Docker服務:
systemctl restart docker
  • 清理構建緩存:
docker builder prune

8.3 誤刪了重要鏡像

恢復方案
  • 如果鏡像來自倉庫,重新拉取
  • 如果有容器基于該鏡像運行,可以提交容器為新鏡像:
docker commit CONTAINER_ID new_image_name

8.4 prune命令刪除了需要保留的資源

預防措施
  • 執行前先使用--dry-run查看將刪除的內容:
docker system prune --dry-run
  • 使用--filter精確控制刪除范圍

9 總結

通過合理使用docker rmi和docker prune命令,可以有效管理Docker鏡像,保持系統清潔和高效運行。記住定期清理未使用的資源,但也要謹慎操作,避免誤刪重要鏡像。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/87919.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/87919.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/87919.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

57-Oracle SQL Profile(23ai)實操

在上一期中說到了SQL Tuning Advisor其中一個影響對象就是SQL Profile,同樣在管理和應用開發中,SQL性能優化是個任重道遠的工作,低效的SQL語句讓應用響應緩慢,用戶整體體驗下降,拖垮搞蹦整個系統都有可能。Oracle數據庫提供了多種組合工具,有…

man的使用

man的使用 文章目錄 man的使用基本用法:常見 man 命令操作:man 命令的章節:示例: man 是 Linux 和 macOS 系統中的命令,用于查看命令和程序的手冊頁(manual pages)。手冊頁包含了關于命令、函…

【藍牙】手機連接Linux系統藍牙配對,Linux Qt5分享PDF到手機

要實現手機連接 A40i Linux 系統并通過藍牙接收 PDF 文件,可以按照以下步驟操作: 1. 配置 Linux 藍牙功能 確保開發板上的藍牙模塊已正確驅動并支持藍牙協議棧。 安裝藍牙工具: bash sudo apt install bluetooth bluez bluez-tools 啟動藍…

1432. 改變一個整數能得到的最大差值

1432. 改變一個整數能得到的最大差值 題目鏈接&#xff1a;1432. 改變一個整數能得到的最大差值 代碼如下&#xff1a; class Solution { public:int maxDiff(int num) {string s to_string(num);function<int(char, char)> replace_stoi [&](char old_char, cha…

解密 Spring MVC:從 Tomcat 到 Controller 的一次完整請求之旅

今天&#xff0c;想和你聊一個我們每天都在打交道&#xff0c;但可能不曾深入思考的話題&#xff1a;當一個 HTTP 請求從瀏覽器發出&#xff0c;到最終被我們的 Spring Controller 處理&#xff0c;它到底經歷了一場怎樣的旅程&#xff1f; 理解這個流程&#xff0c;不僅僅是為…

在 Java 中操作 Map時,高效遍歷和安全刪除數據

在 Java 中操作 Map 時&#xff0c;高效遍歷和安全刪除數據可以通過以下方式實現&#xff1a; 一、遍歷 Map 的 4 種高效方式 1. 傳統迭代器&#xff08;Iterator&#xff09; Map<String, Integer> map new HashMap<>(); map.put("key1", 5); map.pu…

力扣-136.只出現一次的數字

題目描述 給你一個 非空 整數數組 nums &#xff0c;除了某個元素只出現一次以外&#xff0c;其余每個元素均出現兩次。找出那個只出現了一次的元素。 你必須設計并實現線性時間復雜度的算法來解決此問題&#xff0c;且該算法只使用常量額外空間。 class Solution {public i…

Go 網絡編程:HTTP服務與客戶端開發

Go 在標準庫中內置了功能強大的 net/http 包&#xff0c;可快速構建高并發、高性能的 HTTP 服務&#xff0c;廣泛應用于微服務、Web后端、API中間層等場景。 一、快速創建一個HTTP服務 示例&#xff1a;最簡Hello服務 package mainimport ("fmt""net/http&quo…

【Prism】 實現注入的幾個標準化步驟(相機舉例)

?? Prism 架構中如何優雅地注冊和注入相機服務 在開發基于 Prism + WPF 的應用時,合理使用依賴注入(DI)可以大大提高系統的可維護性和擴展性。本文以一個多相機平臺管理系統為例,展示如何通過接口、枚舉、容器注冊等方式,實現相機服務的靈活配置與使用。 ?? 一、定義…

vue3組件式開發示例

1&#xff0c;定義組件&#xff08;根據實際調整提交分析結果方法&#xff09; <template><!-- 分析結果上傳對話框組件 --><el-dialogv-model"uploadResultDialog":title"title":width"width":before-close"handleBeforeC…

基于arm linux的bluealsa開啟藍牙A2DP和SCO錄音功能

bluealsa的軟件架構 #mermaid-svg-ohITacCRHItwRR1t {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-ohITacCRHItwRR1t .error-icon{fill:#552222;}#mermaid-svg-ohITacCRHItwRR1t .error-text{fill:#552222;stroke:…

網頁后端開發(基礎3--Springboot框架)

web的服務器資源&#xff1a; 靜態資源&#xff1a;服務器上存儲的不會改變的數據&#xff0c;通常不會根據用戶的請求而變化。比如&#xff1a;HTML、CSS、JS、圖片、視頻等&#xff08;負責頁面展示&#xff09; 動態資源&#xff1a;服務器端根據用戶請求和其他數據…

ROS通過urdf_to_graphiz對urdf和xacro文件進行結構可視化

對機器人的urdf文件進行結構可視化&#xff1a; 舉例命令如下&#xff1a; urdf_to_graphiz go2_description.urdf 輸出 .gv 和 .pdf文件&#xff0c;打開 pdf文件如圖&#xff1a;

基于Uniapp+PHP的教育培訓系統開發指南:網校源碼實戰剖析

在線教育日益普及的今天&#xff0c;如何快速搭建一個功能完善、體驗良好的教育培訓系統&#xff0c;成為眾多教育機構、培訓企業、個體講師關注的焦點。與其從零開發&#xff0c;不如基于成熟框架快速部署。而UniappPHP正是當前“低成本高效率”開發網校系統的黃金組合。 本文…

鍵盤 AK35I Pro V2 分析

文章目錄 AK35I Pro V21. MCU SN32F299SN32F299 內存映射 2. Bootloader3. TFT 135x240 1.14inch4. 鍵盤5. Flash PY25Q128HA6. 藍牙 CH582F7. 擴展板8. 電池 606090 3.7V 4000mAh AK35I Pro V2 AK35I Pro V2 測評視頻 鍵盤外殼使用卡扣固定, 外殼沒有螺絲, 將外框向外翹起, 用…

11. TypeScript 工具類型

TypeScript 提供了一系列內置的“工具類型”&#xff08;Utility Types&#xff09;&#xff0c;它們是對已有類型進行變換的便捷方式。通過這些工具類型&#xff0c;開發者可以更靈活、可維護地進行類型設計&#xff0c;避免重復定義類型邏輯。 工具類型的作用主要有&#xf…

Kafka性能調優全攻略:從JVM參數到系統優化

前言 在大數據處理領域&#xff0c;Kafka以其高吞吐、高并發的特性成為消息隊列的首選。然而&#xff0c;隨著業務規模的擴大和數據量的激增&#xff0c;若配置不當&#xff0c;Kafka的性能和穩定性會受到嚴重影響。其中&#xff0c;JVM參數的調整是優化Kafka性能的關鍵一環&a…

HarmonyOS 5 NPU支持哪些AI框架?

以下是HarmonyOS 5 NPU支持的AI框架及適配方案&#xff0c;結合關鍵技術和實測數據&#xff1a; 一、原生支持框架 MindSpore Lite? ?核心特性?&#xff1a; 原生適配昇騰達芬奇架構&#xff0c;支持INT8/FP16混合量化自動算子融合優化&#xff08;實測推理速度提升3.2倍…

鴻蒙uvc預覽

簡單查看流程&#xff0c;如有錯誤請指出。 CameraNativePreview.ets--> 這里開始進入uvc_camera庫 (CameraDevice.ets/CameraManager.ets) --> CameraUtils.ets--> -->CameraNativeMethods(index.d.ts文件&#xff0c;路徑: uvc_camera\src\main\cpp\types\…

PHP的打印語句

文章目錄 環境總結打印語句換行符括號數組&#xff08;對象&#xff09;和字符串之間的相互轉換 打印語句echoprint括號print_rvar_dump 數組&#xff08;對象&#xff09;和字符串之間的轉換json_encodejson_decodeimplodeexplode 環境 PHP 8.4.5 總結 如果不想看詳細介紹&…