docker容器commit打包越來越大的原因分析及解決
docker容器commit打包越來越大
一、背景和原因
docker容器就是以便于移植和部署著稱。那么在docker使用過程中,少不了對(duì)容器進(jìn)行反復(fù)的的打包和部署。
為了追求容器完整性,往往使用docker commit 容器ID 新鏡像名:tag 來操作,再使用save/load對(duì)其進(jìn)行打包/部署鏡像。
但是根據(jù)上面的命令操作往往發(fā)現(xiàn),即使很小的容器經(jīng)過上述步驟操作幾次后得到的鏡像仍舊會(huì)變得很大很大(即使容器內(nèi)的文件都被刪掉了)。
這主要是由于:
docker鏡像的構(gòu)建方式是以層的概念來實(shí)現(xiàn)的,在容器內(nèi)所做的所有操作都會(huì)在構(gòu)建鏡像時(shí)運(yùn)行一遍,每一個(gè)操作所涉及到的內(nèi)存空間, 都會(huì)成為鏡像文件的一部分。
看到的大都是壓縮容器根目錄制作基礎(chǔ)鏡像或者操作Dockerfile之類的,相對(duì)就比較復(fù)雜,或者不是我們想要的答案。
以下參考文章中的方法1給出比較詳細(xì)好用的解決方法步驟。
二、解決方法
為了減少鏡像文件所占內(nèi)容空間,采用export直接打包容器,然后通過import導(dǎo)入鏡像,繼而展開成容器。
1、可采用export命令打包容器生成鏡像文件
docker export -o name.tar 容器ID 或者docker export 容器ID > name.tar
注:此時(shí)必須記下當(dāng)前容器的COMMAND內(nèi)容,后面要用到。
2、加載成鏡像
生成的tar鏡像包就可以進(jìn)行移植和部署,假設(shè)換了一臺(tái)機(jī)器后部署該鏡像,加載鏡像可采用的命令:
docker import name.tar 容器name:tag
3、將鏡像展開成容器
如果正常使用的docker run命令時(shí)將會(huì)出現(xiàn)報(bào)錯(cuò):
docker: Error response from daemon: No command specified.
See 'docker run --help'.
此時(shí)就體現(xiàn)第1步中需要記住的COMMAND內(nèi)容的重要性了。
如果原環(huán)境還在,可通過 docker ps --no-trunc 查看你原容器的COMMAND。假設(shè)原容器的COMMAND為"bash"。
將原來使用export導(dǎo)出鏡像時(shí)的容器COMMAND內(nèi)容追加到要啟動(dòng)容器后面即可:
docker run -itd --restart=always --name xxx xxx:latest "bash"
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
如何修改docker官方鏡像內(nèi)部內(nèi)容并重新build鏡像
這篇文章主要介紹了如何修改docker官方鏡像內(nèi)部內(nèi)容并重新build鏡像問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-08-08Docker安裝運(yùn)行apache2服務(wù)器做圖片服務(wù)器的方法
這篇文章主要介紹了Docker安裝運(yùn)行apache2服務(wù)器做圖片服務(wù)器的方法,需要的朋友可以參考下2017-06-06docker倉庫登錄及配置insecure-registries的方法
這篇文章主要介紹了docker倉庫登錄配置insecure-registries的方法,docker客戶端如果配置中添加了insecure-registary配置,就不需要在docker 客戶端配置上對(duì)應(yīng)證書,如果不配置要在/etc/docker/certs.d/目錄中添加對(duì)應(yīng)證書才能正常登錄,感興趣的朋友跟隨小編一起看看吧2022-07-07講解使用Docker搭建Java Web運(yùn)行環(huán)境
本篇文章詳細(xì)的介紹了使用Docker搭建Java Web運(yùn)行環(huán)境,想要學(xué)習(xí)docker的同學(xué)可以了解一下。2016-11-11docker批量啟動(dòng)關(guān)閉所有容器的操作
這篇文章主要介紹了docker批量啟動(dòng)關(guān)閉所有容器的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-03-03Docker?Compose構(gòu)建Jenkins的實(shí)現(xiàn)
本文主要介紹了Docker?Compose構(gòu)建Jenkins的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-06-06群暉NAS利用Docker容器搭建KMS激活服務(wù)器實(shí)現(xiàn)激活windows系統(tǒng)和office(操作步驟)
本文跟大家分享一下如何利用群暉NAS的Docker容器套件搭建KMS服務(wù)器,并演示如何利用我們自己的KMS服務(wù)器激活Windows操作系統(tǒng)與Microsoft Office,感興趣的朋友跟隨小編一起看看吧2021-05-05