一種定義docker鏡像啟動腳本的簡單方法
自定義鏡像有兩種方法,首先是編寫dockerfile,其次是將容器提交為鏡像。兩種方式都可能需要定義鏡像啟動腳本,將容器中需要配置的環(huán)境變量,需要啟動的進程都準(zhǔn)備好。這樣別人用鏡像時可以直接使用。定義鏡像的啟動腳本有很多辦法,有些需要根據(jù)鏡像所屬的linux版本自身的啟動機制來實施。但是此類方法有個問題,不同的linux發(fā)行版,相同發(fā)行版的不同版本,相同發(fā)行版相同版本的不同裁剪力度的基礎(chǔ)鏡像都會導(dǎo)致啟動腳本千差萬別。
本文介紹一種簡單的方法,且好理解和非常通用,幾乎所有的linux鏡像都可以如法炮制,屢試不爽!假設(shè)我們有了一個容器,在將容器提交為鏡像之前,在容器根目錄新建一個腳本文件,在腳本文件中將啟動命令寫好。下面例子的啟動工作就是將vsftpd啟動。
新建腳本
vi /run.sh
chmod a+x /run.sh
文件中內(nèi)容如下
/usr/sbin/vsftpd
tail -f /run.sh
重點在于最后一行,它將自身顯示在標(biāo)準(zhǔn)輸出中且不會返回,相當(dāng)于一直在運行,這樣就避免了腳本run.sh執(zhí)行完之后自然結(jié)束,導(dǎo)致容器自動退出。接著就將該容器提交為鏡像。再寫一個dockerfile,基于前面的鏡像再做一個鏡像,dockerfile的最后一行指定啟動命令。
CMD /run.sh
新生成的鏡像,只要被執(zhí)行且不指定執(zhí)行時的啟動命令,其就會默認(rèn)執(zhí)行腳本run.sh。舉例如下
docker run -d --name some-container-name some-image-name