溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Docker第一回(虛擬化介紹)

發(fā)布時間:2020-07-13 22:21:26 來源:網(wǎng)絡(luò) 閱讀:936 作者:yacai1990 欄目:云計算

一、什么是容器

容器是一種基礎(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
PIDCLONE_NEWPID進(jìn)程編號2.6.24
NetworkCLONE_NEWNET網(wǎng)絡(luò)設(shè)備、網(wǎng)絡(luò)棧、端口等2.6.29
MountCLONE_NEWNS掛載點(diǎn),文件系統(tǒng)2.4.19
UserCLONE_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。

向AI問一下細(xì)節(jié)

免責(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)容。

AI