如何修改docker官方鏡像內(nèi)部內(nèi)容并重新build鏡像
應(yīng)用場景
在某些情況下,我們可能需要修改官方的docker鏡像,不過,首先需要搞明白,鏡像:image 和容器:container 的區(qū)別:
- 鏡像image:類似于java中的類
- 容器container:類似于java中的對象
因此,我們往往從docker hub下載官方鏡像,然后,把鏡像部署到服務(wù)器,然后,我們真正用到該服務(wù)的時候,往往是根據(jù)該鏡像生成一個容器,然后運(yùn)行容器。
和java中類和對象的概念很像,鏡像就是類,根據(jù)類生成對象后,真正使用的是對象,對應(yīng)docker就是容器。
修改官方docker鏡像
首先,明白了前面關(guān)于鏡像和容器的概念,我們就會明白,我們需要修改的是鏡像,如果我們只是在容器運(yùn)行時做改動,則不會影響到鏡像。
下面就以我的一個例子來詳細(xì)說一下:
我的需求是更新matomo鏡像中的Apache http server版本
1.下載鏡像
首先,下載鏡像,可以從docker hub或者從自己的服務(wù)器下載。
我本來想著,既然更新的是matomo中的Apache http server版本,那我直接把matomo更新到最新不就好了?
可惜,結(jié)果不如我所想,最新的matomo中,Apache仍然版本過低,所以,只能修改官方鏡像了
2.啟動容器
查找所有鏡像:
docker images
找到你需要修改的鏡像,保存下鏡像id
然后,進(jìn)入你要修改的鏡像(其實(shí)就是運(yùn)行該鏡像的容器):
docker run -it ‘鏡像id' /bin/sh
此時,你會進(jìn)入容器內(nèi)部的shell命令行,其實(shí)就是一個微型的Linux系統(tǒng),然后就可以用Linux命令操作該容器,我在這里是升級了Apache版本:
你可以在這里做你需要的改動
apt-get update //獲取更新信息 apt-get upgrade //更新版本
如果發(fā)生以下錯誤
$ apt-get update
Reading package lists... Done
E: Could not open lock file /var/lib/apt/lists/lock - open (13: Permission denied)
E: Unable to lock directory /var/lib/apt/lists/
說明權(quán)限問題,有可能你不知道密碼,所以,此時,保持當(dāng)前窗口中容器的運(yùn)行,不要動,再打開一個終端。
在新的終端中,輸入
docker ps -a
根據(jù)鏡像id,找到你在另一個終端中正在運(yùn)行的容器
注意:
為什么要掛著另一個終端,就是因?yàn)椋械娜萜魅绻顺?,就找不到容器id了,下面的命令需要用到容器id
docker exec -u root -it <container_id> /bin/bash
此時就通過管理員賬戶登陸進(jìn)了容器,然后在依次執(zhí)行上述的apt-get update和apt-get upgrade就行了
3.生成新鏡像
- 修改后,先執(zhí)行exit退出容器
- 然后查找剛才運(yùn)行的容器信息:
docker ps -a
用docker commit命令從容器打包成鏡像:
其中,備注和作者其實(shí)不重要,隨便寫,容器id就是你在上一步查找容器信息時獲取的容器id,找你剛才修改的容器,鏡像repository就是你打包生成的新鏡像的repository
docker commit -m “備注” -a “作者” 容器id 鏡像repository
最后,再次docker images就能看到你剛剛生成的新鏡像了
最后加個小功能,如何修改鏡像的tag:
docker tag IMAGEID(鏡像id) REPOSITORY:TAG(倉庫:標(biāo)簽)
總結(jié)
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Docker Compose網(wǎng)絡(luò)配置指南分享
本文詳細(xì)介紹了Docker網(wǎng)絡(luò)配置的各個方面,包括基礎(chǔ)網(wǎng)絡(luò)架構(gòu)、自定義網(wǎng)絡(luò)配置、典型場景配置、高級網(wǎng)絡(luò)技巧、調(diào)試與診斷以及最佳實(shí)踐,通過多個實(shí)戰(zhàn)案例和常見問題解決方案,幫助讀者更好地理解和應(yīng)用Docker網(wǎng)絡(luò)技術(shù)2025-11-11
使用docker?compose一鍵部署WordPress博客的方法
這篇文章主要介紹了docker-compose一鍵部署WordPress博客,本文分步驟給大家講解的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-04-04
docker安裝部署 onlyoffice的詳細(xì)過程
本文給大家分享docker安裝部署 onlyoffice的詳細(xì)過程,通過圖文并茂實(shí)例相結(jié)合給大家分享安裝Docker Desktop及如何進(jìn)入BIOS設(shè)置CPU的虛擬化,感興趣的朋友一起看看吧2021-06-06
Docker compose up -d與Docker restart的區(qū)別
本文主要介紹了Docker compose up -d與Docker restart的區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07

