一:什么是容器
簡單來說,就是一個(gè)運(yùn)行在你主機(jī)上的一個(gè)進(jìn)程隔離的沙盒進(jìn)程雏蛮。隔離級(jí)別為內(nèi)核命名空間和cgroups命名空間涎嚼。
從使用上來說: 容器是鏡像的運(yùn)行實(shí)例。
使用說明:
1:你可以使用API或者CLI來創(chuàng)建關(guān)閉移動(dòng)啟動(dòng)停止或者刪除挑秉。
2: 可以運(yùn)行在本地法梯,虛擬機(jī),或者云服務(wù)器衷模。
3: 兼容所有系統(tǒng)
4:容器之間隔離鹊汛,可以每個(gè)容器使用單獨(dú)的軟件,二進(jìn)制文件阱冶,配置文件刁憋。
二:什么是容器的鏡像
當(dāng)啟動(dòng)一個(gè)容器時(shí),使用了一個(gè)隔離的文件系統(tǒng)木蹬。而這個(gè)自定義系統(tǒng)就是由容器鏡像提供至耻。由于鏡像為容器提供文件系統(tǒng),所以必須包含運(yùn)行應(yīng)用所需的一切(依賴镊叁,配置尘颓,腳本,二進(jìn)制文件)晦譬。該鏡像還包含容器的其他配置疤苹,如環(huán)境變量,要運(yùn)行的默認(rèn)命令和其他元數(shù)據(jù)敛腌。
從使用上來說:鏡像是容器的“系統(tǒng)盤”卧土,我們可以用這個(gè)基礎(chǔ)的“系統(tǒng)盤”來安裝多個(gè)系統(tǒng)。這個(gè)“系統(tǒng)盤”必須為容器提供基礎(chǔ)的運(yùn)行環(huán)境和一些框架依賴像樊。而當(dāng)容器一旦使用“系統(tǒng)盤”安裝完了系統(tǒng),那么和“系統(tǒng)盤”的交互就完結(jié)了尤莺,在容器上安裝新的軟件,不會(huì)影響系統(tǒng)盤生棍,也不會(huì)影響別的容器颤霎。
PS:所以這里可以了解到,其實(shí)鏡像并非docker獨(dú)創(chuàng),windows在裝機(jī)的時(shí)候也會(huì)用到后綴為.iso的鏡像文件友酱。
擴(kuò)展:
關(guān)于chroot晴音,如果你熟悉這個(gè)命令,那么可以將容器視為chroot的擴(kuò)展版本粹污,多出了一些使用時(shí)的隔離段多。
三:單應(yīng)用單容器的使用方案
把docker的容器當(dāng)做一臺(tái)虛擬機(jī),然后把所有的環(huán)境都在容器里進(jìn)行搭建(如jdk,nginx,mysql,php)壮吩。
優(yōu)勢(shì):
只需要一個(gè)容器进苍,不用維護(hù)容器間的通訊。
當(dāng)做一臺(tái)虛擬機(jī)使用鸭叙,更容易上手觉啊。
多個(gè)服務(wù)啟停都在一個(gè)容器里進(jìn)行操作,更易調(diào)試沈贝。
缺點(diǎn):
耦合程度高杠人,各個(gè)服務(wù)互相依賴
占用內(nèi)存高,各個(gè)服務(wù)占用的內(nèi)存導(dǎo)致容器內(nèi)存居高不下
服務(wù)復(fù)用率低宋下,如nginx這種通用服務(wù)嗡善,就無法單獨(dú)給別的容器用
鏡像層數(shù)高,一層層堆疊的服務(wù)学歧,如果合并到鏡像上罩引,會(huì)導(dǎo)致鏡像變大
四:單應(yīng)用多容器的使用方案
把各個(gè)服務(wù)單獨(dú)拆出來,單容器只做一件事枝笨。比如MySQL容器袁铐,Nginx容器等。然后使用Docker Compose對(duì)容器進(jìn)行編排横浑,以滿足應(yīng)用的需求剔桨。
優(yōu)點(diǎn):
統(tǒng)一管理,容器成為一個(gè)臨時(shí)性的系統(tǒng)徙融,可以隨時(shí)銷毀重建洒缀,更新依賴。
服務(wù)復(fù)用率高欺冀,一個(gè)服務(wù)可以對(duì)多個(gè)容器提供树绩。
鏡像大小低,可以用dokcer compose命令快速部署脚猾。
優(yōu)化空間大葱峡,后續(xù)可以用多階段構(gòu)建砚哗,將運(yùn)行時(shí)依賴和構(gòu)建時(shí)依賴分開龙助。
缺點(diǎn):
需要docker-compose的基礎(chǔ)知識(shí),上手稍慢
五:構(gòu)建屬于你自己的鏡像
https://docs.docker.com/develop/develop-images/baseimages/
這里有官方文檔對(duì)構(gòu)建自己所需要鏡像的方式。就像搭積木提鸟,我們先選一個(gè)基礎(chǔ)鏡像(例如debain/centOS)军援。然后在基礎(chǔ)鏡像上加入我們?nèi)粘i_發(fā)所需的依賴和軟件。構(gòu)建完成后把鏡像文件推送到docker的倉庫或者第三方云托管平臺(tái)称勋。后面在開發(fā)的時(shí)候就可以隨用隨取了胸哥。