【Docker基礎】Docker鏡像管理:docker pull詳解

目錄

1 Docker鏡像基礎概念

1.1 什么是Docker鏡像?

1.2 鏡像與容器的關系

1.3 鏡像倉庫(Registry)

2 docker pull命令詳解

2.1 基本語法

2.2 參數解釋

2.3 拉取鏡像的基本流程

2.4 鏡像分層結構解析

3 docker pull實戰指南

3.1 基本使用示例

3.2 指定鏡像標簽

3.3 使用鏡像摘要(DIGEST)

3.4 拉取多平臺鏡像

3.5 批量拉取所有標簽

4 鏡像拉取優化技巧

4.1 使用國內鏡像加速器

4.2 只下載鏡像不拉取

4.3 清理未使用的鏡像

4.4 查看鏡像下載進度

5 常見問題與解決方案

5.1 拉取鏡像速度慢

5.2 拉取鏡像時報錯"manifest unknown"

5.3 拉取鏡像時報錯"no space left on device"

5.4 如何驗證下載的鏡像完整性

6 深入理解鏡像拉取機制

6.1 鏡像拉取的底層實現

6.2 鏡像拉取的并發下載

6.3 鏡像拉取的重試機制

7 總結


1 Docker鏡像基礎概念

1.1 什么是Docker鏡像?

Docker鏡像是一個 輕量級、獨立、可執行的軟件包,它包含了運行某個軟件所需的一切:代碼、運行時環境、系統工具、系統庫和設置。鏡像采用分層存儲結構,每一層都可以被復用,這使得鏡像非常高效且占用空間小。

1.2 鏡像與容器的關系

鏡像和容器是Docker中最核心的兩個概念,它們的關系可以類比為:
  • 鏡像:相當于面向對象編程中的"類"(Class)
  • 容器:相當于"實例"(Instance)
當鏡像被運行時,它就變成了一個容器,你可以從一個鏡像創建多個容器,就像可以從一個類創建多個對象實例一樣

1.3 鏡像倉庫(Registry)

  • Docker鏡像存儲在鏡像倉庫中,主要有兩種類型:公共倉庫與私有倉庫
  • 鏡像倉庫允許用戶存儲、分享和分發Docker鏡像,docker pull就是從這些倉庫中拉取鏡像到本地的主要命令

2 docker pull命令詳解

docker pull是Docker中最基礎也是最重要的命令之一,它用于從鏡像倉庫中拉取或下載鏡像到本地。

2.1 基本語法

docker pull [OPTIONS] NAME[:TAG|@DIGEST]

2.2 參數解釋

參數

說明

NAME

鏡像名稱,格式通常為[倉庫URL/]用戶名/鏡像名

TAG

鏡像標簽,默認為latest

DIGEST

鏡像的內容哈希值,用于精確指定某個鏡像版本

--all-tags, -a

下載倉庫中所有標記的鏡像

--disable-content-trust

跳過鏡像驗證(默認為true)

--platform

指定平臺,如linux/amd64, linux/arm64等

--quiet, -q

安靜模式,只顯示鏡像ID

2.3 拉取鏡像的基本流程

  • docker pull命令執行時的內部流程:
  • 用戶通過Docker客戶端發出docker pull命令
  • Docker客戶端將請求發送給Docker守護進程
  • 守護進程聯系鏡像倉庫,首先獲取鏡像的manifest文件
  • 根據manifest中的信息,逐個下載鏡像的各個層(layer)
  • 下載完成后,在本地組裝這些層,形成完整的鏡像
  • 將結果返回給客戶端,最終顯示給用戶

2.4 鏡像分層結構解析

Docker鏡像采用分層存儲結構,每一層都是只讀的,當拉取鏡像時,實際上是在下載多個層。這種設計帶來了幾個優勢:
  • 存儲效率:不同鏡像可以共享相同的層
  • 傳輸效率:如果本地已有某些層,只需下載缺失的層
  • 構建速度:構建鏡像時,未更改的層可以被緩存和復用

3 docker pull實戰指南

3.1 基本使用示例

  • 從Docker Hub拉取官方鏡像
docker pull ubuntu:20.04
  • 從Docker Hub拉取用戶鏡像
docker pull username/repository:tag
  • 從私有倉庫拉取鏡像
docker pull myregistry.example.com:5000/ubuntu:20.04

3.2 指定鏡像標簽

  • 鏡像標簽(TAG)用于標識同一鏡像的不同版本,如果不指定標簽,默認使用latest
# 拉取最新的nginx鏡像
docker pull nginx# 拉取特定版本的nginx
docker pull nginx:1.21.6# 拉取alpine精簡版的nginx
docker pull nginx:1.21.6-alpine

3.3 使用鏡像摘要(DIGEST)

  • 標簽可能會被更新指向不同的鏡像,而摘要(DIGEST)是鏡像內容的唯一標識符,可以確保每次拉取的都是完全相同的鏡像
# 先獲取鏡像的摘要信息
docker pull nginx:1.21.6
docker images --digests | grep nginx# 使用摘要拉取鏡像
docker pull nginx@sha256:644a70516a26004c97d0d85c7fe1d0c3a67ea8ab7ddf4aff193d9f301670cf36

3.4 拉取多平臺鏡像

  • Docker支持多平臺鏡像,可以使用--platform參數指定目標平臺:
docker pull --platform linux/arm64 ubuntu:20.04

3.5 批量拉取所有標簽

docker pull --all-tags ubuntu 
# 注意:這會下載該倉庫中的所有鏡像,可能會消耗大量帶寬和存儲空間

4 鏡像拉取優化技巧

4.1 使用國內鏡像加速器

在國內直接拉取Docker Hub的鏡像可能會很慢,可以配置國內鏡像加速器:
  • 編輯或創建/etc/docker/daemon.json
  • 添加以下內容:
{"registry-mirrors": ["https://registry.docker-cn.com","https://hub-mirror.c.163.com","https://mirror.baidubce.com"]
}
  • 重啟Docker服務:
systemctl daemon-reload 
systemctl restart docker

4.2 只下載鏡像不拉取

  • 如果只想查看鏡像信息而不實際下載,可以使用:
docker manifest inspect ubuntu:20.04

4.3 清理未使用的鏡像

  • 定期清理未使用的鏡像可以節省磁盤空間:
docker image prune

4.4 查看鏡像下載進度

  • 默認情況下,docker pull會顯示詳細的下載進度。如果需要更簡潔的輸出,可以使用-q參數:
docker pull -q ubuntu:20.04

5 常見問題與解決方案

5.1 拉取鏡像速度慢

可能原因
  • 網絡連接問題
  • 鏡像服務器在國外
  • 本地DNS解析問題
解決方案
  • 使用國內鏡像加速器
  • 檢查網絡連接
  • 更換DNS服務器,如使用8.8.8.8或114.114.114.114

5.2 拉取鏡像時報錯"manifest unknown"

可能原因
  • 鏡像名稱拼寫錯誤
  • 指定的標簽不存在
  • 私有鏡像需要登錄
解決方案
  • 檢查鏡像名稱和標簽是否正確
  • 訪問鏡像倉庫網站確認可用標簽
  • 對于私有鏡像,先執行docker login

5.3 拉取鏡像時報錯"no space left on device"

可能原因
  • Docker存儲空間不足
  • 系統磁盤空間不足
解決方案
  • 清理未使用的鏡像和容器
  • 調整Docker存儲驅動配置
  • 增加系統磁盤空間

5.4 如何驗證下載的鏡像完整性

  • Docker默認會驗證鏡像的完整性。你也可以手動驗證:
docker trust inspect --pretty ubuntu:20.04

6 深入理解鏡像拉取機制

6.1 鏡像拉取的底層實現

當執行docker pull時,Docker實際上執行了以下操作:
  • 解析鏡像名稱:確定要使用的registry、repository和tag
  • 獲取認證令牌:如果需要認證,從認證服務器獲取令牌
  • 下載manifest:獲取鏡像的配置和層信息
  • 下載各層數據:并行下載各個層(layer)
  • 驗證層數據:檢查每個層的校驗和
  • 組裝鏡像:將所有層組合成完整的鏡像

6.2 鏡像拉取的并發下載

  • Docker會并行下載鏡像的各個層以提高下載速度,可以通過以下方式優化:
# 查看當前下載并發數
docker info | grep -i concurrent# 通過修改daemon.json調整并發下載數
{"max-concurrent-downloads": 3
}

6.3 鏡像拉取的重試機制

  • Docker內置了下載失敗的重試機制,默認情況下會嘗試5次,可以通過以下配置調整:
{"max-download-attempts": 10
}

7 總結

docker pull是Docker中最基礎也是最重要的命令之一,理解其工作原理和最佳實踐對于高效使用Docker至關重要。了解它能夠更加高效、安全地管理Docker鏡像,為容器化應用打下堅實的基礎。

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

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

相關文章

PixPin:一個強大且免費的截圖貼圖工具

PixPin 是一款國產免費的截圖工具,支持屏幕截圖、屏幕錄制(GIF)、文字識別(OCR)以及貼圖等功能。 高效截圖 PixPin 支持自由選擇或自動檢測窗口,自定義截圖區域,像素級精確捕捉,延時…

【測試報告】論壇系統

一、項目背景 1.1 測試目標及測試任務 測試目標旨在保障功能無漏洞、流程順暢,實現多端顯示交互一致,達成高并發場景下響應時間<2 秒等性能指標,抵御 SQL 注入等安全攻擊,提升 UI 易用性與提示友好度; 背…

30天pytorch從入門到熟練(day1)

一、總體工作思路 本項目采用“從零構建”的策略,系統性地開展了深度學習模型的開發與優化工作。其目標在于通過全流程自研方式,深入理解模型構建、訓練優化、推理部署的關鍵技術環節。整體路徑分為以下核心階段: 模型初步構建:以…

Subway Surfers Blast × 亞矩陣云手機:手游矩陣運營的終極變現方案

引爆全球:Subway Surfers Blast的流量紅利?? 隨著Sybo Games最新力作《Subway Surfers Blast》全球上線,這款休閑消除游戲迅速席卷各大應用商店榜單。對于手游推廣者而言,如何高效獲取這波流量紅利???亞矩陣云手機專業手游推…

mysql join的原理及過程

連接過程 每獲得一條驅動表記錄,就立即到被驅動表尋找匹配的記錄。 對于兩表連接來說,驅動表只會被訪問一遍,但被驅動表卻要被訪問好多遍;具體訪問幾遍取決于對驅動表執行單表查詢后的結果集中有多少條記錄。 ? 對于內連接來說&#xff0…

Hologres的EXPLAIN和EXPLAIN ANALYZE簡介

文章目錄 一、執行計劃1、概念簡介2、使用方式①、EXPLAIN②、EXPLAIN ANALYZE 二、算子解讀1、SCAN2、Index Scan和 Index Seek3、Filter4、Decode5、Redistribution6、Join7、Broadcast8、Shard prune和Shards selected9、ExecuteExternalSQL10、Aggregate11、Sort12、Limit1…

49-Oracle init.ora-PFILE-SPFILE-啟動參數轉換實操

一早出現EMCC掛了,之后發現EMCC依賴的instance 掛了,重啟startup后發現spfile無法啟動。還是和小伙伴把基礎問題搞清。spfile是動態文件、動態文件、動態文件,linux下vi看起來部分亂碼部分是可編輯的,vi即使可以編輯也需要轉換成p…

spring碎片

包的掃描過程 判斷當前是否是文件夾獲取文件夾里面的所有內容判斷文件夾是否為空,為空的話直接返回如果文件夾不為空,則遍歷文件夾里面的所有內容 遍歷得到每個file對象,繼續進行判斷,如果還是文件,則進一步進行遞歸遍歷得到的file對象不是文件夾,是文件得到包路徑類名稱-字符…

如何形成項目經驗在多個項目間的高效復用?

要實現項目經驗的跨項目高效復用,核心在于建立系統化總結機制、標準化知識表達、平臺化共享工具。其中,標準化知識表達尤為關鍵,它通過統一模板和分類體系,確保不同項目的經驗可以被快速理解、輕松匹配到新場景,從而提…

目標檢測之YOLOV11談談OBB

