溫馨提示×

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

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

Linux容器的示例分析

發(fā)布時(shí)間:2021-10-25 11:07:32 來源:億速云 閱讀:123 作者:小新 欄目:系統(tǒng)運(yùn)維

這篇文章將為大家詳細(xì)講解有關(guān)Linux容器的示例分析,小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。

我告訴你一個(gè)秘密:使得我的應(yīng)用程序進(jìn)入到全世界的 DevOps 云計(jì)算之類的東西對(duì)我來說仍然有一點(diǎn)神秘。但隨著時(shí)間流逝,我意識(shí)到理解大規(guī)模的機(jī)器增減和應(yīng)用程序部署的來龍去脈對(duì)一個(gè)開發(fā)者來說是非常重要的知識(shí)。這類似于成為一個(gè)專業(yè)的音樂家,當(dāng)然你肯定需要知道如何使用你的樂器,但是,如果你不知道一個(gè)錄音棚是如何工作的,或者如何適應(yīng)一個(gè)交響樂團(tuán),那么你在這樣的環(huán)境中工作會(huì)變得非常困難。

在軟件開發(fā)的世界里,使你的代碼進(jìn)入我們的更大的世界如同把它編寫出來一樣重要。DevOps 重要,而且是很重要。

因此,為了彌合開發(fā)Dev和部署Ops之間的空隙,我會(huì)從頭開始介紹容器技術(shù)。為什么是容器?因?yàn)橛袕?qiáng)力的證據(jù)表明,容器是機(jī)器抽象的下一步:使計(jì)算機(jī)成為場(chǎng)所而不再是一個(gè)東西。理解容器是我們共同的旅程。

在這篇文章中,我會(huì)介紹容器化containerization背后的概念。包括容器和虛擬機(jī)的區(qū)別,以及容器構(gòu)建背后的邏輯以及它是如何適應(yīng)應(yīng)用程序架構(gòu)的。我會(huì)探討輕量級(jí)的 Linux 操作系統(tǒng)是如何適應(yīng)容器生態(tài)系統(tǒng)。我還會(huì)討論使用鏡像創(chuàng)建可重用的容器。最后我會(huì)介紹容器集群如何使你的應(yīng)用程序可以快速擴(kuò)展。

在后面的文章中,我會(huì)一步一步向你介紹容器化一個(gè)示例應(yīng)用程序的過程,以及如何為你的應(yīng)用程序容器創(chuàng)建一個(gè)托管集群。同時(shí),我會(huì)向你展示如何使用 Deis 將你的示例應(yīng)用程序部署到你本地系統(tǒng)以及多種云供應(yīng)商的虛擬機(jī)上。

讓我們開始吧。

虛擬機(jī)的好處為了理解容器如何適應(yīng)事物發(fā)展,你首先要了解容器的前任:虛擬機(jī)。

虛擬機(jī)virtual machine(VM)是運(yùn)行在物理宿主機(jī)上的軟件抽象。配置一個(gè)虛擬機(jī)就像是購買一臺(tái)計(jì)算機(jī):你需要定義你想要的 CPU 數(shù)目、RAM 和磁盤存儲(chǔ)容量。配置好了機(jī)器后,你為它加載操作系統(tǒng),以及你想讓虛擬機(jī)支持的任何服務(wù)器或者應(yīng)用程序。

虛擬機(jī)允許你在一臺(tái)硬件主機(jī)上運(yùn)行多個(gè)模擬計(jì)算機(jī)。這是一個(gè)簡單的示意圖:

Linux容器的示例分析

虛擬機(jī)可以讓你能充分利用你的硬件資源。你可以購買一臺(tái)巨大的、轟隆作響的機(jī)器,然后在上面運(yùn)行多個(gè)虛擬機(jī)。你可以有一個(gè)數(shù)據(jù)庫虛擬機(jī)以及很多運(yùn)行相同版本的定制應(yīng)用程序的虛擬機(jī)所構(gòu)成的集群。你可以在有限的硬件資源獲得很多的擴(kuò)展能力。如果你覺得你需要更多的虛擬機(jī)而且你的宿主硬件還有容量,你可以添加任何你需要的虛擬機(jī)?;蛘?,如果你不再需要一個(gè)虛擬機(jī),你可以關(guān)閉該虛擬機(jī)并刪除虛擬機(jī)鏡像。

虛擬機(jī)的局限但是,虛擬機(jī)確實(shí)有局限。

如上面所示,假如你在一個(gè)主機(jī)上創(chuàng)建了三個(gè)虛擬機(jī)。主機(jī)有 12 個(gè) CPU,48 GB 內(nèi)存和 3TB 的存儲(chǔ)空間。每個(gè)虛擬機(jī)配置為有 4 個(gè) CPU,16 GB 內(nèi)存和 1TB 存儲(chǔ)空間。到現(xiàn)在為止,一切都還好。主機(jī)有這個(gè)容量。

