docker是一個(gè)應(yīng)用容器引擎,可以讓開發(fā)者打包他們的應(yīng)用和依賴包到一個(gè)容器中。
docker鏡像就相當(dāng)于對(duì)程序+程序依賴的庫(kù)進(jìn)行直接打包。
docker中的鏡像,類似于java中的Class,容器,是基于這個(gè)鏡像構(gòu)建出的實(shí)例,類似于根據(jù)Class構(gòu)造出的一個(gè)個(gè)實(shí)例對(duì)象。
dicker相較于VM:小快,不需要關(guān)心具體到哪個(gè)linux系統(tǒng),支持的系統(tǒng)很多,開發(fā)的平臺(tái)。
局限性,不包含數(shù)據(jù)、日志、數(shù)據(jù)庫(kù),通常放在Docker容器外。
只用于計(jì)算,存儲(chǔ)交給別人。
工作流程:
1、啟動(dòng)docker
2、下載鏡像到本地
3、啟動(dòng)docker容器實(shí)例
Docker核心技術(shù):
1、Namespace —> 實(shí)現(xiàn)Container的進(jìn)程、網(wǎng)絡(luò)、消息、文件系統(tǒng)和主機(jī)名的隔離。
2、Cgroup —> 實(shí)現(xiàn)對(duì)資源的配額和調(diào)度。
Docker特性:
文件系統(tǒng)隔離:每個(gè)進(jìn)程容器運(yùn)行在一個(gè)完全獨(dú)立的根文件系統(tǒng)里。
資源隔離:系統(tǒng)資源,像CPU和內(nèi)存等可以分配到不同的容器中,使用cgroup。
網(wǎng)絡(luò)隔離:每個(gè)進(jìn)程容器運(yùn)行在自己的網(wǎng)路空間,虛擬接口和IP地址。
日志記錄:Docker將收集到和記錄的每個(gè)進(jìn)程容器的標(biāo)準(zhǔn)流(stdout/stderr/stdin),用于實(shí)時(shí)檢索或者批量檢索
變更管理:容器文件系統(tǒng)的變更可以提交到新的鏡像中,并可重復(fù)使用以創(chuàng)建更多的容器。無(wú)需使用模板或者手動(dòng)配置。
交互式shell:Docker可以分配一個(gè)虛擬終端并且關(guān)聯(lián)到任何容器的標(biāo)準(zhǔn)輸出上,例如運(yùn)行一個(gè)一次性交互shell。
Dockerfile是一個(gè)創(chuàng)建鏡像所有命令的文本文件,包含了一條條指令和說明, 每條指令構(gòu)建一層,,通過docker build命令,根據(jù)Dockerfile的內(nèi)容構(gòu)建鏡像,因此每一條指令的內(nèi)容, 就是描述該層如何構(gòu)建。有了Dockefile,,就可以制定自己的docker鏡像規(guī)則,只需要在Dockerfile上添加或者修改指令,,就可生成docker 鏡像。