鍍金池/ 問答/Linux/ 對于docker中鏡像和容器的些許困惑

對于docker中鏡像和容器的些許困惑

最近在學(xué)docker,一開始自以為自己能分清鏡像和容器的區(qū)別,以為鏡像就是 配置好的且安裝好各種依賴的操作系統(tǒng),就是個環(huán)境。而容器是運(yùn)行在那個配置好的操作系統(tǒng)之上的某個進(jìn)程。

但后來我發(fā)現(xiàn),鏡像不只只是操作系統(tǒng),還可以是某個應(yīng)用,比如nginx,redis等等。那從nginx或redis鏡像run起來的容器是什么?從操作系統(tǒng)建立起來的容器我能理解,但是從一個應(yīng)用建立起來的容器,有點(diǎn)理解不了。

那么問題來了:
1,是不是說,我寫了一個程序,打包編譯成一個可執(zhí)行文件,這個可執(zhí)行文件是個鏡像,那從這個可執(zhí)行文件run起來的容器是啥?這個可執(zhí)行文件的進(jìn)程?
2,如果鏡像是nginx或者redis或者我自己寫的一個可執(zhí)行文件,那么這個鏡像是不是同時也得包含操作系統(tǒng)等等底層的東西?
3,現(xiàn)在已經(jīng)容器化的公司,是不是把代碼編譯成一個(可執(zhí)行文件)鏡像,然后直接從這個鏡像來建立容器?而不是用操作系統(tǒng)鏡像

回答
編輯回答
舊言

我的理解是分為兩種情況,我舉例來說明:
1、以php為例,php項目啟動依賴php環(huán)境,nginx環(huán)境,如果是光光打包成一個鏡像顯然是不合理的,我的做法是:起一個php的容器,暴露其端口,供nginx容器使用,nginx容器映射其端口到宿主機(jī),并且宿主機(jī)將其工作目錄掛載到容器之中,這樣宿主機(jī)就可以訪問啟動的項目內(nèi)容;
1、以node項目為例,node項目僅僅依賴于node環(huán)境,我的做法是:將工作目錄掛載到鏡像中打包起來,拉起來這個鏡像即可,但是這樣需要每次在修改文件之后重新build鏡像.

以上

2018年6月13日 20:03