但這里有個(gè)缺陷。所有分配給一個(gè)虛擬機(jī)的資源,無論是什么,都是專有的。每臺(tái)機(jī)器都分配了 16 GB 的內(nèi)存。但是,如果第一個(gè)虛擬機(jī)永不會(huì)使用超過 1GB 分配的內(nèi)存,剩余的 15 GB 就會(huì)被浪費(fèi)在那里。如果第三個(gè)虛擬機(jī)只使用分配的 1TB 存儲(chǔ)空間中的 100GB,其余的 900GB 就成為浪費(fèi)空間。

這里沒有資源的流動(dòng)。每臺(tái)虛擬機(jī)擁有分配給它的所有資源。因此,在某種方式上我們又回到了虛擬機(jī)之前,把大部分金錢花費(fèi)在未使用的資源上。

虛擬機(jī)還有另一個(gè)缺陷。讓它們跑起來需要很長時(shí)間。如果你處于基礎(chǔ)設(shè)施需要快速增長的情形,即使增加虛擬機(jī)是自動(dòng)的,你仍然會(huì)發(fā)現(xiàn)你的很多時(shí)間都浪費(fèi)在等待機(jī)器上線。

來到:容器概念上來說,容器是一個(gè) Linux 進(jìn)程,Linux 認(rèn)為它只是一個(gè)運(yùn)行中的進(jìn)程。該進(jìn)程只知道它被告知的東西。另外,在容器化方面,該容器進(jìn)程也分配了它自己的 IP 地址。這點(diǎn)很重要,重要的事情講三遍,這是第二遍。在容器化方面,容器進(jìn)程有它自己的 IP 地址。一旦給予了一個(gè) IP 地址,該進(jìn)程就是宿主網(wǎng)絡(luò)中可識(shí)別的資源。然后,你可以在容器管理器上運(yùn)行命令,使容器 IP 映射到主機(jī)中能訪問公網(wǎng)的 IP 地址。建立了該映射,無論出于什么意圖和目的,容器就是網(wǎng)絡(luò)上一個(gè)可訪問的獨(dú)立機(jī)器,從概念上類似于虛擬機(jī)。

這是第三遍,容器是擁有不同 IP 地址從而使其成為網(wǎng)絡(luò)上可識(shí)別的獨(dú)立 Linux 進(jìn)程。下面是一個(gè)示意圖:

Linux容器的示例分析

容器/進(jìn)程以動(dòng)態(tài)、合作的方式共享主機(jī)上的資源。如果容器只需要 1GB 內(nèi)存,它就只會(huì)使用 1GB。如果它需要 4GB,就會(huì)使用 4GB。CPU 和存儲(chǔ)空間利用也是如此。CPU、內(nèi)存和存儲(chǔ)空間的分配是動(dòng)態(tài)的,和典型虛擬機(jī)的靜態(tài)方式不同。所有這些資源的共享都由容器管理器來管理。

最后,容器能非??焖俚貑?dòng)。

因此,容器的好處是:你獲得了虛擬機(jī)獨(dú)立和封裝的好處,而拋棄了靜態(tài)資源專有的缺陷。另外,由于容器能快速加載到內(nèi)存,在擴(kuò)展到多個(gè)容器時(shí)你能獲得更好的性能。

容器托管、配置和管理托管容器的計(jì)算機(jī)運(yùn)行著被剝離的只剩下主要部分的某個(gè) Linux 版本?,F(xiàn)在,宿主計(jì)算機(jī)流行的底層操作系統(tǒng)是之前提到的CoreOS。當(dāng)然還有其它,例如 Red Hat Atomic Host 和 Ubuntu Snappy。

該 Linux 操作系統(tǒng)被所有容器所共享,減少了容器足跡的重復(fù)和冗余。每個(gè)容器只包括該容器特有的部分。下面是一個(gè)示意圖:

Linux容器的示例分析

你可以用它所需的組件來配置容器。一個(gè)容器組件被稱為層layer。層是一個(gè)容器鏡像,(你會(huì)在后面的部分看到更多關(guān)于容器鏡像的介紹)。你從一個(gè)基本層開始,這通常是你想在容器中使用的操作系統(tǒng)。(容器管理器只提供你所要的操作系統(tǒng)在宿主操作系統(tǒng)中不存在的部分。)當(dāng)你構(gòu)建你的容器配置時(shí),你需要添加層,例如你想要添加網(wǎng)絡(luò)服務(wù)器時(shí)這個(gè)層就是 Apache,如果容器要運(yùn)行腳本,則需要添加 PHP 或 Python 運(yùn)行時(shí)環(huán)境。

分層非常靈活。如果應(yīng)用程序或者服務(wù)容器需要 PHP 5.2 版本,你相應(yīng)地配置該容器即可。如果你有另一個(gè)應(yīng)用程序或者服務(wù)需要 PHP 5.6 版本,沒問題,你可以使用 PHP 5.6 配置該容器。不像虛擬機(jī),更改一個(gè)版本的運(yùn)行時(shí)依賴時(shí)你需要經(jīng)過大量的配置和安裝過程;對(duì)于容器你只需要在容器配置文件中重新定義層。

