最近看了一些Docker相關的知識,對製作dockerfile的流程有一些不明白的地方。
假如要製作一個基於Ubuntu的包含Nginx、MySQL、PHP等服務的dockerfile,我現在的流程是:
docker run一個基本的Ubuntu映像
更新系統依賴套件,如:apt-get update,在文字文件記錄執行的命令
安裝Nginx,在文字文件記錄安裝Nginx執行的步驟
....
等於說是先把流程跑一遍,記錄下所有執行的指令,然後再把這些步驟複製到dockerfile裡。
個人覺得這樣做是不對的,請問大家都是怎麼做的? ?
很正確呀。假如你非常熟悉所有的流程,自然可以直接寫Dockerfile。但這種事情基本上不能絕對的保證,特別是Docker的基礎系統鏡像大多都非常精簡,一些軟體的依賴包都需要進行下載安裝,所以自己透過容器實踐一次搭建的過程雖然有些耗時,但相對來說反而要比空想寫Dockerfile要節省時間。
通常來說編寫Dockerfile是這樣一個流程:
透過容器預演安裝過程,記錄下搭建指令
對安裝指令進行匯總、最佳化,編寫Dockerfile
嘗試使用Dockerfile建立映像,檢查是否有問題
透過建構的鏡像建立容器,確保其中的程式能夠正確使用
透過參考docker hub上現成的dockerfile 再根據自己的需求修改,這樣的效率會更高一些,從頭寫dockerfile只能按照樓上的兄弟那樣操作了,我稱之為「錄影機」方式。