您好,登錄后才能下訂單哦!
本篇內容介紹了“docker怎么制作鏡像”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
使用過docker的都知道dockerfile,其用于定義制作鏡像的流程,由一系列命令和參數構成的腳本,這些命令應用于基礎鏡像并最終創建一個新的鏡像。
有時候,我們想在原有鏡像基礎上修改、增加文件,由于國內網絡原因,重新制作鏡像會很慢,甚至失敗;或者根本不知道鏡像的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窗口,用于給容器內復制一個測試文件:
docker cp ingressgroup-upstream.tmpl a298fe62a4f9:/etc/nginx/conf.d/include-server-map/
復制進去后,當要將其移動到其他位置時,報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怎么制作鏡像”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。