所有上面描述的容器的各種功能都由一個(gè)稱為容器管理器container manager的軟件控制?,F(xiàn)在,最流行的容器管理器是 Docker 和 Rocket。上面的示意圖展示了容器管理器是 Docker,宿主操作系統(tǒng)是 CentOS 的主機(jī)情景。

容器由鏡像構(gòu)成當(dāng)你需要將我們的應(yīng)用程序構(gòu)建到容器時(shí),你就要編譯鏡像。鏡像代表了你的容器需要完成其工作的容器模板。(容器里可以在容器里面,如下圖)。鏡像存儲(chǔ)在注冊(cè)庫registry中,注冊(cè)庫通過網(wǎng)絡(luò)訪問。

從概念上講,注冊(cè)庫類似于一個(gè)使用 Java 的人眼中的 Maven 倉庫、使用 .NET 的人眼中的 NuGet 服務(wù)器。你會(huì)創(chuàng)建一個(gè)列出了你應(yīng)用程序所需鏡像的容器配置文件。然后你使用容器管理器創(chuàng)建一個(gè)包括了你的應(yīng)用程序代碼以及從容器注冊(cè)庫中下載的部分資源。例如,如果你的應(yīng)用程序包括了一些 PHP 文件,你的容器配置文件會(huì)聲明你會(huì)從注冊(cè)庫中獲取 PHP 運(yùn)行時(shí)環(huán)境。另外,你還要使用容器配置文件聲明需要復(fù)制到容器文件系統(tǒng)中的 .php 文件。容器管理器會(huì)封裝你應(yīng)用程序的所有東西為一個(gè)獨(dú)立容器,該容器將會(huì)在容器管理器的管理下運(yùn)行在宿主計(jì)算機(jī)上。

這是一個(gè)容器創(chuàng)建背后概念的示意圖:

Linux容器的示例分析

讓我們仔細(xì)看看這個(gè)示意圖。

(1)代表一個(gè)定義了你容器所需東西以及你容器如何構(gòu)建的容器配置文件。當(dāng)你在主機(jī)上運(yùn)行容器時(shí),容器管理器會(huì)讀取該配置文件,從云上的注冊(cè)庫中獲取你需要的容器鏡像,(2)將鏡像作為層添加到你的容器中。

另外,如果組成鏡像需要其它鏡像,容器管理器也會(huì)獲取這些鏡像并把它們作為層添加進(jìn)來。(3)容器管理器會(huì)將需要的文件復(fù)制到容器中。

如果你使用了配置provisioning服務(wù),例如 Deis,你剛剛創(chuàng)建的應(yīng)用程序容器做成鏡像,(4)配置服務(wù)會(huì)將它部署到你選擇的云供應(yīng)商上,比如類似 AWS 和 Rackspace 云供應(yīng)商。

集群中的容器好了。這里有一個(gè)很好的例子說明了容器比虛擬機(jī)提供了更好的配置靈活性和資源利用率。但是,這并不是全部。

容器真正的靈活是在集群中。記住,每個(gè)容器有一個(gè)獨(dú)立的 IP 地址。因此,能把它放到負(fù)載均衡器后面。將容器放到負(fù)載均衡器后面,這就上升了一個(gè)層面。

你可以在一個(gè)負(fù)載均衡容器后運(yùn)行容器集群以獲得更高的性能和高可用計(jì)算。這是一個(gè)例子:

Linux容器的示例分析

假如你開發(fā)了一個(gè)資源密集型的應(yīng)用程序,例如圖片處理。使用類似 Deis 的容器配置技術(shù),你可以創(chuàng)建一個(gè)包括了你圖片處理程序以及你圖片處理程序需要的所有資源的容器鏡像。然后,你可以部署一個(gè)或多個(gè)容器鏡像到主機(jī)上的負(fù)載均衡器下。一旦創(chuàng)建了容器鏡像,你可以隨時(shí)使用它。當(dāng)系統(tǒng)繁忙時(shí)可以添加更多的容器實(shí)例來滿足手中的工作。

這里還有更多好消息。每次添加實(shí)例到環(huán)境中時(shí),你不需要手動(dòng)配置負(fù)載均衡器以便接受你的容器鏡像。你可以使用服務(wù)發(fā)現(xiàn)技術(shù)讓容器告知均衡器它可用。然后,一旦獲知,均衡器就會(huì)將流量分發(fā)到新的結(jié)點(diǎn)。

全部放在一起容器技術(shù)完善了虛擬機(jī)缺失的部分。類似 CoreOS、RHEL Atomic、和 Ubuntu 的 Snappy 宿主操作系統(tǒng),和類似 Docker 和 Rocket 的容器管理技術(shù)結(jié)合起來,使得容器變得日益流行。

盡管容器變得更加越來越普遍,掌握它們還是需要一段時(shí)間。但是,一旦你懂得了它們的竅門,你可以使用類似 Deis 這樣的配置技術(shù)使容器創(chuàng)建和部署變得更加簡單。

關(guān)于“Linux容器的示例分析”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。

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

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI