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