您好,登錄后才能下訂單哦!
一、什么是容器
容器是一種基礎(chǔ)工具,泛指任何可以用于容納其他物品的工具,可以部分或完全封閉,被用于容納、儲存、運(yùn)輸物品;物體可以被放置在容器中,而容器可以保護(hù)內(nèi)容物;
人類使用容器的歷史至少有十萬年。
二、虛擬化的實(shí)現(xiàn)
1、主機(jī)級虛擬化
此實(shí)現(xiàn)是在宿主機(jī)上安裝虛擬機(jī)管理軟件,而后虛擬出N個完整的系統(tǒng),每一個系統(tǒng)都有自己的內(nèi)核。有兩種類型的實(shí)現(xiàn)
1.1、Type-I類型(在宿主機(jī)上直接安裝Virtual machine Manager,不需要在宿主機(jī)上安裝操作系統(tǒng))
xen、ESX/ESXI
1.2、Type-II類型(需要基于宿主機(jī)的操作系統(tǒng)之上安裝Virtual Machine Manager)
VMware Workstation、kvm、VirtualBox
2、容器級別虛擬化
此實(shí)現(xiàn)不在為每一個虛擬機(jī)創(chuàng)建單獨(dú)的內(nèi)核,而是通過在宿主機(jī)的內(nèi)核上將6種資源通過內(nèi)核機(jī)制(namespaces)隔離出來,每一個namespace是一個單獨(dú)的容器(虛擬機(jī))
至今位置,整個linux領(lǐng)域的容器技術(shù),就是靠內(nèi)核級的6個namespaces、chroot和Cgroups共同實(shí)現(xiàn)
2.1、Linux Namespaces
namespace | 系統(tǒng)調(diào)用參數(shù) | 隔離內(nèi)容 | 內(nèi)核版本 |
UTS | CLONE_NEWUTS | 主機(jī)名和域名 | 2.6.19 |
IPC | CLONE_NEWIPC | 信號量、消息隊(duì)列和共享內(nèi)存 | 2.6.19 |
PID | CLONE_NEWPID | 進(jìn)程編號 | 2.6.24 |
Network | CLONE_NEWNET | 網(wǎng)絡(luò)設(shè)備、網(wǎng)絡(luò)棧、端口等 | 2.6.29 |
Mount | CLONE_NEWNS | 掛載點(diǎn),文件系統(tǒng) | 2.4.19 |
User | CLONE_NEWUSER | 用戶和用戶組 | 3.8 |
2.2、Control Groups(CGroups)的作用
容器化技術(shù)的隔離機(jī)制是靠namespaces實(shí)現(xiàn),而容器化的資源分配靠的是在內(nèi)核級通過CGroups機(jī)制實(shí)現(xiàn),它會把系統(tǒng)級的資源分成多個組,然后把每一個組內(nèi)的資源量指派分配到特定的namespace的進(jìn)程上去來實(shí)現(xiàn)
2.2.1、CGroups的功能
blkio | 塊設(shè)備IO |
cpu | CPU |
cpuacct | CPU資源使用報告 |
cpuset | 多處理器平臺上的CPU集合,有兩種分派方式,一種是比例,一種是分核數(shù) |
devices | 設(shè)備訪問 |
freezer | 掛起或恢復(fù)任務(wù) |
memory | 內(nèi)存用量及報告 |
perf_event | 對cgroup中的任務(wù)進(jìn)行統(tǒng)一性能測試 |
net_cls | cgroup中的任務(wù)創(chuàng)建的數(shù)據(jù)報文的類別標(biāo)識符 |
2.3、LXC(Linux Container)
LXC是最早除了Vserver之外,真正把完整的容器技術(shù)用一組簡易使用的工具和模板來極大的簡化了容器技術(shù)使用的一個方案。LXC靠一組工具包幫我們快速的實(shí)現(xiàn)了創(chuàng)建名稱空間,利用模板完成內(nèi)部所需要的各種文件的安裝。同時,還有些工具能夠自動完成chroot切換,于是,就可以使用多個并行的用戶空間,而每一個用戶空間,就像我們之前使用的虛擬機(jī),是一個獨(dú)立的系統(tǒng)。
三、Docker的誕生
LXC雖然極大的簡化了容器技術(shù)的使用,但比起過去使用虛擬機(jī)來講,它的復(fù)雜程度是沒有多大降低的,隔離性也沒有虛擬機(jī)好、在大規(guī)模使用上和分發(fā)上都不方便。但好處是它能夠讓每一個用戶空間的進(jìn)程直接使用宿主機(jī)的性能,中間沒有額外開銷。于是就出現(xiàn)了Docker
3.1、Docker是LXC的增強(qiáng)版,它本身不是容器,而是容器的易用工具。容器是linux內(nèi)核中的技術(shù),Docker只是把這種技術(shù)在使用上簡易普及了。Docker在早期的版本其核心就是LXC的二次封裝發(fā)行版。Docker利用LXC做容器管理引擎,但是在創(chuàng)建容器時,不在使用模板去安裝生成。而是通過鏡像技術(shù)(把一個操作系統(tǒng)用戶空間所需要使用到的組件事先編排好,并整體打包成一個文件,image文件),鏡像文件集中放在一個倉庫中。當(dāng)需要創(chuàng)建容器時,Docker調(diào)用LXC的工具lxc-create。但是不在通過lxc的模板去安裝,而是連接到鏡像服務(wù)器上下載匹配的鏡像文件,而后基于鏡像啟動容器。所以,Docker極大的簡化了容器的使用難度。以后我們創(chuàng)建啟動容器,只需要一個命令,docker-run,docker-stop就可以啟動停止一個容器了。為了使整個容器使用更加易于管理,Docker采用了一種更精巧的限制機(jī)制,在一個容器內(nèi),只運(yùn)行一個進(jìn)程。而LXC是把一個容器當(dāng)一個用戶空間使用,可以運(yùn)行N個進(jìn)程,所以使得我們管理容器進(jìn)程極為不便。Docker在鏡像構(gòu)建底層使用了分層構(gòu)建,聯(lián)合掛載。這種好處就是在以后的鏡像分發(fā)上就沒有那么龐大。可以自由組合鏡像實(shí)現(xiàn)不同環(huán)境的掛載
2.3、Docker容器引擎的更迭
Docker早起是基于LXC容器管理引擎實(shí)現(xiàn),當(dāng)后來成熟之后,Docker自建了一個容器引擎叫l(wèi)ibcontainer,后來CNCF的介入,Docker又研發(fā)了一個工業(yè)化標(biāo)準(zhǔn)的容器引擎,叫runC,目前所使用的新版Docker,所使用的容器引擎就是RunC。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。