引言:從軸對齊到定向邊界框的范式轉變 在計算機視覺領域,目標檢測算法長期受限于軸對齊邊界框(AABB)的固有缺陷——當面對航拍圖像中的艦船、遙感影像中的建筑物或工業質檢中的傾斜零件時,傳統邊界框會包含大量背景噪…

Vue2之生命周期

文章目錄 Vue生命周期Vue生命周期鉤子生命周期鉤子小案例在created中獲取數據在mounted中獲取焦點 Vue生命周期 思考:什么時候可以發送初始化渲染請求?(越早越好)什么時候可以開始操作dom?(至少dom得渲染出…

Web 架構之多租戶(SaaS)系統設計要點

文章目錄 一、多租戶系統概述定義應用場景 二、設計要點1. 數據隔離獨立數據庫共享數據庫,獨立 Schema共享數據庫,共享 Schema數據訪問控制 2. 資源分配計算資源存儲資源 3. 租戶管理租戶注冊與注銷租戶信息管理 4. 安全與合規身份驗證與授權數據加密 三…

【Clickhouse系列】索引

目錄 1. 主鍵索引 (Primary Key Index) - 核心是稀疏索引 2. 跳數索引 (Data Skipping Indexes) - 二級索引 3. 關鍵總結與最佳實踐: ClickHouse的索引設計哲學與其他傳統OLTP數據庫(如MySQL)有顯著不同,它更側重于高效掃描大數…

445場周賽

第一題:檢查元素頻次是否為質數 給你一個整數數組 nums。 如果數組中任一元素的 頻次 是 質數,返回 true;否則,返回 false。 元素 x 的 頻次 是它在數組中出現的次數。 質數是一個大于 1 的自然數,并且只有兩個因數…

【SQL語法匯總】

讀音:MySQL —— 賣舌口 MySQL 實際上是DBMS軟件系統, 并非數據庫。通過系統管理維護數據庫,DBMS相當于用戶和數據庫之間的橋梁。 MySQL是一種關系型數據庫, 類似excel,用行和列的關系組織數據數據。 操作關系型數據庫的DBMS系統大多數用SQL來管理數據。 SQL是編程語言…

C++法則10:引用本身是一個“別名”(alias),一旦綁定到一個對象后,就不能再重新綁定到其他對象。

C法則10:引用本身是一個“別名”(alias),一旦綁定到一個對象后,就不能再重新綁定到其他對象。 在C中,引用(reference)是一個已存在對象的別名。一旦引用被初始化綁定到一個對象&…

PHP 生成當月日期

一:按日期順序排列的數組,而不是按周分組的二維數組 /*日期生成 *day: 日期數字 *date: 完整的日期字符串 (YYYY-MM-DD) *is_current_month: 是否屬于當前月份 *is_prev_month: 是否是上個月的日期 *is_next_month: 是否是下個月的日期 *is_today: 是否是…

vue3+elementPlus實現無縫滾動表格封裝

vue3+elementPlus+css+js 模擬liMarquee插件,實現無限滾動效果 功能:1、表格數據大于一定數量之后,開始向上滾動 2、當鼠標移入的時候,動畫停止,鼠標移出,繼續動畫 3、滾動動畫的速度可以自定義 4、表格的高度固定 5、向上滾動時,無限滾動,不存在卡頓 <template>…

AI賦能企業內訓:2025智能化教育培訓系統源碼開發全解析

從線下集中授課到線上碎片化學習&#xff0c;從被動灌輸到主動交互&#xff0c;越來越多企業開始關注“企業內訓系統”的智能化升級。而這一切的背后&#xff0c;離不開AI技術的深度賦能。 筆者認為&#xff0c;2025年將是企業內訓系統“從信息化走向智能化”的關鍵拐點。本篇…

旅游安全急救實訓室:構建旅游行業安全人才培養新范式

在文旅產業蓬勃發展與安全應急需求日益凸顯的背景下&#xff0c;旅游安全急救能力已成為從業者的核心素養之一。當前&#xff0c;旅游市場突發狀況頻發&#xff0c;如景區意外事故、游客突發疾病等&#xff0c;對從業人員的急救技能提出了更高要求——既要掌握基礎急救操作&…