對于 Docker 用戶來說照雁,最好的情況是不需要自己創(chuàng)建鏡像饼记。幾乎所有常用的數(shù)據(jù)庫凡橱、中間件、應用軟件等都有現(xiàn)成的 Docker 官方鏡像或其他人和組織創(chuàng)建的鏡像台汇,我們只需要稍作配置就可以直接使用苛骨。
使用現(xiàn)成鏡像的好處除了省去自己做鏡像的工作量外,更重要的是可以利用前人的經(jīng)驗苟呐。特別是使用那些官方鏡像痒芝,因為 Docker 的工程師知道如何更好的在容器中運行軟件。
當然牵素,某些情況下我們也不得不自己構(gòu)建鏡像严衬,比如:
找不到現(xiàn)成的鏡像,比如自己開發(fā)的應用程序笆呆。
需要在鏡像中加入特定的功能请琳,比如官方鏡像幾乎都不提供 ssh。
所以本節(jié)我們將介紹構(gòu)建鏡像的方法赠幕。同時分析構(gòu)建的過程也能夠加深我們對前面鏡像分層結(jié)構(gòu)的理解俄精。
Docker 提供了兩種構(gòu)建鏡像的方法:
docker commit 命令
Dockerfile 構(gòu)建文件
docker commit
docker commit 命令是創(chuàng)建新鏡像最直觀的方法,其過程包含三個步驟:
運行容器
修改容器
將容器保存為新的鏡像
舉個例子:在 ubuntu base 鏡像中安裝 vi 并保存為新鏡像榕堰。
第一步竖慧, 運行容器
-it參數(shù)的作用是以交互模式進入容器,并打開終端逆屡。412b30588f4a是容器的內(nèi)部 ID圾旨。
安裝 vi
確認 vi 沒有安裝。
安裝 vi康二。
保存為新鏡像
在新窗口中查看當前運行的容器碳胳。
silly_goldberg是 Docker 為我們的容器隨機分配的名字。
執(zhí)行 docker commit 命令將容器保存為鏡像沫勿。
新鏡像命名為ubuntu-with-vi挨约。
查看新鏡像的屬性味混。
從 size 上看到鏡像因為安裝了軟件而變大了。
從新鏡像啟動容器诫惭,驗證 vi 已經(jīng)可以使用翁锡。
以上演示了如何用 docker commit 創(chuàng)建新鏡像。然而夕土,Docker并不建議用戶通過這種方式構(gòu)建鏡像馆衔。原因如下:
這是一種手工創(chuàng)建鏡像的方式,容易出錯怨绣,效率低且可重復性弱角溃。比如要在 debian base 鏡像中也加入 vi,還得重復前面的所有步驟篮撑。
更重要的:使用者并不知道鏡像是如何創(chuàng)建出來的减细,里面是否有惡意程序。也就是說無法對鏡像進行審計赢笨,存在安全隱患未蝌。
既然 docker commit 不是推薦的方法,我們干嘛還要花時間學習呢茧妒?
原因是:即便是用 Dockerfile(推薦方法)構(gòu)建鏡像萧吠,底層也 docker commit 一層一層構(gòu)建新鏡像的。學習 docker commit 能夠幫助我們更加深入地理解構(gòu)建過程和鏡像的分層結(jié)構(gòu)桐筏。