AboutDockerProfessional illustrations
Docker Image Save 基礎教學
好啦,各位IT人,今次我哋就深入淺出噉講下 Docker Image Save 呢個基礎但超級重要嘅指令。簡單嚟講,docker save 就係將你喺本地機度嘅 Docker 映像檔,打包成一個歸檔文件,通常係一個 tar 檔。呢個動作就好似你將一個複雜嘅軟件連同佢嘅所有設定、依賴,一嘢打包成一個壓縮檔,方便你拎去第二度用,或者純粹做 備份。同 docker export 主要係針對運行緊嘅 容器 唔同,docker save 係針對 映像檔 本身,保留晒所有歷史層同元數據,係最完整嘅 映像檔備份 方法。
點解要學識用 docker save?想像下幾個實際場景:你公司嘅內部網絡同 Docker Hub 或者公共 Docker Registry 係隔絕嘅,你點樣將開發好嘅 映像檔 搬去生產環境?又或者,你想將某個特定版本嘅 Nginx 或者 Ubuntu 映像,甚至係你自己用 Dockerfile build 出嚟嘅寶貝 image,做一個永久嘅 存檔,以防官方 registry 日後更新咗版本,你想 rollback 都冇得 rollback。呢啲時候,docker save 同佢嘅好拍檔 docker load 就係你嘅救星。呢對 導入導出 指令,正正就係解決 映像檔 離線 遷移 嘅標準答案。
咁實際點用呢?好簡單,基本 指令 格式係「docker save -o 檔案名.tar 映像檔名稱:標籤」。例如你想將最新版嘅官方 Nginx 映像打包,你可以打「docker save -o nginx_latest.tar nginx:latest」。個「-o」就係 output 咁解,後面跟住你想生成個 tar 檔叫咩名。又或者,你想打包多個 映像檔 落同一個歸檔文件都得,指令係「docker save -o my_images.tar image1:tag image2:tag」。打包完之後,你會得到一個 .tar 檔案,呢個就係你嘅 映像檔 備份,你可以用 USB 手指、SFTP、或者任何方法,搬去另一部冇網絡連去 Docker Registry 嘅伺服器度。
有打包緊係要有還原啦,呢個就輪到 docker load 出場。當你將個 .tar 檔搬去目標機器之後,你只需要用「docker load -i 檔案名.tar」呢個 指令,Docker 就會自動將個 tar 檔入面嘅所有 映像檔,逐層 導入 返去本地嘅映像儲存庫度。「-i」即係 input。完成之後,你打「docker images」就會見到相關嘅 映像檔 已經喺度,隨時可以用「docker run」去啟動成 容器 啦。要留意,docker load 同 docker import 係兩回事,import 係由一個容器快照(通常由 docker export 產生)去建立一個新 映像檔,會失去晒所有歷史同層級信息,而 load 就係完整還原 save 出嚟嘅 映像檔,所有嘢都原汁原味。
最後提多幾個實用貼士同常見陷阱。首先,用 docker save 打包出嚟嘅 tar 檔可能會好大,尤其係你打包多個 映像檔 或者個 映像檔 本身好大(例如包含咗成個操作系統)。記得要預留足夠硬碟空間。第二,喺 Kubernetes 環境或者一啲 CI/CD 流程入面,有時都會用到呢對指令去預先拉取特定 映像檔 到節點,避免運行時先下載嘅延遲。第三,如果你係想備份同遷移一個正在運行中嘅 容器 嘅當前狀態,你應該先用「docker commit」將個 容器 變成一個新 映像檔,然後再用 docker save 去處理呢個新 映像檔,而唔好直接混淆 save 同 export 嘅用途。記住,docker save 係 for image,docker export 係 for container,搞清楚呢點,你喺管理 Docker 同 容器 備份遷移時就會得心應手好多。
AboutDockerProfessional illustrations
單一鏡像保存步驟詳解
好啦,各位IT兄弟姊妹,今次我哋就深入拆解下點樣用Docker CLI嘅docker save指令,去將一個Docker Image(映像檔)完整咁備份落嚟。呢個步驟對於遷移、版本歸檔,或者純粹想將個映像檔拎去另一部冇網絡嘅機度用,真係超級實用。同docker export(係針對運行緊嘅容器)唔同,docker save係針對已經build好嘅映像檔本身,會將佢所有層(layers)同元數據(metadata)打包,保存返原本嘅狀態,之後用docker load就可以完美還原。
首先,你要確定你想打包邊個映像檔。你可以用「docker images」指令睇下你部機有啲咩映像檔,記低個REPOSITORY名同TAG。例如,你可能有一個自己build嘅Nginx配置映像檔,叫「my-nginx:latest」,又或者係從Docker Hub拉落嚟嘅「ubuntu:22.04」。呢度要提一提,如果你個映像檔係從私人的Docker Registry拉返嚟,個過程都係一樣嘅,因為指令係針對本地已經存在嘅映像檔進行操作。
跟住落嚟就係核心指令啦。打開你嘅終端機(Terminal),輸入以下命令:
docker save -o /你想要嘅路徑/檔案名.tar 映像檔名稱:標籤
等我解釋下每個部分點解。「-o」呢個參數意思係「output」,即係指定輸出嘅歸檔文件位置同名稱。我強烈建議你俾個清晰嘅名同用「.tar」作為副檔名,因為docker save預設輸出就係一個tar歸檔格式。例如,我想將「my-nginx:latest」打包,放喺家目錄嘅backup資料夾,我就會咁打:
docker save -o ~/backup/my-nginx-latest-backup.tar my-nginx:latest
執行之後,如果冇錯誤訊息,咁就代表成功啦。你可以去指定嘅路徑度睇下,應該會多咗個好大嘅.tar檔案。呢個tar檔就係你個映像檔嘅完整備份,入面包含咗構成該映像檔嘅所有文件系統層。順帶一提,如果你想個檔案細啲,可以考慮用gzip壓縮,指令係「docker save 映像檔名稱:標籤 | gzip > 檔案名.tar.gz」。不過要留意,用docker load讀取壓縮檔時,佢會自動偵測同解壓,唔使特別處理。
咁保存完之後,點樣用返出嚟呢?呢個時候就要出動docker load呢個兄弟指令啦。當你要將呢個tar檔匯入去另一部機(或者同一部機唔同時間還原),你只需要將個.tar檔案抄過去,然後喺終端機打:
docker load -i /你個檔案嘅路徑/檔案名.tar
「-i」即係input,指定輸入檔案。執行後,Docker引擎就會讀取個tar檔,將入面嘅映像檔層同元數據解壓同載入到本地的映像檔儲存區。完成後,你再打「docker images」就會見到個映像檔已經喺度,同名同標籤都同之前保存時一模一樣,即刻可以用嚟運行容器啦。
有幾點進階貼士可以分享下。第一,docker save 同 docker load 呢對組合,同 docker export 加 docker import 係兩回事。前者係針對映像檔,保留晒所有歷史同層;後者係將一個運行中容器嘅當前文件系統狀態,導出成一個單一嘅文件系統層映像檔,會冇咗原本嘅歷史、層結構同某啲元數據,通常用嚟製作一個純靜態嘅基礎映像檔。第二,如果你嘅工作流程涉及Kubernetes,或者需要將特定版本嘅映像檔(例如某個特定版本嘅CouchDB資料庫映像檔)歸檔以符合審計要求,定期用docker save做離線備份係一個好習慣。第三,記得檢查下你保存出嚟個tar檔嘅完整性,尤其係經過網絡傳輸後,可以用「docker load」試下讀取,或者用「tar -tf 檔案名.tar」睇下入面有冇檔案清單,確保個存檔過程冇出錯。
總括來講,掌握docker save同docker load呢對導入導出指令,就好似幫你嘅Docker Image買咗個保險,無論係環境遷移、離線部署,抑或單純想滾返去舊版本,都變得輕鬆自在。下次當你修改Dockerfile之前,不妨先將現行穩定嘅映像檔打個包,做個安全備份,咁就萬無一失啦。
AboutdockerProfessional illustrations
多鏡像打包保存技巧
講到一次過處理多個Docker映像檔,好多時我哋都唔係只係得一個image要搞。可能係成個project嘅全套環境,例如一個Web App連住Nginx做反向代理、Ubuntu做基礎系統、再加個CouchDB做資料庫;又或者係為咗Kubernetes入面成組微服務做一次性遷移。呢個時候,逐個逐個用docker save指令去打包,真係會做到手軟又容易出錯。所以,掌握多鏡像打包保存技巧就係提升效率嘅關鍵。
最直接嘅方法,就係利用Docker CLI本身嘅功能,將多個映像檔名一次過傳俾docker save指令。你可以喺terminal度打「docker save -o my_project_backup.tar image1:tag image2:tag image3:tag」,咁樣就會將呢三個唔同嘅映像檔,全部打包入同一個tar歸檔文件入面。呢個方法好處係簡單明瞭,一個指令搞掂,而且之後用docker load還原嘅時候,都會一次過將所有打包咗嘅映像檔載入返去本地嘅映像檔儲存庫。呢種方式好適合用嚟做備份同遷移,例如將開發環境完整咁交俾另一位同事,或者將一組穩定版本嘅服務映像檔從開發機搬去生產伺服器。
不過,如果你嘅映像檔數量好多,或者個名好長,成串打落去個指令度會好難睇。呢個時候,我哋可以玩啲進階技巧。其中一個實用方法係結合docker image ls同grep呢類指令,去篩選出你想要打包嘅映像檔。例如,你所有屬於某個project嘅映像檔,個tag都可能會有個共同嘅關鍵字,好似「myapp-」。你就可以用類似「docker image ls --format "{{.Repository}}:{{.Tag}}" | grep myapp-」嘅方法,列出所有相關映像檔,然後再將個結果用xargs指令駁去docker save度。咁樣就做到半自動化嘅批量打包,唔使驚打錯名或者漏咗某一個。
另一個要考慮嘅重點,就係個tar檔案嘅管理。當你將幾十個映像檔打包成一個巨大嘅歸檔文件時,個檔案隨時可以去到幾十GB。呢個時候,直接傳送同儲存都唔係咁方便。你可以考慮用split指令將個大tar檔分割成幾個細檔案,方便用USB手指或者有限制嘅網絡傳送。到時要還原,只需要用cat指令將所有分割檔合併返,再pipe去docker load就得。當然,你亦都可以考慮唔好一次過打包晒,而係按邏輯分組。例如,將基礎系統映像檔(如Ubuntu)打一個包,將應用程式依賴(如Nginx, Couchdb)打另一個包,將你自己寫嘅應用程式映像檔再打一個包。咁樣做映像檔備份會更有條理,更新其中一組時亦都唔使重新處理全部。
最後,要提一提同多鏡像打包相關嘅其他指令同概念。有啲人可能會諗起docker export同docker import,但呢對指令主要係針對容器嘅運行狀態做存檔,而唔係針對映像檔本身,所以唔適合用嚟做映像檔嘅版本保存同分發。另外,如果你嘅映像檔本身係來自私有的Docker Registry,咁批量操作仲有另一個思路:就係直接用Registry提供嘅API或者用專門嘅工具(例如skopeo)去同Docker Hub或者自建Registry做批量同步,咁就唔使經過本地打包成tar檔呢個步驟。不過,對於最常見嘅離線遷移、版本歸檔或者災難復原準備,掌握好docker save同docker load呢對導入導出利器,尤其係處理多個映像檔嘅技巧,絕對係每個DevOps同開發者都要識嘅基本功。記住,妥善嘅檔案儲存策略,可以喺你需要急住還原服務嗰陣,救你一命。
AboutdockerProfessional illustrations
2026年最新參數實測
好,等我哋深入實測一下2026年最新嘅 Docker CLI 參數,睇下 docker save 同 docker load 呢對指令有咩新玩法同實際應用上嘅貼士。首先,最基本嘅指令大家都知,就係 docker save -o my_image.tar nginx:latest,將個 Docker Image 打包成一個 tar 歸檔文件。但係2026年嘅實測發現,如果你要批量處理多個 映像檔,例如要將成個微服務專案嘅所有 image 一次過 備份 去另一部機,用 docker save 後面跟多個 image 名(例如 docker save -o all_images.tar nginx:latest ubuntu:22.04 couchdb:3.3)依然係最直接嘅方法,生成嘅單一 tar 檔案入面會包含晒所有層(layers),方便 遷移 同歸檔。
不過,實測緊要留意參數嘅細節。例如,有冇諗過個 tar 檔有幾大?如果你個 映像檔 本身好大,用 docker save 整出嚟嘅檔案可能會嚇親你。2026年嘅最佳實踐係,喺 save 之前,考慮用 Dockerfile 做多一層優化,例如用多階段構建(multi-stage build)減低最終 image 嘅體積,或者用 docker image prune 清走啲唔用嘅中間層,咁樣打包出嚟嘅 tar 檔先至唔會浪費儲存空間同傳輸時間。另外,而家好多團隊都會將 image push 去私有的 Docker Registry 或者雲端服務,但喺某啲網絡隔離(air-gapped)嘅環境,或者要做災難復原嘅 容器備份,docker save 呢種離線方式依然無可替代。
講到 docker load,個指令就係 docker load -i my_image.tar,將個 tar 檔案 導入 返做本地嘅 Docker Image。實測發現一個常見問題:如果部機本身已經有個同名同 tag 嘅 image,docker load 會直接覆寫咗佢,唔會有警告。所以,如果你嘅 備份 策略好嚴謹,建議喺 save 嘅時候,用 -o 參數個檔案名加入日期或者版本號,例如 nginx_backup_2026_03_15.tar,咁樣管理起嚟就清晰好多。另外,docker load 同 docker import 好易令人混淆,要記住:load 係用嚟還原一個完整嘅 Docker Image(包含晒所有元數據同歷史),而 import 係由一個 容器 嘅檔案系統快照(通常由 docker export 產生)去創建一個新嘅映像檔,但就會冇咗原本嘅歷史同配置,用途完全唔同。
而家啲系統愈嚟愈複雜,好多時唔係得單機 Docker,仲會用 Kubernetes。咁點樣將呢啲離線 映像檔 搬去 Kubernetes 節點呢?實測步驟通常係咁:首先喺可以連到 Docker Hub 或者私倉嘅機器,用 docker save 打包所需 image,然後用 scp 或者任何檔案傳輸方法,將個 tar 檔抄去目標 Kubernetes 節點,再用 docker load 導入。之後,你嘅 Pod YAML 檔案入面指定嘅 image 名同 tag,如果係用私有倉庫地址,就要確保一致,或者喺 load 完之後,用 docker tag 指令幫個 image 改個啱嘅名,等 Kubernetes 可以順利 pull 到本地嘅 image 而唔使再上網搵。
最後,分享一個2026年實測進階技巧。如果你要處理極大量嘅 映像檔備份 同 遷移,可以考慮配合 shell 腳本自動化。例如,寫個 script 先 docker image ls 列出所有想備份嘅 image,然後用循環逐個或者批量執行 docker save。甚至,可以檢查 image 嘅創建日期,只備份某段時間之後嘅新 image,咁就更加智能。記住,無論技術點變,docker save 同 docker load 呢對 導入導出 黃金組合,始終係每位 DevOps 工程師同系統管理員必須熟練掌握嘅 指令,佢哋係你應對網絡問題、環境複製同資料歸檔嘅最可靠後盾。
AbouttarProfessional illustrations
Save 指令實戰示範
好啦,各位IT老友,而家就同大家做個Save 指令實戰示範,等你可以將手頭上嘅Docker Image(映像檔)穩穩陣陣存檔落嚟。呢個指令雖然睇落簡單,但實戰入面有唔少細節位要注意,搞錯咗分分鐘個映像檔搬去第二部機就用唔到。我哋會用幾個真實例子,由淺入深,等大家徹底掌握點樣用 docker save 去做備份同遷移。
首先,我哋嚟個最直接嘅情境。假設你喺開發機度,用 Dockerfile build 咗一個自訂嘅 Nginx 映像檔,tag 做 my-nginx:latest。你想將呢個映像檔匯出成一個歸檔文件,等陣可以拎去生產伺服器度用。咁你喺 Docker CLI 打嘅指令就係:docker save -o my-nginx-backup.tar my-nginx:latest。呢度個 -o 參數就係指定輸出嘅 tar 檔案名。完成之後,你喺當前目錄就會見到個 my-nginx-backup.tar 檔案。呢個 tar 檔入面,已經包含咗整個映像檔嘅所有層(Layers)同元數據,係一個完整嘅備份。之後你可以用 SFTP、USB 手指,或者任何方法,將呢個 tar 檔搬去第二部裝咗 Docker 嘅機度。喺目標機器度,你只需要用 docker load 指令:docker load -i my-nginx-backup.tar,Docker 就會自動將個映像檔載入到本地嘅映像檔儲存庫,之後你就可以用 docker run 嚟開動容器啦。呢個方法最適合內部遷移,唔使經過 Docker Hub 或者私服 Docker Registry,又快又直接。
不過,實戰點會咁簡單?好多時我哋唔止要 save 一個映像檔,可能係要將成個專案用到嘅多個映像檔一次過打包。例如你個微服務專案用緊 Ubuntu 基礎映像、Couchdb 同一個自訂應用程式映像。如果你逐個 save 出嚟會好麻煩。docker save 指令其實支援一次過打包多個映像檔入同一個 tar 檔。指令格式係:docker save -o project-full-backup.tar ubuntu:22.04 couchdb:latest myapp:prod。咁樣打出嚟,三個映像檔就會被打包入同一個 project-full-backup.tar 檔案裏面。到時喺新環境,一樣用返一個 docker load 指令,就可以將三個映像檔全部導入,非常方便。呢個技巧對於要為某個特定版本嘅軟件堆疊做完整備份,或者準備交付俾客戶嘅部署包,係極之實用。
講到導入導出,有朋友可能會問,同 docker export 同 docker import 有咩分別呢?呢度一定要分清!我哋而家講緊嘅 docker save 同 docker load,係針對映像檔(Image)嘅操作,保存嘅係一個可以反覆用來創建容器嘅模板。而 docker export 係將一個運行緊(或已停止)嘅容器嘅檔案系統,導出成一個 tar 歸檔;跟住要用 docker import 將呢個 tar 檔變成一個新嘅映像檔。export/import 出嚟嘅映像檔會失去所有歷史層、元數據(例如原本嘅 ENTRYPOINT、CMD 等),通常只係用嚟做容器狀態嘅快照備份,唔係主流嘅映像檔分發方法。所以記住,搬映像檔,用 save/load;搬容器嘅瞬間狀態,先至用 export/import。
最後,分享幾個實戰進階貼士。第一,如果你打算將個 tar 檔長期保存,記得用 gzip 壓縮一下,可以慳好多空間,指令係 docker save my-nginx:latest | gzip > my-nginx-backup.tar.gz。載入時就用 gunzip -c my-nginx-backup.tar.gz | docker load。第二,喺 Kubernetes 環境,雖然有自己一套映像檔拉取機制,但當你要初始化一啲離線嘅節點(Air-gapped Environment)時,docker save 同 docker load 呢套組合拳依然係不可或缺嘅工具。你可以事先喺有網絡嘅環境將所需映像檔打包,再搬去離線節點載入。第三,如果你 save 出嚟嘅映像檔,用 docker load 之後發現 tag 唔見咗,或者變咗
AboutDockerProfessional illustrations
驗證備份檔案完整性
好啦,講到用 docker save 指令將你啲心血結晶,例如係一個精心配置好嘅 Nginx 映像檔或者一個裝滿資料嘅 CouchDB 容器映像,打包成一個 tar 歸檔文件之後,係咪就等於大功告成,可以安心瞓覺呢?答案當然係「未得」啦!呢個時候,「驗證備份檔案完整性」就係一個絕對唔可以慳嘅關鍵步驟。點解咁重要?因為你唔想等到有一日系統出事,急住要還原嘅時候,先至發現個 tar 檔損壞咗,或者入面嘅 Docker Image 根本 load 唔返,咁就真係喊都無謂。尤其係當你啲映像檔係用嚟部署上 Kubernetes 集群,或者係公司內部 Docker Registry 嘅重要基礎,確保備份檔完整無缺就等同於買咗份保險。
咁點樣驗證先至夠穩陣呢?首先,最基本嘅一步就係檢查個 tar 檔案本身有無損壞。你可以用 Linux 系統入面嘅 tar 指令嚟做個簡單測試。例如,你個備份檔叫 backup_nginx_ubuntu.tar,你可以試下用 tar -tf backup_nginx_ubuntu.tar 呢個指令,列出個歸檔文件入面有啲咩內容。如果個 tar 檔無問題,佢會順暢噉列出晒所有層(layers)同埋 manifest 檔案嘅路徑,唔會有任何錯誤訊息彈出嚟。呢個動作就好似你搬屋之前,打開個紙箱望一望入面啲嘢齊唔齊一樣,係一個快速嘅目測檢查。
不過,淨係睇到檔案列表並唔代表個 Docker Image 係 100% 無事。最實在嘅驗證方法,梗係直接試吓將個備份檔 import 返入去 Docker 環境啦!呢度就要出動 docker load 指令。你可以揀一個唔重要嘅測試環境,例如你部開發機,然後行 docker load -i backup_nginx_ubuntu.tar。呢個過程會將個 tar 檔入面嘅映像檔重新載入到你本地嘅 Docker 映像檔儲存庫。成功 load 完之後,你應該會見到命令行有訊息顯示個映像檔嘅名稱同 tag 已經被載入。跟住,你仲可以用 docker images 指令去確認吓,個映像檔係咪真係喺列表度,佢嘅 REPOSITORY 同 TAG 係咪同你當初 save 出嚟嘅時候一致。
但係,驗證到呢一步都仲未夠完美。因為 docker load 成功,只係代表個映像檔結構完整,可以讀取。但個映像檔入面嘅軟件係咪運作正常呢?呢個就係終極測試啦。你應該要直接用呢個新 load 返嚟嘅映像檔,去運行一個 Docker container 出嚟睇睇。例如,你 load 返嚟嘅係個 Nginx 映像檔,你就可以行 docker run -d -p 8080:80 nginx:your-tag 去啟動一個容器。然後打開瀏覽器,去睇吓 localhost:8080 係咪能夠正常顯示 Nginx 嘅歡迎頁面。如果係一個 Ubuntu 基礎映像檔,你可以試吓 run 一個互動式容器,入去行幾句基本指令,睇吓有無錯誤。如果係 CouchDB 呢類資料庫映像檔,就要試吓連接同埋做簡單嘅讀寫操作。呢個「實際運行測試」先係驗證個備份映像檔功能完整性嘅金標準,確保佢唔單止係一個死嘅檔案歸檔,而係一個真正可以隨時上線作戰嘅活容器。
另外,對於一啲更加嚴謹嘅場景,例如你係用緊自己搭建嘅私有 Docker Registry 嚟管理映像檔,咁你嘅備份流程可能仲會涉及將 save 出嚟嘅 tar 檔,再 push 返上另一個備用 Registry。呢個時候,驗證工作就要做雙重:第一重係本地 load 測試,第二重就係上傳後嘅 pull 同 run 測試。確保個映像檔無論喺本地檔案系統定係喺遠端 Registry 入面,都係完整同可用。記住,備份嘅最終目的係為咗恢復(Restore),而恢復嘅前提就係備份檔必須絕對可靠。所以,每次做完 docker save 之後,養成習慣,花少少時間行吓 load 同 run 呢啲驗證指令,絕對係一個專業 DevOps 或者系統管理員嘅良好習慣,可以避免將來嘅災難性數據損失同服務停擺。
AboutDockerProfessional illustrations
跨電腦 Load 鏡像教學
好啦,講完點樣用 docker save 將個 Docker Image 打包成一個 tar 歸檔文件之後,下一步梗係要教大家點樣喺另一部電腦度,將呢個「搬咗屋」嘅 映像檔 重新 Load 返入去啦!呢個就係所謂嘅 跨電腦 Load 鏡像,無論係團隊之間分享、喺冇網絡嘅環境(Air-gapped Environment)部署,定係單純想將個 容器 由你部開發機搬去部伺服器度,都係必學嘅技巧。同 docker save 拍住上嘅指令,就係 docker load,佢哋兩個可以話係 Docker 世界裡面嘅「導入導出」黃金組合。
首先,你要確保已經將用 docker save 指令生成嘅 tar 檔案,透過 USB 手指、內部網絡傳送(例如 SCP)或者任何你鍾意嘅方法,複製到目標電腦嘅某個位置。假設個檔案叫 my_nginx_backup.tar,而你已經擺咗喺家目錄。跟住,打開你嘅終端機(Terminal),用 Docker CLI 執行 docker load 指令。個指令格式好簡單,最基本就係 docker load -i 你個檔案名.tar。個 -i 係 --input 嘅縮寫,即係指定要輸入嘅檔案。所以,你嘅指令會係 docker load -i ~/my_nginx_backup.tar。一按 Enter,Docker 引擎就會開始讀取個 tar 存檔,將裡面嘅每一層(Layer)解壓同埋 匯入 返去你本地嘅 Docker 映像儲存庫裡面。
成個過程完成之後,你可以用 docker images 指令睇吓,應該會見到一個新嘅 映像檔 出現咗喺列表度。不過有樣嘢要留意,個 映像檔 嘅名(REPOSITORY)同標籤(TAG)可能會變咗做
當然,跨電腦 搬運 映像檔 唔止得 docker load 呢一種方法。有啲朋友可能會諗起 docker import 呢個指令。但係你要分清楚,docker load 係用嚟處理由 docker save 產生、包含完整 映像檔 層次同歷史嘅 歸檔文件;而 docker import 就係將一個由 docker export 產生、只係得單一檔案系統層次(即係一個 容器 嘅快照)嘅 tar 檔,匯入成為一個新嘅 映像檔。簡單嚟講,save/load 係針對 映像檔(Image),而 export/import 係針對 容器(Container) 嘅運行狀態。如果你想完整遷移一個 映像檔 去第二部機,用 save 同 load 呢對組合先係正路,因為可以保留晒構建歷史,對於之後用 Dockerfile 重建或者排查問題都有幫助。
舉個實際啲嘅例子,假設你公司嘅開發團隊用緊一個自訂嘅 Ubuntu 基礎映像,裡面裝定晒公司內部需要嘅開發工具。呢個映像冇放上 Docker Hub 或者公司嘅私 Docker Registry,因為涉及內部設定。當有新同事加入,或者要喺另一部新伺服器設定 Kubernetes 集群做測試,你就可以先用 docker save 將個自訂 Ubuntu 映像打包,然後喺新機用 docker load 入返佢。入完之後,新機嘅 Docker 就可以直接用呢個映像去行 容器,或者用佢做基礎去構建更複雜嘅應用映像(例如一個 CouchDB 資料庫服務),完全唔使上網去拉,又快又安全。
最後提多幾個實用貼士。第一,如果你要搬運嘅唔止一個 映像檔,而係一大堆,你可以考慮用 docker save 一次過打包多個映像(指令係 docker save -o all_my_images.tar image1:tag1 image2:tag2),然後一次過 docker load,咁就唔使逐個檔案處理,方便做批量 遷移。第二,喺 Load 完之後,最好行一轉 docker image prune 清理吓中途產生嘅冇名映像,保持本地儲存庫整潔。第三,記住呢個方法係 Docker 嘅標準操作,無論你部電腦係行 Linux、macOS 定係 Windows,只要裝咗 Docker,個 指令 都係一樣咁用,真正做到 跨平台 嘅 映像檔備份 同復原。掌握咗 docker load 呢招,你對 Docker 映像嘅管理同流動性就真係可以話係得心應手喇。
AboutRegistryProfessional illustrations
Dockerfile 與鏡像保存
講到 Dockerfile 同鏡像保存嘅關係,其實就好似食譜同成品菜式咁。你寫好一個 Dockerfile,入面用 Ubuntu 做基礎,再裝定 Nginx 或者設定好 couchdb,呢個過程就係創造食譜。而當你行 docker build 指令,Docker 引擎就會跟住你份「食譜」煮出一碟「菜」——即係一個完整嘅 Docker Image。咁問題嚟啦,煮好碟菜,你想打包拎走、搬去第二部機用,或者純粹想 備份 起嚟以防萬一,點算好?呢個時候,就要靠 docker save 同 docker load 呢對孖寶指令啦。
docker save 嘅作用,正正就係將你 build 好嘅 映像檔,連同佢所有層次(Layers)同設定,打包成一個單一嘅 歸檔文件,通常係 tar 格式。呢個過程就好似你將成個軟件應用連同佢嘅運行環境,一齊壓縮成一個「搬家紙箱」。點解要咁做?有好多實際場景㗎。例如你公司內部網絡同外網隔離(Air-gapped),唔可以直接 pull Docker Hub 或者私服 Docker Registry 上面嘅 image;又或者你想將某個特定版本嘅 image(例如為某個舊項目特製嘅 Nginx 設定)永久 存檔 留底,防止新版本有兼容問題。用 docker save -o my_backup.tar nginx:custom 呢類指令,就可以好簡單咁將個 映像檔 變成一個實體檔案。呢個 tar 檔你可以用 USB 手指拷貝、擺上 FTP、或者存入公司嘅檔案伺服器,非常靈活。
跟住落嚟,當你需要喺另一部機或者另一個環境還原呢個 容器 應用時,就輪到 docker load 出場。你只需要將個 tar 檔搬過去,然後行 docker load -i my_backup.tar,Docker 就會將成個 映像檔 同佢嘅歷史層次,一氣呵成咁 導入 到本地嘅 image 儲存庫。呢個方法同 docker import 有咩分別呢?呢度要小心區分:docker save/load 係針對完整嘅 image,保存咗所有構建歷史、層次同元數據;而 docker export/import 就係針對運行緊嘅 container 檔案系統,匯出成一個檔案系統快照,再 導入 成一個新 image,但就會失去所有構建歷史同層次。所以,如果你係想完整 遷移 或者 備份 一個由 Dockerfile 精心構建出嚟嘅 image,用 save/load 先係正路。
喺實際工作流入面,尤其係處理 Kubernetes 集群或者持續整合(CI/CD)管道時,呢對指令嘅價值更加突出。想像一下,你嘅 CI 伺服器 build 出一個用於測試嘅 image,你想拎呢個 image 去本地做深度除錯,用 docker save 打包再 docker load 落自己部開發機,就唔使重新 build 過,慳返大量時間。又或者,當你需要將一組特定嘅服務 映像檔(例如一個微服務組合)交付俾客戶,直接俾一堆 tar 檔佢哋 導入,會比提供複雜嘅 Dockerfile 同 build 指令更直接可靠,確保環境完全一致。
最後提多個實用貼士:當你用 docker save 指令時,可以一次過打包多個 映像檔 落同一個 tar 檔,方便管理同 遷移 一整套相關服務。而喺 導入 之後,記得用 docker images 檢查下個 image 係咪已經喺列表度,同埋 tag 有冇出錯。有時 load 完個 image 會冇咗原本嘅 tag,變成
AboutcontainerProfessional illustrations
備份檔案格式解析
好啦,講到 備份檔案格式解析,呢個真係用好 docker save 指令嘅核心所在。好多朋友仔成日用 docker save -o my_image.tar nginx:latest 呢個指令,但係有冇深究過,究竟個出嚟嘅 .tar 檔入面係咩構造呢?其實呢個 歸檔文件 唔係一個神秘黑盒,佢係一個標準嘅 tar 格式歸檔,裏面包含咗完整 Docker 映像檔 嘅所有層次同元數據。簡單嚟講,當你用 docker save 將一個 image 打包時,Docker CLI 會將該映像檔嘅每一層(Layer)都係一個壓縮過嘅 tar.gz 檔案,再加上一個 manifest.json 同一個 repositories 檔案,全部一齊打包成一個大嘅 tar 檔。呢種格式係 Docker 官方指定嘅標準 映像檔備份 格式,目的就係為咗方便 遷移 同 檔案儲存。
拆開個 tar 檔嚟睇,你會發現佢嘅結構好清晰。最重要嘅就係個 manifest.json 檔案,你可以當佢係成個 映像檔 嘅「目錄」或者「清單」。呢個 JSON 檔案會詳細列明個歸檔入面包含邊幾個層次檔案,每個層次對應嘅 tar.gz 檔名係咩,以及呢個映像檔嘅配置檔案叫咩名。而 repositories 檔案就記錄咗映像檔嘅名稱同標籤,等陣 docker load 嘅時候,Docker 引擎就知道要將呢堆層次還原成一個叫咩名嘅映像檔。至於其他一大堆以長 ID 命名的 .tar.gz 檔案,就係實實在在嘅檔案系統層次,每一層都包含咗對上一層嘅修改,例如安裝咗某個軟件 (apt-get install)、複製咗某個檔案 (COPY in Dockerfile),或者修改咗某個配置。呢種分層結構正正係 Docker Image 嘅精髓,而 docker save 生成嘅 tar 檔就完美保留咗呢個結構。
咁點解要用 tar 格式呢?佢有咩好處?首先,tar 係一個好古老、好通用嘅 存檔 格式,幾乎所有作業系統(無論係 Ubuntu Server 定係其他 Linux 發行版)都原生支援,唔需要額外工具就可以解壓查看,對於 備份 同審查非常友好。其次,佢係一個線性歸檔,方便用傳統嘅備份工具進行增量備份或者直接儲存到雲端。最重要係,呢種格式係 Docker 生態圈內部同外部交換 映像檔 嘅「通用貨幣」。無論你係想將公司內部個自訂嘅 Nginx 映像檔由開發機搬去生產伺服器,定係想將一個整合好 couchdb 嘅應用環境 導入導出 到另一個唔連網嘅私有 Kubernetes 集群,用 docker save 整出嚟嘅 tar 檔就係最可靠嘅媒介。你唔使依賴 Docker Hub 或者私有的 Docker Registry,直接一個檔案「拎走就走」,特別適合網絡隔離環境或者需要永久歸檔嘅場景。
不過,有樣嘢要特別留意,就係 docker save 同 docker export 嘅分別,兩者出嚟嘅都係 tar,但內容天差地遠。docker save 係針對 映像檔,保存嘅係完整嘅、分層嘅映像檔結構,適合用 docker load 還原成映像檔,之後可以反覆用來創建 容器。而 docker export 係針對一個運行中嘅 容器,導出嘅係容器當時嘅檔案系統快照,係一個扁平嘅單層 tar,通常用 docker import 嚟 匯入 成一個新嘅、單一層嘅映像檔。所以,如果你嘅目標係完整 備份 一個可以重複部署嘅 Docker Image(包括佢嘅建構歷史同層次),咁你一定要用 docker save 指令,而唔好混淆用錯。
最後,俾啲實用建議大家。當你處理呢類 tar 備份檔時,可以用普通嘅 tar -tf backup.tar 指令去睇下個歸檔入面有咩檔案,了解一下結構,甚至解壓出嚟個 manifest.json 嚟研究下,對理解 Docker 點樣管理映像檔好有幫助。另外,如果你要備份嘅映像檔好大,可以考慮配合 gzip 或者 pigz 進行壓縮,例如 docker save nginx:latest | gzip > nginx_latest.tar.gz,可以節省大量 檔案儲存 空間,到要 load 嘅時候用 gunzip -c nginx_latest.tar.gz | docker load 一樣得。記住,掌握咗呢個 備份檔案格式 嘅底層原理,你唔單止係識用指令,而係真正理解點樣有效率地管理同 遷移 你嘅 容器 資產,無論係簡單嘅單機環境,定係複雜嘅 Kubernetes 集群,呢個知識都一樣咁實用。
AboutDockerfileProfessional illustrations
常見錯誤與解決方法
講到用 Docker CLI 嘅 docker save 同 docker load 指令去處理 映像檔 備份同遷移,好多 DevOps 同開發者都會遇到一啲「伏位」,如果唔小心處理,輕則浪費時間,重則令到成個部署流程出錯。呢度就同大家拆解幾個常見嘅錯誤同埋點樣解決佢哋,等你可以穩陣地做 容器 映像檔嘅 導入導出。
第一個最常見嘅錯誤,就係搞亂咗 docker save 同 docker export 嘅用途。有啲朋友以為兩者都係用來 備份,但其實原理同用途差好遠。docker save 係針對 Docker Image 本身,會將成個映像檔連同佢嘅歷史層次(layers)同 metadata 打包成一個 tar 歸檔文件。而 docker export 係針對一個運行緊或者停止咗嘅 Docker container,導出嘅係容器當時嘅文件系統快照,會丟失晒所有歷史同 metadata。如果你嘅目的係要保存同分享一個完整嘅 映像檔(例如你自訂嘅 Nginx 或者 Ubuntu 映像),之後仲想用 docker load 還原返去 Docker Registry 或者另一部機度用,咁你就一定要用 docker save。用錯 docker export 嘅話,你 load 返出嚟嘅只會係一個 tar 文件系統,唔係一個可運行嘅映像檔,之後用 docker import 入返去都只會變成一個新嘅、冇歷史嘅映像,好易令團隊協作或者 Kubernetes 部署時出現混亂。解決方法好簡單:記住口訣「save 對 image,export 對 container」,做 映像檔備份 遷移就一定用 save 同 load 呢對指令。
第二個常犯錯誤,係冇處理好 映像檔 嘅標籤(Tag)問題。當你用 docker save 指令時,例如 docker save -o my_backup.tar nginx:latest,個 tar 檔案入面係會包含埋個標籤資訊嘅。但係當你將呢個 tar 檔案搬去另一部機,用 docker load 指令還原時,有時會發現個映像檔個名變咗
第三個麻煩位,係關於 Docker Hub 或者私人 Docker Registry 嘅認證問題。假設你將一個來自私人倉庫嘅 映像檔(例如公司內部嘅 couchdb 映像)用 docker save 備份咗,然後搬去另一部需要認證先可以 pull 映像嘅機器。你用 docker load 還原個映像檔,表面上好成功,但當你基於呢個映像去運行容器,或者你嘅 Dockerfile 入面有 FROM 指令係指向同一個私人倉庫嘅其他層次時,Docker 可能會突然彈出認證錯誤。因為 docker load 只係還原咗映像檔嘅二進制數據,但某啲 metadata 或者依賴關係可能仍然需要同 registry 溝通。解決方法係,喺目標機器上,事先用 docker login 登入你嘅私人 Docker Registry,確保認證資訊已經設定好。另外,對於極度注重安全同離線部署嘅環境,可以考慮建立一個完全自包含嘅 映像檔,即係用 docker save 將所有相關嘅基底映像一齊打包,減少對外部 registry 嘅 runtime 依賴。
最後,唔少人會忽略 tar 檔案嘅完整性同儲存空間問題。用 docker save 生成嘅 歸檔文件 可以好大,尤其係當你 save 一個冇壓縮嘅多層次映像時。直接傳送一個幾十 GB 嘅 tar 檔,好容易因為網絡不穩而傳輸失敗,或者喺 檔案儲存 時佔用大量空間。一個好嘅解決方法係,喺 docker save 指令中加入壓縮,例如 docker save nginx:latest | gzip > nginx_latest.tar.gz。咁樣可以大幅減少 存檔 大小,方便網絡 遷移。不過要記住,用 docker load 還原時,就要對應地解壓:gunzip -c nginx_latest.tar.gz | docker load。另外,定期清理舊嘅、冇用嘅 tar 備份檔同埋 Docker 本機嘅懸空映像,都係保持系統健康嘅好習慣。總而言之,處理 Docker Image 嘅 導入導出,關鍵在於理解每個 指令 背後嘅原理,同埋預先規劃好 備份 同還原嘅流程,咁就可以避免大部分常見錯誤,令你管理 容器 映像更加得心應手。
AboutKubernetesProfessional illustrations
空間優化保存策略
講到空間優化保存策略,就一定要識得點樣聰明咁用 docker save 同 docker load 呢對指令。好多香港嘅開發者同 DevOps 朋友,成日都要處理大量 Docker Image,尤其係當你要將成個 Ubuntu 或者 Nginx 呢類基礎映像檔,甚至係你自己用 Dockerfile 砌出嚟嘅應用,搬去另一部機或者做長期備份。如果你就咁用 docker save 將個 映像檔 打包成一個 tar 檔,個檔案隨時大到你嚇親,尤其係當你冇做任何優化嘅時候。所以,一個精明嘅空間優化策略,絕對唔可以剩係識打指令,更要識得喺存檔同遷移嘅過程中,慳返每一分寶貴嘅磁碟空間同網絡頻寬。
首先,你要明白 docker save 預設係會將成個映像檔,連同佢所有嘅層(Layers)同歷史,打包成一個單一嘅 歸檔文件。呢個方法好處係完整,但壞處就係「肥」。點樣可以令個 tar 檔瘦身呢?第一個貼士就係:喺保存之前,先幫你嘅映像檔「減減肥」。例如,你可以用 docker image prune 指令,清走啲用唔著嘅懸空映像檔(dangling images),減輕負擔。更重要嘅係,喺你砌 Dockerfile 嘅時候,就要有空間意識,盡量用 .dockerignore 檔案去排除唔需要打包入映像檔嘅檔案(例如本地嘅 log 檔、暫存檔),咁樣砌出嚟個 Image 本身已經細好多,咁你用 docker save 打包出嚟嘅 tar 檔自然跟住細。
另一個實用嘅策略係分層處理同選擇性保存。唔好乜都一次過 save。假設你有一個好複雜嘅應用,入面有 Couchdb 資料庫、自己寫嘅應用程式碼,同埋一個 Nginx 做前端。你可以考慮將佢哋拆分成唔同嘅服務,各自有獨立嘅 Dockerfile 同 映像檔。當你需要備份或者遷移去 Kubernetes 環境時,你就可以只係 save 有改動過嘅自定義映像檔,而基礎映像檔(例如官方的 Ubuntu)就可以直接喺新環境從 Docker Hub 或者私人 Docker Registry 拉取。咁樣,你遷移嘅 tar 檔體積就會細好多,速度亦快好多。記住,docker save 同 docker load 呢對導入導出工具,最適合用嚟搬運你自訂嘅、唔方便從公開Registry 攞到嘅映像檔。
對於進階用家,仲可以玩 docker export 同 docker import 呢套組合。不過要小心,呢套指令同 save/load 好唔同。docker export 係將一個運行緊(或者已停止)嘅 Docker container 嘅檔案系統狀態,導出成一個 tar 歸檔,佢會丟失晒所有歷史層、元數據同埋 Dockerfile 嘅設定。咁樣導出嚟嘅存檔,有可能會比原裝 Image 細,但代價係你失去咗 Docker 層級架構嘅好處。之後你要用 docker import 將呢個 tar 檔變返做一個新嘅映像檔。呢個方法比較適合你只想「快靚正」地凍結同遷移某個容器嘅某一刻狀態,而唔係想保存整個可重建嘅映像檔。但對於空間優化嚟講,都係一個可以考慮嘅選項,尤其係當你個容器入面嘅改動好少嘅時候。
最後,講到實際操作,你一定要識得點樣用 Docker CLI 嘅參數去配合你嘅策略。例如,用 docker save -o 指定輸出檔案名係基本。如果你想將多個相關嘅映像檔打包埋同一個 tar 檔入面,你可以在 docker save 後面跟多個映像檔名,咁樣可以減少檔案數量,方便管理。到你要用 docker load 還原嘅時候,就可以一次過將成個歸檔文件入面嘅所有映像檔導入返去本地嘅 Docker 儲存庫。記住,喺進行任何大規模映像檔備份或遷移之前,最好先喺測試環境試一次 load,確保個 tar 檔冇損壞,同埋所有依賴都正常。總括嚟講,空間優化唔係一個魔法,而係由建造 Dockerfile 開始,到選擇正確嘅導入導出工具,再到有策略地打包同清理,每一步都要有慳位嘅意識,咁先至可以喺2026年呢個數據爆炸嘅時代,有效率地管理你嘅容器世界。
AboutNginxProfessional illustrations
企業級備份實務指南
好喇,而家我哋就針對「企業級備份實務指南」呢個核心,深入傾下點樣將 Docker Image 備份呢件事,由個人開發者層面,提升到真正符合企業營運需求嘅嚴謹實務。喺企業環境入面,備份絕對唔係偶然手動執行下 docker save 指令咁簡單,而係一套有策略、有自動化、有版本管理同埋有恢復驗證嘅完整流程。
首先,企業級備份必須要脫離「人手操作」嘅階段。你唔能夠指望工程師記得每個禮拜去手打指令將重要嘅 映像檔 匯出成 tar 檔。實務上,一定要將 docker save 指令整合到 CI/CD Pipeline 或者獨立嘅排程腳本入面。例如,你可以設定每晚自動將所有標記為「production」嘅 Docker Image,用 docker save 指令打包,然後上傳到企業內部嘅雲端儲存空間或者專用嘅備份伺服器。呢個過程關鍵在於自動化同埋記錄,每次備份都要有清晰嘅 Log,記錄低備份咗邊個 映像檔、Tag 係咩、歸檔文件 嘅 Checksum 值,同埋存放位置。呢啲 metadata 對於日後嘅恢復同審計至關重要。
其次,淨係備份 Image 本身係唔夠嘅。一個完整嘅企業級備份方案,必須要包含同 映像檔 相關嘅元數據。呢度就牽涉到 Dockerfile 同埋建置上下文(build context)。試諗下,如果你只係用 docker save 備份咗一個 Nginx 加載咗自訂設定檔嘅 Image,兩年後需要重建,但你得返個 tar 檔,搵唔返當時個 Dockerfile 同入面嘅設定檔,咁就大鑊喇。所以,真正嘅實務係要將 Dockerfile 同相關腳本,一齊用 Git 呢類版本控制系統管理好,並且喺備份記錄入面,明確關聯返對應嘅 Git Commit Hash。當你需要用 docker load 指令還原 Image 時,你可以同時拎返當時構建佢嘅源碼同設定,做到完全可追溯。
另外,針對唔同來源嘅 映像檔,備份策略都要調整。對於從 Docker Hub 或者私服 Docker Registry 拉取返嚟嘅基礎 Image(例如 Ubuntu、官方 couchdb),你需要評估係咪需要本地備份。如果企業對外網存取有嚴格限制,或者需要確保即使上游 Registry 出問題都唔影響營運,咁你就需要定期將呢啲基礎 Image 都拉取落嚟,再用 docker save 做一次本地存檔。對於自家構建嘅業務 Image,就更加要嚴格執行「每個成功部署到生產環境嘅版本都必須有備份」嘅原則。呢度可以善用 Docker CLI 配合標籤策略,例如為每個生產版本 Image 打上像「backup-20261027」嘅標籤,然後再進行匯出操作。
講到恢復,備份嘅價值就係喺出事嘅時候體現。企業級實務必須包含定期嘅恢復演練。你不能假定用 docker load 指令導入返個 tar 檔就等於成功。你需要建立一個獨立嘅測試環境,定期(例如每季)隨機抽選一個備份檔,進行恢復測試。過程包括:用 docker load 指令將 映像檔 導入;用呢個 Image 啟動一個 容器;驗證容器內嘅應用程式是否能夠正常運行。如果係數據庫類嘅 Image(例如 couchdb),仲要測試數據恢復流程。呢個演練可以確保你嘅備份檔係有效嘅,而且團隊熟悉整個 導入導出 同恢復流程。
最後,要考慮到容器編排平台嘅情況。如果企業用緊 Kubernetes,咁你嘅備份思維就要再擴闊一層。除咗備份底層嘅 Docker Image,你仲需要備份 Kubernetes 嘅部署描述檔(YAML 文件),因為入面定義咗 Pod、Service、ConfigMap 等配置。實務上可以將 docker save 備份 Image,同埋 kubectl get deployment -o yaml 導出描述檔呢兩個動作,結合到同一個備份腳本入面,形成一個完整嘅應用程式快照。記住,容器 本身係無狀態嘅,狀態喺數據卷(Volume)入面,所以 Volume 嘅備份係另一個獨立但必須同步考慮嘅課題,不能同 映像檔備份 混淆。
總而言之,企業級嘅 Docker Image 備份實務,核心係將散亂嘅指令變成系統化、自動化、可審計嘅流程。由 docker save 指令嘅自動執行,到關聯 Dockerfile 版本,再到制定針對基礎 Image 同自建 Image 嘅策略,最後必須加上定期恢復驗證,先可以話係一個有深度、能真正支撐業務連續性嘅 備份 方案。喺2026年嘅今日,工具同平台已經好成熟,關鍵在於企業有冇將呢套最佳實踐落實到日常運維守則之中。
AboutUbuntuProfessional illustrations
鏡像遷移完整流程
好啦,咁我哋就深入講下鏡像遷移完整流程。成個流程其實就係將一個Docker環境入面嘅映像檔,打包、搬去第二個地方,再喺新環境度重新用返。呢個過程對於伺服器升級、災難復原,或者將個容器由本地開發機搬上Kubernetes 叢集都好重要。成個流程可以拆做三個核心步驟:備份(Save)、轉移、同還原(Load),而最常用嘅工具就係 Docker CLI 入面嘅 docker save 同 docker load 呢對指令。
首先講第一步:備份,即係將Docker Image 變成一個可以拎來拎去嘅歸檔文件。點解唔直接用 Docker Hub 或者私服 Docker Registry 做中轉呢?有時係因為網絡隔離(Air-gapped Environment),或者你想將某個特定版本嘅映像檔做一個永久存檔,又或者你想將修改過但未想推上Registry嘅映像檔交俾同事。呢個時候,docker save 指令就大派用場。基本用法好簡單,就係 docker save -o <輸出檔案名>.tar <映像檔名稱:標籤>。例如你想將一個用Dockerfile 建構出來嘅自訂Nginx映像檔打包,就可以打 docker save -o my_nginx_v1.tar my-nginx:latest。個 -o 參數就係指定輸出嘅tar 檔案名。記住,呢個指令會將映像檔連同佢所有嘅層(Layers)一齊打包成一個單一嘅歸檔文件,非常完整。如果你想一次過打包多個映像檔落同一個檔案都得,只要喺指令後面列出晒所有映像檔名就得,例如將 Ubuntu 同 couchdb 嘅映像檔一齊打包。
跟住落來就係轉移呢一步。呢步反而最簡單,就係將生成嘅那個 .tar 檔案,用任何你熟悉嘅方法搬去目標機器。你可以用 USB 手指、用 SFTP、用 rsync,甚至用內部網絡共享都得。重點係要確保檔案完整性,尤其係當個映像檔好大嘅時候,搬完最好檢查下 SHA 值,避免傳輸中途損壞。呢個檔案儲存同搬運過程,就係成個遷移流程嘅實體動作。
最後就係還原,亦都係喺新環境度令個映像檔翻生嘅步驟。用到嘅指令係 docker load。喺目標伺服器度,你只需要用 docker load -i my_nginx_v1.tar,個 Docker 引擎就會自動解開個 tar 歸檔文件,將入面嘅所有映像檔層載入到本地嘅映像檔儲存庫。完成之後,你用 docker images 指令就可以見到佢,同你原本嘅映像檔一模一樣,跟住你就可以用 docker run 去啟動容器啦。要留意,docker load 同另一個指令 docker import 好唔同。docker load 係還原一個完整嘅Docker Image(保留晒所有歷史同元數據),而 docker import 係將一個由 docker export 導出嘅容器快照變成一個新映像檔,會失去好多歷史層級同設定,所以一般映像檔遷移都係用 save/load 呢對組合,而唔係 export/import。
為咗令大家更清楚,我舉個實際啲嘅例子。假設你公司要將一個內部用嘅舊版應用程式,從一部就來退役嘅 CentOS 實體機,搬去一部新嘅、行緊 Kubernetes 嘅雲端伺服器。個應用程式係用一個自訂嘅 Docker Image 來行嘅。你嘅完整遷移流程會係咁:首先,喺舊機用 docker save 將個重要嘅映像檔打包成 legacy_app_backup.tar;然後,用安全嘅方法(例如內部 SCP)將呢個 tar 檔案上傳到新伺服器;最後,喺新伺服器,喺部署去 Kubernetes 之前,先用 docker load 將個映像檔載入到負責建構或者測試嘅工作節點嘅本地 Docker 環境度。確認無誤後,你就可以修改你的 Kubernetes YAML 檔案,指定使用呢個剛剛載入嘅本地映像檔,或者更專業啲,將佢推送到一個內部私有嘅 Docker registry,等成個叢集都可以拉取到。成個過程,你就完成咗一次脫離公共網絡、安全可控嘅鏡像遷移。
有幾個實用貼士要記住:第一,打包時最好用具體嘅版本標籤,而唔係 latest,避免混淆。第二,docker save 出來嘅檔案可能好大,記得預留足夠磁碟空間,同埋可以考慮用 gzip 即時壓縮(例如 docker save my-image:tag | gzip > my-image.tar.gz),還原時就用 gunzip -c my-image.tar.gz | docker load)。第三,如果你嘅映像檔本身係從多個Docker Registry(包括 Docker Hub)拉下來嘅,用 save/load 方法遷移就唔使擔心新環境網絡訪問唔到原本嘅 Registry 嘅問題,真正做到自給自足。總而言之,掌握 docker save 同 docker load 呢對導入導出利器,就好似為你嘅容器同映像檔備份買咗份保險,無論係日常備份定係環境遷移,都能夠淡定處理。
AboutcouchdbProfessional illustrations
Load 後容器確認步驟
好啦,當我哋用 docker load 指令,將一個 tar 格式嘅 映像檔備份 檔案成功 導入 到本地嘅 Docker 環境之後,係咪就等於大功告成,可以即刻開工呢?答案係「唔係㗎!」。呢個時候,進行一系列嘅 容器確認步驟 就至關重要,目的係要確保 load 入嚟嘅 image 唔單止存在,而且係完整、可用,同埋符合我哋嘅預期。如果跳過呢一步,好有可能會喺之後運行 容器 或者部署上 Kubernetes 嘅時候,先至發現有古靈精怪嘅問題,到時先嚟搞就會更麻煩。
首先,最直接嘅第一步,梗係要即刻用 Docker CLI 嘅 docker images 指令,去確認個 映像檔 係咪真係喺我哋嘅本地 映像檔 清單入面。呢個動作就好似你搬屋,將啲箱(tar 檔案)搬入屋之後,點都要開張清單對一對,睇吓有冇少咗件。你要特別留意個 映像檔 嘅名稱(REPOSITORY)同標籤(TAG),因為有時喺 docker save 打包嘅過程,或者係檔案 遷移 嘅時候,個名可能會出錯或者變咗
跟住落嚟,淨係見到個名喺清單度都未夠,我哋仲要深入檢查吓個 映像檔 嘅詳細資訊。你可以用 docker inspect
檢查完靜態資訊,下一步就一定要做動態測試——就係試行一個 容器 出嚟。呢個係最實際嘅 確認步驟。你可以用一個簡單嘅指令,例如 docker run -d --rm --name test_container
另外,有啲情況我哋 docker load 嘅 映像檔,本身係預咗要同其他服務一齊協作嘅。例如,一個自家開發嘅應用 映像檔,可能需要連去另一個 容器 嘅數據庫。咁喺測試時,你就要模擬返呢個環境,或者至少確認到 映像檔 入面嘅應用程式係可以正常啟動,而唔係一開就因為連唔到數據庫而崩潰。呢個時候,你可能需要簡單修改吓環境變數,或者用 docker exec 指令進入測試緊嘅 容器 入面,行一啲基本指令(例如 curl localhost 或者檢查吓關鍵進程),去驗證入面嘅服務狀態。
最後,仲有一個好實際嘅考慮點:版本同依賴關係。如果你係為咗 遷移 或者災難復原而做 映像檔備份 同 導入,咁你就要確保 load 入嚟嘅 映像檔,同你目前嘅 Docker 環境版本相容。雖然大多數時候都冇問題,但係如果你用緊 Docker 好新嘅版本,而個 映像檔 係好耐之前用舊版本 docker save 打包落嚟嘅,有極少數情況可能會出現兼容性警告。同樣地,如果你個 映像檔 係用嚟喺 Kubernetes 入面用嘅,你亦都可以用 kubectl 嘅 --dry-run=client 選項去模擬生成一個 Pod 設定,嚟測試個 映像檔 名稱係咪可以被成功引用。
總而言之,docker load 成功只係代表個檔案層面嘅 導入導出 動作完成咗。之後嘅 容器確認步驟,就係要將呢個靜態嘅 歸檔文件,變成一個你信心十足、可以隨時用嚟運行服務嘅動態資產。由檢查清單、深入審視詳細設定、到實際試行容器同檢查日誌,每一步都係確保你嘅 備份 同 遷移 流程真正可靠嘅關鍵。養成 load 完必驗嘅習慣,可以幫你節省日後大量嘅除錯時間,令到 Docker 嘅 映像檔 管理更加順暢。
AboutdockerProfessional illustrations
進階參數應用實例
講到進階參數應用實例,我哋就唔可以再停留喺最基本嘅「docker save image名 > backup.tar」呢個層面。2026年嘅Docker生態,對於映像檔備份同遷移嘅需求更加複雜,尤其係當你要處理大量映像檔、或者需要將特定版本嘅軟件部署到隔離網絡(例如係無網環境嘅Kubernetes集群)時,識得靈活運用docker save同docker load嘅進階參數,可以話係必備技能。今次我就同大家深入拆解幾個實戰例子,等你可以將Docker Image嘅備份、存檔同導入導出玩到出神入化。
首先,我哋嚟睇下點樣用一個指令,批量處理多個映像檔。假設你個開發團隊用緊一套微服務,每個服務都有自己嘅Docker Image,例如一個用Nginx做前端,一個用CouchDB做數據庫,再加一個自定義嘅應用程式Image。如果你要將成個環境打包遷移到另一部機或者另一個私有Docker Registry,逐個save同load會做到手軟。呢個時候,你就可以用「--output」或者簡寫「-o」參數,配合指定多個Image名稱。例如你想將你嘅「myapp-nginx:v2.1」、「myapp-couchdb:latest」同埋「backend-api:2026-release」呢三個映像檔打包成一個歸檔文件,個指令可以係「docker save -o full_stack_backup.tar myapp-nginx:v2.1 myapp-couchdb:latest backend-api:2026-release」。噉樣做嘅好處係,一個tar檔案就包含晒所有嘢,管理同傳送都方便好多。之後要用嘅時候,只需要用「docker load -i full_stack_backup.tar」,就可以一次過將所有映像檔導入返去本地嘅Docker映像檔庫,唔使擔心遺漏或者版本錯配。
另一個進階實例,就係點樣同Dockerfile嘅建構過程結合。有時我哋喺Dockerfile入面,可能會用「FROM」指令去引用一啲嚟自特定私有Docker Registry或者Docker Hub嘅基底映像檔,例如Ubuntu 24.04 LTS。但係,如果部建構伺服器(例如係你嘅CI/CD流水線)因為網絡政策問題,無法直接存取外網嘅Docker Hub,咁點算呢?其中一個穩陣嘅做法,就係預先將呢啲必需嘅基底映像檔,用docker save指令打包好。關鍵在於,你要確保save出嚟嘅tar檔案,保留晒所有層(layers)同埋元數據。之後,你可以將呢個tar檔案放喺建構環境度,喺執行docker build之前,先用「docker load -i base_images.tar」將所需嘅映像檔載入。噉樣,你嘅Dockerfile入面嘅「FROM ubuntu:24.04」就會喺本地找到相關映像檔,建構過程就可以順利進行,完全唔受外網限制影響。呢種做法對於確保建構環境穩定、可重現,甚至係做離線部署,都非常有用。
跟住落嚟,我要講一個好重要但容易被忽略嘅參數應用:處理懸空映像檔(dangling images)同埋中間層。當你頻繁建構同更新映像檔,系統可能會積存好多冇標籤嘅中間層映像檔,佢哋會食咗你唔少磁碟空間。雖然docker save主要用嚟打包有標籤嘅映像檔,但喺一啲進階備份場景,例如你要完整備份某個時間點嘅整個Docker環境(包括所有容器嘅底層),你可能需要用到「docker save」配合映像檔ID去打包呢啲懸空層。不過,更常見同實用嘅進階做法,係結合「docker image ls」嘅過濾功能,再管道(pipe)去處理。例如,你可以用一啲腳本命令,找出所有屬於某個特定項目嘅映像檔(標籤有共同前綴),然後自動生成一條docker save指令去打包佢哋。呢個過程雖然唔係單靠一個Docker CLI參數完成,但係體現咗進階應用嘅精髓:將Docker指令同其他命令行工具靈活結合,去解決實際問題。
最後,我哋要分清楚「docker save」同「docker export」嘅應用場景,因為喺規劃備份策略時,呢個區分好關鍵。「docker save」係針對「映像檔」,而「docker export」係針對運行中或已停止嘅「容器」。呢個分別直接影響你備份同遷移嘅目標。例如,你有一個正在運行緊、裡面已經配置好晒應用程式同數據嘅CouchDB容器,如果你嘅目標係遷移個「容器」嘅當前文件系統狀態(可能包含運行中嘅數據),你可能會考慮用docker export將容器匯出為一個tar檔案,然後用docker import導入成一個新嘅映像檔。但係,你要明白,噉樣做出嚟嘅映像檔,會失去原來Dockerfile嘅建構歷史、層結構同埋一啲元數據,變成一層過嘅扁平映像檔。相反,如果你要遷移嘅係可以重複建構、有版本管控嘅「映像檔」本身(例如你公司內部建構好嘅Nginx映像檔,裡面包含咗自定義配置),咁用docker save同docker load先係正道,因為佢可以完美保留所有層同歷史,方便之後更新同追溯。所以,喺制定你嘅容器備份策略時,一定要諗清楚你最終想還原嘅,究竟係一個可重複部署嘅「藍圖」(映像檔),定係一個包含某個瞬間狀態嘅「實例」(容器)。