docker容器commit打包越來越大的原因分析及解決
docker容器commit打包越來越大
一、背景和原因
docker容器就是以便于移植和部署著稱。那么在docker使用過程中,少不了對容器進(jìn)行反復(fù)的的打包和部署。
為了追求容器完整性,往往使用docker commit 容器ID 新鏡像名:tag 來操作,再使用save/load對其進(jìn)行打包/部署鏡像。
但是根據(jù)上面的命令操作往往發(fā)現(xiàn),即使很小的容器經(jīng)過上述步驟操作幾次后得到的鏡像仍舊會變得很大很大(即使容器內(nèi)的文件都被刪掉了)。
這主要是由于:
docker鏡像的構(gòu)建方式是以層的概念來實(shí)現(xiàn)的,在容器內(nèi)所做的所有操作都會在構(gòu)建鏡像時運(yùn)行一遍,每一個操作所涉及到的內(nèi)存空間, 都會成為鏡像文件的一部分。
看到的大都是壓縮容器根目錄制作基礎(chǔ)鏡像或者操作Dockerfile之類的,相對就比較復(fù)雜,或者不是我們想要的答案。
以下參考文章中的方法1給出比較詳細(xì)好用的解決方法步驟。
二、解決方法
為了減少鏡像文件所占內(nèi)容空間,采用export直接打包容器,然后通過import導(dǎo)入鏡像,繼而展開成容器。
1、可采用export命令打包容器生成鏡像文件
docker export -o name.tar 容器ID 或者docker export 容器ID > name.tar
注:此時必須記下當(dāng)前容器的COMMAND內(nèi)容,后面要用到。
2、加載成鏡像
生成的tar鏡像包就可以進(jìn)行移植和部署,假設(shè)換了一臺機(jī)器后部署該鏡像,加載鏡像可采用的命令:
docker import name.tar 容器name:tag
3、將鏡像展開成容器
如果正常使用的docker run命令時將會出現(xiàn)報(bào)錯:
docker: Error response from daemon: No command specified.
See 'docker run --help'.
此時就體現(xiàn)第1步中需要記住的COMMAND內(nèi)容的重要性了。
如果原環(huán)境還在,可通過 docker ps --no-trunc 查看你原容器的COMMAND。假設(shè)原容器的COMMAND為"bash"。
將原來使用export導(dǎo)出鏡像時的容器COMMAND內(nèi)容追加到要啟動容器后面即可:
docker run -itd --restart=always --name xxx xxx:latest "bash"
總結(jié)
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
前端實(shí)現(xiàn)自動化部署docker+Jenkins的完整過程
在現(xiàn)代前端開發(fā)中自動化部署變得越來越重要,通過使用Docker、Jenkins和Nginx,我們可以實(shí)現(xiàn)高效的前端自動化部署,這篇文章主要介紹了前端實(shí)現(xiàn)自動化部署docker+Jenkins的完整過程,需要的朋友可以參考下2025-07-07
docker容器分配固定ip的實(shí)現(xiàn)示例
如果不固定ip,每次主機(jī)重啟后,docker會動態(tài)給容器分配ip,導(dǎo)致redis容器的IP自動換了 ,然后還得去改配置就很煩,本文主要介紹了docker容器分配固定ip的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下2023-12-12
基于 Docker 搭建 Anythingllm的詳細(xì)過程
本文詳細(xì)介紹了如何在本地Windows 11企業(yè)版上使用Docker搭建和部署Anythingllm,包括Ollama和Docker的安裝步驟,以及配置和使用Anythinllm的具體方法,感興趣的朋友一起看看吧2025-03-03
docker+ddns實(shí)現(xiàn)動態(tài)域名的示例代碼
本文主要介紹了Docker使用ddns-go實(shí)現(xiàn)動態(tài)域名,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-11-11
用Docker部署Fenrus導(dǎo)航頁:打造專屬的極簡高效瀏覽器首頁
該文章介紹了使用Fenrus和cpolar搭建個性化的瀏覽器首頁的方法,包括使用Docker部署Fenrus、配置cpolar實(shí)現(xiàn)公網(wǎng)訪問等步驟,并詳細(xì)闡述了部署過程和使用方法,感興趣的朋友跟隨小編一起看看吧2026-04-04
docker創(chuàng)建鏡像并上傳云端服務(wù)器的實(shí)現(xiàn)示例
鏡像是一種輕量級、可執(zhí)行的獨(dú)立軟件包,用來打包軟件運(yùn)行環(huán)境和基于運(yùn)行環(huán)境開發(fā)的軟件,本文介紹了如何使用Docker創(chuàng)建鏡像,并將其上傳到云端,感興趣的可以了解一下2023-08-08
Docker Volumn容器間共享數(shù)據(jù)的實(shí)現(xiàn)
這篇文章主要介紹了Docker Volumn容器間共享數(shù)據(jù)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-01-01

