最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Docker常見(jiàn)問(wèn)題深度剖析(多種類(lèi)似命令之間的區(qū)別)

 更新時(shí)間:2025年12月13日 09:25:04   作者:Undoom  
本文剖析了Docker的底層命令,包括容器的生命周期管理、鏡像數(shù)據(jù)的持久化與遷移,以及資源的回收機(jī)制,本文將圍繞容器的生命周期管理(Create/Start/Run)、鏡像的持久化與遷移(Import/Load)以及資源的回收機(jī)制(Rm/Rmi/Prune)展開(kāi)剖析,感興趣的朋友跟隨小編一起看看吧

前言

Docker 作為容器化技術(shù)的標(biāo)準(zhǔn),其核心價(jià)值在于對(duì)應(yīng)用運(yùn)行環(huán)境的標(biāo)準(zhǔn)化封裝與隔離。要精通 Docker 的運(yùn)維與開(kāi)發(fā),必須深入理解其底層命令的工作原理、數(shù)據(jù)流向以及狀態(tài)流轉(zhuǎn)機(jī)制。本文將圍繞容器的生命周期管理(Create/Start/Run)、鏡像的持久化與遷移(Import/Load)以及資源的回收機(jī)制(Rm/Rmi/Prune)展開(kāi)深度剖析。

第一部分:容器生命周期管理的底層邏輯

容器的生命周期本質(zhì)上是進(jìn)程狀態(tài)與文件系統(tǒng)狀態(tài)的組合。Docker 提供了 docker createdocker startdocker run 三個(gè)命令來(lái)精確控制這一過(guò)程。理解這三者的區(qū)別,需要從 Docker Daemon(守護(hù)進(jìn)程)如何處理容器配置、讀寫(xiě)層(Read-Write Layer)以及命名空間(Namespaces)的角度入手。

1. docker create:構(gòu)建容器靜態(tài)實(shí)體的過(guò)程

docker create 命令的核心職能是初始化容器的配置信息并建立文件系統(tǒng)層級(jí),但并不觸發(fā)容器內(nèi)主進(jìn)程的執(zhí)行。

在執(zhí)行 docker create [IMAGE] 時(shí),Docker Daemon 會(huì)執(zhí)行以下一系列原子操作:

  1. 鏡像檢查與獲取:驗(yàn)證本地是否存在指定鏡像。
  2. 讀寫(xiě)層分配:基于聯(lián)合文件系統(tǒng)(UnionFS),在鏡像的只讀層(Read-Only Layers)之上,疊加一層空的讀寫(xiě)層。這一層用于存儲(chǔ)容器運(yùn)行期間產(chǎn)生的所有數(shù)據(jù)變更。
  3. 配置元數(shù)據(jù)生成:在 /var/lib/docker/containers/<container-id>/ 目錄下生成 config.v2.jsonhostconfig.json 文件。這些文件記錄了容器的網(wǎng)絡(luò)設(shè)置、環(huán)境變量、掛載點(diǎn)以及資源限制(Cgroups 配額)。
  4. 狀態(tài)標(biāo)記:將容器狀態(tài)標(biāo)記為 Created。

此命令的戰(zhàn)略意義在于“配置與運(yùn)行解耦”。在復(fù)雜的編排場(chǎng)景中,可能需要先行預(yù)分配容器的 ID、網(wǎng)絡(luò)接口或掛載卷,待所有依賴資源就緒后,再統(tǒng)一觸發(fā)運(yùn)行。

2. docker start:激活容器運(yùn)行時(shí)環(huán)境

docker start [CONTAINER] 的作用是將一個(gè)處于 CreatedExited 狀態(tài)的靜態(tài)容器轉(zhuǎn)化為一個(gè)運(yùn)行中的進(jìn)程。

當(dāng)執(zhí)行此命令時(shí),Docker 引擎的后端運(yùn)行時(shí)(如 runc)介入工作:

  1. 命名空間隔離:初始化 Linux Namespaces(包括 PID、NET、IPC、MNT、UTS),為容器創(chuàng)建獨(dú)立的進(jìn)程運(yùn)行環(huán)境。
  2. 控制組應(yīng)用:根據(jù)創(chuàng)建時(shí)的配置,將容器進(jìn)程加入對(duì)應(yīng)的 Cgroups,實(shí)施 CPU、內(nèi)存等資源的硬限制。
  3. 主進(jìn)程執(zhí)行:讀取鏡像或配置中指定的 ENTRYPOINTCMD 指令,啟動(dòng) PID 為 1 的主進(jìn)程。
  4. 狀態(tài)變更:將容器狀態(tài)更新為 Up。

