“容器”無(wú)疑是近年IT業(yè)界的buzzword,不過(guò),在不同語(yǔ)境下,它對(duì)不同的人有不同的含義。在本文中,我將從Linux容器、容器鏡像、寫時(shí)復(fù)制等方面來(lái)闡釋容器的具體含義。
專注于為中小企業(yè)提供網(wǎng)站建設(shè)、成都網(wǎng)站建設(shè)服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)新田免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了上千家企業(yè)的穩(wěn)健成長(zhǎng),幫助中小企業(yè)通過(guò)網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。傳統(tǒng)意義上的Linux容器實(shí)際上只是Linux系統(tǒng)上的普通進(jìn)程。這些進(jìn)程組使用資源約束(控制組,即[cgroups])、Linux安全約束(Unix權(quán)限、功能、SELinux、AppArmor、seccomp等)和命名空間(PID、網(wǎng)絡(luò)、掛載等)與其他進(jìn)程組隔離開(kāi)來(lái)。
如果你啟動(dòng)一個(gè)Linux系統(tǒng)并且查看使用cat /proc/PID/cgroup的任意進(jìn)程,你將看到在cgroup中的某一進(jìn)程。如果你查看?/proc/PID/status,則會(huì)看到其功能。如果你查看/ proc / self / attr / current,你將會(huì)獲取SELinux的標(biāo)簽們。如果你查看/proc/PID/ns,你會(huì)在其中看到一系列命名空間的進(jìn)程。
所以,如果你將容器定義為具有資源限制、Linux安全約束以及命名空間的進(jìn)程,那么根據(jù)這一定義,Linux系統(tǒng)上的每個(gè)進(jìn)程都運(yùn)行在容器中。這就是為什么有人說(shuō)“Linux即容器,容器即Linux”。而容器運(yùn)行時(shí)則是修改這些資源限制、安全約束以及命名空間,并且可以啟動(dòng)容器的程序。
Docker引入了容器鏡像的概念,這是一個(gè)標(biāo)準(zhǔn)的TAR文件,它包含了:
Rootfs (容器根文件系統(tǒng)):在操作系統(tǒng)上帶有根目錄(/)標(biāo)識(shí)的目錄,例如:/usr 、/var 、 /home 等等。
JSON文件(容器配置):JSON文件會(huì)來(lái)規(guī)定如何運(yùn)行rootfs,例如:當(dāng)容器啟動(dòng)時(shí)應(yīng)該在rootfs中運(yùn)行什么指令或entrypoint,應(yīng)該為容器設(shè)置什么樣的環(huán)境變量,容器的工作目錄是什么等等。
Docker基礎(chǔ)鏡像由根文件系統(tǒng)和JSON文件組成,可以通過(guò)在基礎(chǔ)鏡像的根文件系統(tǒng)中安裝所需的內(nèi)容,以更新JSON文件,并且新建一個(gè)鏡像層,通過(guò)這種方式可以制作一個(gè)新的鏡像。
容器鏡像的定義最終由Open Container Initiative(OCI)標(biāo)準(zhǔn)化為OCI鏡像規(guī)范。
用于構(gòu)建容器鏡像的工具被稱為容器鏡像構(gòu)建器(如Dockerfile),有時(shí)容器引擎也能夠完成構(gòu)建容器鏡像的工作,當(dāng)然也可以使用一些可以構(gòu)建容器鏡像的獨(dú)立工具。
Docker獲取了這些容器鏡像(tarballs)然后將他們上傳到一個(gè)web服務(wù)中,你可以從中拉取他們。然后Docker會(huì)開(kāi)發(fā)一個(gè)協(xié)議以便你順利拉取這些鏡像,而這一web服務(wù)便被稱為容器鏡像倉(cāng)庫(kù)。
容器引擎可以從容器鏡像倉(cāng)庫(kù)中拉取鏡像,然后將其重組到容器存儲(chǔ)上。此外,容器引擎也能啟動(dòng)容器運(yùn)行時(shí)(如下圖)。
Linux容器內(nèi)部機(jī)制
容器存儲(chǔ)通常是一個(gè)寫時(shí)復(fù)制(COW)分層文件系統(tǒng)。當(dāng)你從鏡像倉(cāng)庫(kù)中拉取一個(gè)鏡像時(shí),首先,你要從鏡像中提取rootfs并且將其放到磁盤上。如果你的鏡像由多層組成,那么在COW文件系統(tǒng)中需要將下載的每一層鏡像文件儲(chǔ)存在不同的層中。COW文件系統(tǒng)允許每一層分開(kāi)存儲(chǔ),這將分層鏡像的共享大化了。容器引擎通常支持不同類型的容器存儲(chǔ),如overlay、devicemapper、?btrfs、?aufs和?zfs等。
容器引擎將容器鏡像下載到容器存儲(chǔ)中后,它需要?jiǎng)?chuàng)建一個(gè)容器運(yùn)行時(shí)的配置文件。這一配置文件結(jié)合了來(lái)自調(diào)用程序/用戶的輸入以及容器鏡像規(guī)范的內(nèi)容。舉個(gè)例子,調(diào)用程序可能想要對(duì)正在運(yùn)行的容器進(jìn)行指定的安全性修改、添加環(huán)境變量或者將volumes掛載到容器上,這些都是調(diào)用程序輸入的內(nèi)容。
容器運(yùn)行時(shí)配置和分解的rootfs同樣也被OCI標(biāo)準(zhǔn)化為OCI運(yùn)行時(shí)規(guī)范。
最后,容器引擎啟動(dòng)讀取運(yùn)行時(shí)規(guī)范的容器運(yùn)行時(shí),修改Linux cgroup、Linux安全約束以及命名空間,并且啟動(dòng)容器命令以創(chuàng)建PID1(Process ID1)。此時(shí),容器引擎可以將stdin / stdout傳回調(diào)用程序并控制容器(如,停止、啟動(dòng)、附加等)。
請(qǐng)注意,許多新的容器運(yùn)行時(shí)正在讓Linux的不同部分來(lái)隔離容器。人們先可以使用KVM分離(如迷你虛擬機(jī))運(yùn)行容器,或者可以使用其他hypervisor策略(例如,攔截容器進(jìn)程中的所有系統(tǒng)調(diào)用)。既然我們已經(jīng)擁有一個(gè)標(biāo)準(zhǔn)的運(yùn)行時(shí)規(guī)范,那么就能夠通過(guò)相同的容器引擎啟動(dòng)這些工具。甚至Windows也可以使用OCI運(yùn)行時(shí)規(guī)范來(lái)啟動(dòng)Windows容器。
容器編排引擎,相比其他容器工具而言,則處于更高的級(jí)別。容器編排是用于協(xié)調(diào)多個(gè)不同節(jié)點(diǎn)上的容器執(zhí)行工具。容器編排引擎可以通過(guò)與容器引擎通信以管理容器,如啟動(dòng)容器并且將其網(wǎng)絡(luò)連接在一起。它還能夠監(jiān)控容器以及在負(fù)載增加時(shí)啟動(dòng)其他容器。
Kubernetes是目前使用最為廣泛的容器編排引擎,被大量的中小型企業(yè)用戶用于開(kāi)發(fā)或生產(chǎn)環(huán)境,并且已經(jīng)成為業(yè)界公認(rèn)的容器編排管理的標(biāo)準(zhǔn)框架。但是原生的Kubernetes因其學(xué)習(xí)曲線陡峭對(duì)于大多數(shù)開(kāi)發(fā)人員而言很難直接上手使用。Rancher作為一個(gè)開(kāi)源的企業(yè)級(jí)Kubernetes容器管理平臺(tái),其簡(jiǎn)潔直觀的界面風(fēng)格和操作體驗(yàn)可以極大程度地解決這一問(wèn)題。并且Rancher實(shí)現(xiàn)了Kubernetes集群在混合云+本地?cái)?shù)據(jù)中心的集中部署與管理,能統(tǒng)一納管位于不同基礎(chǔ)架構(gòu)上的Kubernetes集群。此外,Rancher也將用戶的安全問(wèn)題放在首位。Kubernetes于8月6日發(fā)布新的補(bǔ)丁版本之后,Rancher反應(yīng)迅速,在1天之后發(fā)布了全新版本Rancher 2.2.7,修復(fù)了新近的CVE并支持Kubernetes新版本。
訪問(wèn)Rancher Github主頁(yè),了解更多新版本信息:
https://github.com/rancher/rancher/releases
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。