docker映象製作必備技能

2022-06-29 01:24:10 字數 2068 閱讀 9440

使用過docker的都知道dockerfile,其用於定義製作映象的流程,由一系列命令和引數構成的指令碼,這些命令應用於基礎映象並最終建立乙個新的映象。可參考往期文章學習:docker基礎知識整理

有時候,我們想在原有映象基礎上修改、增加檔案,由於國內網路原因,重新製作映象會很慢,甚至失敗;或者根本不知道映象的dockerfile長什麼樣。改動很小情況下,可以用以下方式製作映象。

拿k8s負載均衡器元件ingress-nginx:0.24.1版本為例:

如果我們修改了其原始碼,並編譯生成nginx-ingress-controller二進位制檔案,可以用以下方式進行製作新映象。

首先用命令:

docker run -ti --rm k8s-deploy/nginx-ingress-controller:0.24.1 bash
將映象執行起來。其中-ti表示開啟乙個互動輸入終端;--rm表示執行停止後自動清理。

執行後可以看到預設使用者為www-data,a298fe62a4f9表示容器id

我們可以在容器裡建立目錄:

重新開啟乙個shell視窗,用於給容器內複製乙個測試檔案:

複製進去後,當要將其移動到其他位置時,報permission denied許可權不足,因為預設為www-data使用者,複製到容器內的ingressgroup-upstream.tmpl屬主:屬組也是root,如果不把root修改為www-data,肯定會報沒許可權的錯。

通過以下命令重新執行映象:

docker run -ti --rm -u 0 k8s-deploy/nginx-ingress-controller:0.24.1 bash
-u 0代表用root使用者執行容器,而不是dockerfile裡指定的使用者,這樣執行後可以看到使用者為root,記錄容器id:ffdc80f3cce7

重新執行複製操作:

此時就可以隨意移動和修改檔案的許可權、屬組、屬主了。

修改完畢後,執行以下命令將映象commit到本地倉庫:

docker commit ffdc80f3cce7 k8s-deploy/nginx-ingress-controller:0.24.1-temp
commit後跟的是容器id,最後跟的是新映象名稱。push命令將新映象推到遠端harbor倉庫。

執行新製作的映象,可以看到我們修改的檔案。

這種方式一般用於測試,弊端是可能會導致映象越來越大。

製作docker映象

命令docker build,從零開始來建立乙個新的映象。為此,我們需要建立乙個 dockerfile 檔案,其中包含一組指令來告訴 docker 如何構建我們的映象 指定基礎映象 from openjdk 8 dockerfile使用變數 可以在dockerfile中進行引用 工作目錄 指定ver...

製作docker映象

基礎環境說明 cat etc redhat release centos release 6.8 final 設定 docker 映象源 yum install y yum priorities rpm ivh rpm import etc pki rpm gpg rpm gpg key epel ...

Docker映象製作

copy on write 寫時複製 docker映象實際上乙個檔案系統,但只有頂層可以讀寫。dockerfile是軟體的原材料,docker映象是軟體的交付品,而docker容器則可以認為是軟體的執行態。從應用軟體的角度來看,dockerfile docker映象與docker容器分別代表軟體的三...