若容器是從 Exited 狀態(tài)啟動(dòng),之前在讀寫(xiě)層產(chǎn)生的數(shù)據(jù)(如日志文件、數(shù)據(jù)庫(kù)記錄)依然存在,保證了數(shù)據(jù)在容器重啟過(guò)程中的持久性。

3. docker run:復(fù)合操作的原子化封裝

docker run 是 Docker 中使用頻率最高的命令,它并非單一功能的指令,而是 docker createdocker start 的邏輯組合,并增加了前臺(tái)交互的處理能力。

執(zhí)行 docker run [IMAGE] 的完整內(nèi)部流程如下:

  1. API 調(diào)用:Docker Client 向 Docker Daemon 發(fā)送請(qǐng)求。
  2. 鏡像拉取:若本地缺失鏡像,觸發(fā) docker pull 操作。
  3. 容器創(chuàng)建:執(zhí)行 create 邏輯,分配 ID 和文件系統(tǒng)。
  4. 容器啟動(dòng):執(zhí)行 start 邏輯,拉起進(jìn)程。
  5. 流附加(Attach):默認(rèn)情況下,Client 端會(huì)監(jiān)聽(tīng)容器的標(biāo)準(zhǔn)輸入(STDIN)、標(biāo)準(zhǔn)輸出(STDOUT)和標(biāo)準(zhǔn)錯(cuò)誤(STDERR),實(shí)現(xiàn)日志的實(shí)時(shí)回顯或終端交互。

命令差異性總結(jié)表:

特性docker createdocker startdocker run
核心動(dòng)作分配資源,寫(xiě)入配置初始化隔離環(huán)境,執(zhí)行進(jìn)程組合動(dòng)作(Create + Start)
容器狀態(tài)變化Null -> CreatedCreated/Exited -> UpNull -> Up
網(wǎng)絡(luò)資源預(yù)分配設(shè)置,但不激活激活虛擬網(wǎng)卡與 IP配置并激活
典型場(chǎng)景細(xì)粒度控制、預(yù)配置故障恢復(fù)、分步啟動(dòng)快速部署、臨時(shí)任務(wù)

第二部分:鏡像數(shù)據(jù)的持久化、遷移與恢復(fù)

在涉及跨網(wǎng)絡(luò)環(huán)境(如氣密內(nèi)網(wǎng))遷移 Docker 資產(chǎn)時(shí),docker save/loaddocker export/import 是兩組關(guān)鍵的解決方案。盡管它們最終都能生成鏡像,但其底層的數(shù)據(jù)結(jié)構(gòu)、元數(shù)據(jù)完整性以及適用場(chǎng)景存在本質(zhì)區(qū)別。

1. 鏡像歸檔機(jī)制:docker save 與 docker load

docker save 導(dǎo)出的 tar 包是鏡像層(Layers)與元數(shù)據(jù)的完整集合。

  • 數(shù)據(jù)完整性:該命令保留了鏡像的所有歷史層級(jí)。每一個(gè) RUN、COPY 指令生成的層都會(huì)被獨(dú)立打包。同時(shí),包含 manifest.json 和鏡像配置 JSON 文件,完整保留了鏡像的 Tag 信息、環(huán)境變量(ENV)、端口暴露(EXPOSE)、啟動(dòng)命令(CMD/ENTRYPOINT)以及構(gòu)建歷史。
  • 多鏡像打包:支持一次性將多個(gè)鏡像打包進(jìn)同一個(gè) tar 文件。

對(duì)應(yīng)地,docker load 的作用是將這個(gè)完整的歸檔文件“重放”到 Docker 的圖驅(qū)動(dòng)(Graph Driver)中。

  • 恢復(fù)邏輯:Docker 引擎會(huì)讀取 tar 包中的 manifest,校驗(yàn)每一層的 SHA256 簽名。如果本地已存在相同的層(由 ID 標(biāo)識(shí)),則跳過(guò)加載,實(shí)現(xiàn)增量恢復(fù);否則,解壓層數(shù)據(jù)并重建鏡像元數(shù)據(jù)。
  • 結(jié)果一致性:恢復(fù)后的鏡像 ID 與源鏡像 ID 完全一致,這保證了環(huán)境的精確復(fù)制。

2. 容器快照機(jī)制:docker export 與 docker import

docker export 導(dǎo)出的對(duì)象是容器的文件系統(tǒng)快照。

  • 扁平化處理:該命令會(huì)將容器當(dāng)前的讀寫(xiě)層與所有只讀層合并,打包成一個(gè)單純的文件系統(tǒng) tar 包。在此過(guò)程中,所有的層級(jí)信息被丟棄,所有的構(gòu)建歷史、元數(shù)據(jù)(如 ENV、CMD)全部丟失。
  • 數(shù)據(jù)范圍:僅包含容器當(dāng)前可見(jiàn)的文件。掛載卷(Volumes)中的數(shù)據(jù)通常不會(huì)被導(dǎo)出(除非掛載點(diǎn)位于導(dǎo)出路徑內(nèi)且未被特殊處理)。

docker import 則利用這個(gè)文件系統(tǒng)快照構(gòu)建一個(gè)新的鏡像。

  • 鏡像重構(gòu):導(dǎo)入后,Docker 會(huì)創(chuàng)建一個(gè)全新的鏡像層(Base Layer),包含 tar 包中的所有文件。
  • 元數(shù)據(jù)重建:由于原始元數(shù)據(jù)丟失,新鏡像沒(méi)有預(yù)設(shè)的 CMD 或 ENTRYPOINT。在執(zhí)行 docker import 時(shí),通常需要使用 --change 參數(shù)(如 --change "CMD /bin/bash")來(lái)手動(dòng)補(bǔ)充運(yùn)行時(shí)配置。
  • 結(jié)果特性:生成的是一個(gè)沒(méi)有父層歷史的“扁平”鏡像,體積可能比原始分層鏡像更小,但也失去了分層共享的優(yōu)勢(shì)。

3. 核心差異深度對(duì)比

維度docker save / loaddocker export / import
操作對(duì)象鏡像 (Images)容器 (Containers)
文件內(nèi)容完整的層級(jí)數(shù)據(jù) + 完整元數(shù)據(jù)僅文件系統(tǒng)快照 (Filesystem Snapshot)
歷史記錄完整保留 (可以回滾)全部丟失 (無(wú)法回滾)
環(huán)境變量/CMD保留丟失 (需重新指定)
鏡像體積較大 (包含所有歷史變更)較小 (僅包含最終狀態(tài))
適用場(chǎng)景環(huán)境整體遷移、備份、離線交付制作基礎(chǔ)鏡像、精簡(jiǎn)鏡像體積、提取文件系統(tǒng)

第三部分:Docker 資源的清理與維護(hù)策略

隨著 Docker 的長(zhǎng)期運(yùn)行,系統(tǒng)中會(huì)積累大量的容器、鏡像、網(wǎng)絡(luò)和卷資源。無(wú)效資源不僅占用磁盤(pán)空間(尤其是 /var/lib/docker),還可能導(dǎo)致 IP 地址耗盡或構(gòu)建緩存沖突。docker rmdocker rmidocker prune 分別針對(duì)不同粒度的資源清理提供了解決方案。

1. docker rm:容器實(shí)例的移除

docker rm 專(zhuān)門(mén)用于移除容器記錄及其可寫(xiě)層。

  • 狀態(tài)約束:默認(rèn)只能移除 ExitedCreated 狀態(tài)的容器。若容器正在運(yùn)行,Docker 守護(hù)進(jìn)程會(huì)拒絕操作,以防止誤刪生產(chǎn)服務(wù)。
  • 強(qiáng)制刪除機(jī)制:使用 -f (--force) 參數(shù)時(shí),Docker 會(huì)通過(guò) SIGKILL 信號(hào)強(qiáng)制終止容器進(jìn)程,隨后執(zhí)行刪除操作。
  • 數(shù)據(jù)卷殘留:這是一個(gè)關(guān)鍵的知識(shí)盲點(diǎn)。默認(rèn)執(zhí)行 docker rm container_name 不會(huì)刪除該容器關(guān)聯(lián)的匿名卷(Anonymous Volumes)。這些卷會(huì)變成“懸空卷”(Dangling Volumes),長(zhǎng)期占用磁盤(pán)。正確的做法是使用 docker rm -v container_name,隨容器一同清理關(guān)聯(lián)的匿名卷。

2. docker rmi:鏡像資產(chǎn)的移除

