Docker一鍵將運(yùn)行中的容器打包成鏡像并導(dǎo)出操作
前言
在日常使用 Docker 過程中,我們常常會(huì)遇到這樣一個(gè)場景:
啟動(dòng)了一個(gè)容器,在里面做了一些環(huán)境配置、安裝了依賴、調(diào)試好了應(yīng)用,現(xiàn)在想把它的當(dāng)前狀態(tài)保存下來,以便以后再次使用,或者遷移到其他服務(wù)器上。
這篇文章將手把手教你如何把一個(gè)運(yùn)行中的容器保存成鏡像,并導(dǎo)出到文件。
一、背景知識
在 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)建新鏡像(無歷史層)。
簡單理解:
保留鏡像信息用 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ù)用鏡像,請選擇 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í)用的技巧。
小建議:如果是長期維護(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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Docker安裝iTop快速搭建IT服務(wù)管理平臺(tái)
本文主要介紹了Docker安裝iTop快速搭建IT服務(wù)管理平臺(tái),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-01-01
Docker Registry搭建私有鏡像倉庫的實(shí)現(xiàn)方法
這篇文章主要介紹了Docker Registry搭建私有鏡像倉庫的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10
Docker tomcat的設(shè)置內(nèi)存大小配置方式
這篇文章主要介紹了Docker tomcat的設(shè)置內(nèi)存大小配置方式,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-03-03
Jenkins Docker靜態(tài)agent節(jié)點(diǎn)的構(gòu)建過程
這篇文章主要介紹了Jenkins Docker靜態(tài)agent節(jié)點(diǎn)的構(gòu)建,靜態(tài)節(jié)點(diǎn)就是通過java -jar這條命令去啟動(dòng)起來就可以了,本文通過圖文實(shí)例相結(jié)合給大家介紹的非常詳細(xì),需要的朋友可以參考下2021-10-10
Docker部署HertzBeat實(shí)時(shí)監(jiān)控告警系統(tǒng)
HertzBeat是一款開源的實(shí)時(shí)監(jiān)控告警系統(tǒng),本文就來介紹一下Docker部署HertzBeat實(shí)時(shí)監(jiān)控告警系統(tǒng),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-11-11
關(guān)于docker清理Overlay2占用磁盤空間的問題(親測有效)
使用Docker過程中,長時(shí)間運(yùn)行服務(wù)容器,導(dǎo)致不能進(jìn)行上傳文件等操作,今天通過本文給大家詳細(xì)介紹下docker清理Overlay2占用磁盤空間的相關(guān)知識,感興趣的朋友一起看看吧2022-03-03

