Docker一鍵將運(yùn)行中的容器打包成鏡像并導(dǎo)出操作
前言
在日常使用 Docker 過程中,我們常常會(huì)遇到這樣一個(gè)場(chǎng)景:
啟動(dòng)了一個(gè)容器,在里面做了一些環(huán)境配置、安裝了依賴、調(diào)試好了應(yīng)用,現(xiàn)在想把它的當(dāng)前狀態(tài)保存下來,以便以后再次使用,或者遷移到其他服務(wù)器上。
這篇文章將手把手教你如何把一個(gè)運(yùn)行中的容器保存成鏡像,并導(dǎo)出到文件。
一、背景知識(shí)
在 Docker 中,幾個(gè)容易混淆的命令:
docker commit
將容器當(dāng)前狀態(tài)“快照”成一個(gè)新的鏡像。docker save
將鏡像導(dǎo)出成 tar 文件(保留鏡像層信息和 metadata)。docker export
將容器的文件系統(tǒng)導(dǎo)出為 tar(不保留歷史層和元數(shù)據(jù))。docker load
從docker save導(dǎo)出的 tar 文件導(dǎo)入鏡像。docker import
從docker export導(dǎo)出的 tar 文件創(chuàng)建新鏡像(無歷史層)。
簡(jiǎn)單理解:
保留鏡像信息用 commit + save,只想導(dǎo)出文件系統(tǒng)就用 export。
二、操作流程
1. 啟動(dòng)并運(yùn)行容器
例如,我們先啟動(dòng)一個(gè)臨時(shí)容器:
docker run -it --name mycontainer ubuntu:20.04 /bin/bash
進(jìn)入容器后,你可能會(huì)執(zhí)行:
apt update && apt install -y vim curl
現(xiàn)在容器狀態(tài)已經(jīng)發(fā)生了變化。
2. 將容器保存為鏡像
當(dāng)你想保存當(dāng)前容器狀態(tài)時(shí):
docker commit mycontainer myimage:latest
這里的含義是:
- 將容器
mycontainer生成一個(gè)新鏡像myimage:latest。 - 鏡像會(huì)記錄當(dāng)時(shí)的文件系統(tǒng)、環(huán)境變量等。
可以驗(yàn)證一下:
docker images
輸出類似:
REPOSITORY TAG IMAGE ID CREATED SIZE myimage latest a1b2c3d4e5f6 5 seconds ago 250MB
3. 導(dǎo)出鏡像為 tar 文件
docker save -o myimage.tar myimage:latest
這樣會(huì)生成一個(gè) myimage.tar 文件,你可以發(fā)送給別人或存檔。
4. 在另一臺(tái)機(jī)器導(dǎo)入鏡像
復(fù)制 myimage.tar 到另一臺(tái)服務(wù)器后執(zhí)行:
docker load -i myimage.tar
導(dǎo)入成功后:
docker images
就可以看到 myimage:latest 出現(xiàn)在新環(huán)境中了。
三、完整命令匯總
# 將容器保存成鏡像 docker commit mycontainer myimage:latest # 將鏡像導(dǎo)出成 tar 包 docker save -o myimage.tar myimage:latest # 傳輸?shù)搅硪慌_(tái)機(jī)器 scp myimage.tar user@remote:/path # 另一臺(tái)機(jī)器加載鏡像 docker load -i myimage.tar
四、docker commitvsdocker export的區(qū)別
| 功能 | docker commit + docker save | docker export |
|---|---|---|
| 保留歷史層 | ? | ? |
| 保留鏡像 metadata(如 CMD、ENV) | ? | ? |
| 導(dǎo)出內(nèi)容 | 鏡像(包括層和配置) | 容器文件系統(tǒng)快照 |
| 導(dǎo)入方式 | docker load | docker import |
如果你是為了遷移或復(fù)用鏡像,請(qǐng)選擇 commit + save;
如果只是想要容器的純文件系統(tǒng)數(shù)據(jù),才用 export。
五、總結(jié)
通過 docker commit 和 docker save,我們可以輕松地將運(yùn)行中的容器狀態(tài)保存下來并導(dǎo)出成鏡像文件,方便在不同環(huán)境中部署。
這是在開發(fā)調(diào)試階段、遷移環(huán)境或者快速備份時(shí)非常實(shí)用的技巧。
小建議:如果是長(zhǎng)期維護(hù)的項(xiàng)目,建議將重要配置寫到 Dockerfile 中,從源代碼構(gòu)建鏡像,而不是依賴
commit生成鏡像。這樣更易于版本管理和復(fù)現(xiàn)。
?? 參考命令速查表:
docker commit <容器名/ID> <鏡像名:標(biāo)簽> # 保存容器為鏡像 docker save -o <文件名.tar> <鏡像名:標(biāo)簽> # 導(dǎo)出鏡像 docker load -i <文件名.tar> # 導(dǎo)入鏡像 docker export <容器名/ID> > <文件名.tar> # 導(dǎo)出容器文件系統(tǒng) docker import <文件名.tar> <鏡像名:標(biāo)簽> # 從文件系統(tǒng)生成鏡像
到此這篇關(guān)于Docker一鍵將運(yùn)行中的容器打包成鏡像并導(dǎo)出操作的文章就介紹到這了,更多相關(guān)Docker運(yùn)行的容器打包成鏡像導(dǎo)出內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
如何使用docker+frp進(jìn)行內(nèi)網(wǎng)穿透
這篇文章主要介紹了使用docker+frp進(jìn)行內(nèi)網(wǎng)穿透,在公網(wǎng)上的ubuntu系統(tǒng)需要配置相關(guān)操作,本文給大家介紹的非常詳細(xì),需要的朋友可以參考下2024-04-04
harbor如何更改網(wǎng)段(docker-compose)
文章介紹了解決Harbor安裝后網(wǎng)段沖突問題的步驟,首先,查看當(dāng)前Docker網(wǎng)橋并獲取網(wǎng)橋ID,然后,關(guān)閉Harbor服務(wù),刪除所有容器和網(wǎng)橋,接著,修改harbor的docker-compose.yaml文件,添加新的網(wǎng)絡(luò)配置,最后,驗(yàn)證服務(wù)是否正常運(yùn)行,并確保修改不會(huì)被覆蓋2026-03-03
常用的8個(gè)應(yīng)用和中間件的Docker運(yùn)行示例詳解
Portainer是一個(gè)輕量級(jí)的管理 UI ,可讓你輕松管理不同的 Docker 環(huán)境(Docker 主機(jī)或 Swarm 群集),這篇文章主要介紹了常用的8個(gè)應(yīng)用和中間件的Docker運(yùn)行示例,需要的朋友可以參考下2024-03-03
docker daemon遠(yuǎn)程連接設(shè)置詳解
本篇文章主要介紹了docker daemon遠(yuǎn)程連接設(shè)置詳解,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-04-04
如何解決安裝docker的yum工具時(shí)報(bào)錯(cuò)問題
在安裝Docker時(shí)遇到y(tǒng)um工具錯(cuò)誤可通過更新yum源解決,先卸載舊Docker,備份原yum源,下載新的CentOS-Base.repo文件到指定目錄,安裝yum工具后,配置Docker的yum源,國(guó)內(nèi)用戶建議使用aliyun源以避免訪問異常,安裝并啟動(dòng)Docker,校驗(yàn)是否成功2024-09-09
如何將Docker Registry存儲(chǔ)中的Docker鏡像遷移到Harbor
這篇文章主要介紹了如何將Docker Registry存儲(chǔ)中的Docker鏡像遷移到Harbor問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2025-05-05
Docker Alpine鏡像時(shí)區(qū)問題完美解決方案
這篇文章主要介紹了Docker Alpine鏡像時(shí)區(qū)問題完美解決方案,本文給大家分享兩種解決方案供大家參考,需要的朋友可以參考下2021-04-04
Docker下配置PostgreSQL主從復(fù)制的詳細(xì)步驟指南
本文詳細(xì)介紹了在Docker環(huán)境下配置PostgreSQL主從復(fù)制的過程,包括環(huán)境準(zhǔn)備、主從庫配置、同步驗(yàn)證和故障處理等內(nèi)容,通過使用Docker簡(jiǎn)化了Pgsql實(shí)例的部署與管理,提高了系統(tǒng)的可用性和數(shù)據(jù)安全性,文章還提供了詳細(xì)的步驟和示例代碼,適合新手和運(yùn)維人員參考2026-04-04