docker rmi 用于從本地存儲(chǔ)庫(kù)中卸載鏡像。

  • 引用計(jì)數(shù)檢查:Docker 采用引用計(jì)數(shù)機(jī)制管理鏡像。當(dāng)執(zhí)行 docker rmi image_id 時(shí),系統(tǒng)會(huì)檢查是否有已停止或運(yùn)行中的容器依賴于該鏡像的任何一層。如果存在依賴(即引用計(jì)數(shù) > 0),刪除操作會(huì)失敗。必須先刪除相關(guān)容器 (docker rm),釋放引用后才能刪除鏡像。
  • 標(biāo)簽解綁 vs 物理刪除
    • 當(dāng)一個(gè)鏡像 ID 對(duì)應(yīng)多個(gè) Tag(如 image:latestimage:v1)時(shí),docker rmi image:latest 僅執(zhí)行解綁操作(Untag),鏡像實(shí)體依然存在。
    • 當(dāng)該鏡像 ID 的最后一個(gè) Tag 被移除,或者直接通過(guò) ID 進(jìn)行刪除時(shí),Docker 才會(huì)觸發(fā)物理刪除,清理文件系統(tǒng)中的層數(shù)據(jù)。

3. docker prune:全系統(tǒng)層面的垃圾回收

docker prune 是 Docker 的垃圾回收(GC)指令集,用于批量清理“懸空”或“未使用”的資源。

  • 懸空資源 (Dangling):指沒(méi)有 Tag 且沒(méi)有被任何容器引用的鏡像(通常顯示為 <none>:<none>),或者是沒(méi)有關(guān)聯(lián)任何容器的卷。這些通常是構(gòu)建過(guò)程中產(chǎn)生的中間產(chǎn)物。
  • 未使用資源 (Unused):指當(dāng)前未被任何正在運(yùn)行的容器所引用的資源。范圍比“懸空”更廣。

核心指令解析:

  • docker image prune:默認(rèn)僅清理懸空鏡像。
  • docker container prune:批量清理所有處于 Exited 狀態(tài)的容器。
  • docker system prune:這是最激進(jìn)的清理命令。它會(huì)同時(shí)執(zhí)行以下操作:
    1. 刪除所有已停止的容器。
    2. 刪除所有未被容器使用的網(wǎng)絡(luò)。
    3. 刪除所有懸空鏡像。
    4. 刪除構(gòu)建緩存(Build Cache)。
  • docker system prune -a:極度危險(xiǎn)操作。加上 -a (--all) 標(biāo)志后,它不僅刪除懸空鏡像,還會(huì)刪除所有當(dāng)前未被運(yùn)行容器使用的鏡像。這意味著如果本地緩存了 ubuntu:latest 鏡像但暫時(shí)沒(méi)跑容器,執(zhí)行該命令后鏡像將被直接刪除,下次使用需重新拉取。

總結(jié)

Docker 的命令體系設(shè)計(jì)嚴(yán)謹(jǐn),分別對(duì)應(yīng)了不同的資源管理層級(jí)。

  • 生命周期管理:遵循 Create (配置) -> Start (激活) -> Run (組合) 的邏輯。
  • 數(shù)據(jù)遷移:區(qū)分 Save/Load (鏡像完整備份) 與 Export/Import (文件系統(tǒng)快照)。
  • 資源清理:依據(jù)依賴關(guān)系鏈,從 rm (容器) 到 rmi (鏡像),最終通過(guò) prune 實(shí)現(xiàn)自動(dòng)化的垃圾回收。

深入理解這些機(jī)制,能夠有效避免生產(chǎn)環(huán)境中的數(shù)據(jù)丟失風(fēng)險(xiǎn),優(yōu)化存儲(chǔ)空間利用率,并提升容器編排的穩(wěn)定性。

到此這篇關(guān)于Docker常見(jiàn)問(wèn)題(多種類(lèi)似命令之間的區(qū)別)的文章就介紹到這了,更多相關(guān)docker常見(jiàn)問(wèn)題內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Docker consul的容器服務(wù)更新與發(fā)現(xiàn)的問(wèn)題小結(jié)

    Docker consul的容器服務(wù)更新與發(fā)現(xiàn)的問(wèn)題小結(jié)

    這篇文章主要介紹了Docker consul的容器服務(wù)更新與發(fā)現(xiàn),講解了服務(wù)注冊(cè)與發(fā)現(xiàn)的基本概念講解,本文給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2021-08-08
  • docker容器DNS的解決全過(guò)程

    docker容器DNS的解決全過(guò)程

    容器默認(rèn)繼承宿主機(jī)DNS配置,修改宿主機(jī)/etc/resolv.conf后容器文件不自動(dòng)同步,顯式掛載時(shí),使用echo修改避免inode變化,確保容器生效,可借助stat命令查看inode信息,并通過(guò)docker啟動(dòng)配置管理文件映射
    2025-09-09
  • docker如何創(chuàng)建nginx圖片服務(wù)器

    docker如何創(chuàng)建nginx圖片服務(wù)器

    這篇文章主要介紹了docker如何創(chuàng)建nginx圖片服務(wù)器問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • 3分鐘帶你學(xué)會(huì)docker搭建帕魯服務(wù)器

    3分鐘帶你學(xué)會(huì)docker搭建帕魯服務(wù)器

    幻獸帕魯已經(jīng)正式開(kāi)服,目前在線人數(shù)已經(jīng)超過(guò)7W+,很多玩家想自己創(chuàng)建服務(wù)器和朋友一起聯(lián)機(jī)游玩,本文主要介紹了3分鐘帶你學(xué)會(huì)docker搭建帕魯服務(wù)器,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-01-01
  • Docker Compose健康檢查實(shí)現(xiàn)零停機(jī)部署

    Docker Compose健康檢查實(shí)現(xiàn)零停機(jī)部署

    本文主要介紹了Docker Compose健康檢查實(shí)現(xiàn)零停機(jī)部署,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2026-04-04
  • Docker日志管理實(shí)戰(zhàn)之輕松掌控容器輸出

    Docker日志管理實(shí)戰(zhàn)之輕松掌控容器輸出

    本文將從實(shí)踐出發(fā),講解 Docker 引擎日志 + 容器應(yīng)用日志 的區(qū)別、查看方法與優(yōu)化技巧,并通過(guò) Nginx 實(shí)戰(zhàn)演示日志查看與分析,希望對(duì)大家有所幫助
    2026-04-04
  • Docker Dockerfile的使用實(shí)例

    Docker Dockerfile的使用實(shí)例

    這篇文章主要介紹了Docker Dockerfile的使用實(shí)例的相關(guān)資料,非常不錯(cuò)具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2016-11-11
  • 基于docker-compose構(gòu)建Mongodb副本集的示例詳解

    基于docker-compose構(gòu)建Mongodb副本集的示例詳解

    副本集是?MongoDB?高可用性和數(shù)據(jù)安全性策略的基礎(chǔ),適用于對(duì)數(shù)據(jù)安全性和服務(wù)可用性有較高要求的場(chǎng)景,本文給大家介紹了如何基于docker-compose構(gòu)建Mongodb副本集,文中通過(guò)代碼示例給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2024-01-01
  • docker打包python鏡像的全教程分享

    docker打包python鏡像的全教程分享

    Docker是一種開(kāi)源的容器化平臺(tái),可以讓開(kāi)發(fā)者將應(yīng)用程序和其依賴項(xiàng)打包到一個(gè)可移植的容器中,然后在不同的環(huán)境中運(yùn)行,本文主要給大家介紹了docker打包python鏡像全教程,需要的朋友可以參考下
    2024-02-02
  • docker運(yùn)行報(bào)錯(cuò)啟動(dòng)守護(hù)進(jìn)程的解決

    docker運(yùn)行報(bào)錯(cuò)啟動(dòng)守護(hù)進(jìn)程的解決

    文章主要介紹了在使用Docker時(shí)遇到的連接API失敗的問(wèn)題以及解決辦法,解決辦法包括點(diǎn)擊Docker圖標(biāo)啟動(dòng)守護(hù)進(jìn)程,修改Docker Desktop設(shè)置頁(yè)選項(xiàng),以及定位設(shè)置文件進(jìn)行配置,建議大家參考以上經(jīng)驗(yàn)并給予支持
    2026-02-02

最新評(píng)論

承德市| 德化县| 大宁县| 卓资县| 呼伦贝尔市| 广宗县| 左贡县| 闽清县| 米林县| 睢宁县| 凭祥市| 泗水县| 五原县| 南昌市| 西藏| 青神县| 富蕴县| 安达市| 兴山县| 和顺县| 漳平市| 错那县| 舟曲县| 荃湾区| 万安县| 扎囊县| 尼玛县| 米脂县| 健康| 周宁县| 义乌市| 九龙县| 富宁县| 新河县| 绥德县| 岳阳市| 光山县| 鸡东县| 宁城县| 石泉县| 西平县|