溫馨提示×

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

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

用Docker可以做什么

發(fā)布時(shí)間:2021-12-14 11:48:07 來(lái)源:億速云 閱讀:128 作者:iii 欄目:云計(jì)算

這篇文章主要講解了“用Docker可以做什么”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“用Docker可以做什么”吧!

Docker是啥

Docker是一個(gè)程序運(yùn)行、測(cè)試、交付的開放平臺(tái),Docker被設(shè)計(jì)為能夠使你快速地交付應(yīng)用。在Docker中,你可以將你的程序分為不同的 基礎(chǔ)部分,對(duì)于每一個(gè)基礎(chǔ)部分都可以當(dāng)做一個(gè)應(yīng)用程序來(lái)管理。Docker能夠幫助你快速地測(cè)試、快速地編碼、快速地交付,并且縮短你從編碼到運(yùn)行應(yīng)用的 周期。

Docker使用輕量級(jí)的容器虛擬化平臺(tái),并且結(jié)合工作流和工具,來(lái)幫助你管理、部署你的應(yīng)用程序。

在其核心,Docker實(shí)現(xiàn)了讓幾乎任何程序都可以在一個(gè)安全、隔離的容器中運(yùn)行。安全和隔離可以使你可以同時(shí)在機(jī)器上運(yùn)行多個(gè)容器。

容器輕量級(jí)的特性,意味著你可以得到更多的硬件性能。

圍繞著容器的虛擬化工具和平臺(tái),可以在以下幾個(gè)方面為你提供幫助:

  • 幫助你把應(yīng)用程序(包括其余的支持組件)放入到Docker容器中。

  • 分發(fā)和轉(zhuǎn)移你的容器至你的團(tuán)隊(duì)其它成員來(lái)進(jìn)行進(jìn)一步的開發(fā)和測(cè)試。

  • 部署這些應(yīng)用程序至你的生產(chǎn)環(huán)境,不論是本地的數(shù)據(jù)中心還是云平臺(tái)。

我可以用Docker做啥

快速交付你的應(yīng)用程序

Docker可以為你的開發(fā)過(guò)程提供完美的幫助。Docker允許開發(fā)者在本地包含了應(yīng)用程序和服務(wù)的容器進(jìn)行開發(fā),之后可以集成到連續(xù)的一體化和部署工作流中。

舉個(gè)例子,開發(fā)者們?cè)诒镜鼐帉懘a并且使用Docker和同事分享其開發(fā)棧。當(dāng)開發(fā)者們準(zhǔn)備好了之后,他們可以將代碼和開發(fā)棧推送到測(cè)試環(huán)境中,在該環(huán)境進(jìn)行一切所需要的測(cè)試。從測(cè)試環(huán)境中,你可以將Docker鏡像推送到服務(wù)器上進(jìn)行部署。

開發(fā)和拓展更加簡(jiǎn)單

Docker的以容器為基礎(chǔ)的平臺(tái)允許高度可移植的工作。Docker容器可以在開發(fā)者機(jī)器上運(yùn)行,也可以在實(shí)體或者虛擬機(jī)上運(yùn)行,也可以在云平臺(tái)上運(yùn)行。

Docker的可移植、輕量特性同樣讓動(dòng)態(tài)地管理負(fù)載更加簡(jiǎn)單。你可以用Docker快速地增加應(yīng)用規(guī)?;蛘哧P(guān)閉應(yīng)用程序和服務(wù)。Docker的快速意味著變動(dòng)幾乎是實(shí)時(shí)的。

達(dá)到高密度和更多負(fù)載

Docker輕巧快速,它提供了一個(gè)可行的、 符合成本效益的替代基于虛擬機(jī)管理程序的虛擬機(jī)。這在高密度的環(huán)境下尤其有用。例如,構(gòu)建你自己的云平臺(tái)或者PaaS,在中小的部署環(huán)境下同樣可以獲取到更多的資源性能。

Docker的主要組成有哪些

Docker有兩個(gè)主要的部件:

  • Docker: 開源的容器虛擬化平臺(tái)。

  • Docker Hub: 用于分享、管理Docker容器的Docker SaaS平臺(tái)。

Docker的架構(gòu)是怎樣的

Docker使用客戶端-服務(wù)器(client-server)架構(gòu)模式。Docker客戶端會(huì)與Docker守護(hù)進(jìn)程進(jìn)行通信。Docker守護(hù) 進(jìn)程會(huì)處理復(fù)雜繁重的任務(wù),例如建立、運(yùn)行、發(fā)布你的Docker容器。Docker客戶端和守護(hù)進(jìn)程可以運(yùn)行在同一個(gè)系統(tǒng)上,當(dāng)然你也可以使用 Docker客戶端去連接一個(gè)遠(yuǎn)程的Docker守護(hù)進(jìn)程。Docker客戶端和守護(hù)進(jìn)程之間通過(guò)socket或者RESTful API進(jìn)行通信。

用Docker可以做什么

Docker守護(hù)進(jìn)程

如上圖所示,Docker守護(hù)進(jìn)程運(yùn)行在一臺(tái)主機(jī)上。用不并不直接和守護(hù)進(jìn)程進(jìn)行交互,而是通過(guò)Docker客戶端間接和其通信。

Docker客戶端

Docker客戶端,實(shí)際上是docker的二進(jìn)制程序,是主要的用戶與Docker交互方式。它接收用戶指令并且與背后的Docker守護(hù)進(jìn)程通信,如此來(lái)回往復(fù)。

Docker的內(nèi)部

要理解Docker的內(nèi)部構(gòu)建,必須知道以下三種部件:

  • Docker鏡像 (Docker images)。

  • Docker倉(cāng)庫(kù) (Docker registeries)。

  • Docker容器(Docker containers)。

Docker鏡像

Docker鏡像是一個(gè)只讀的模板。舉個(gè)例子,一個(gè)鏡像可以包含一個(gè)運(yùn)行在Apache上的Web應(yīng)用和其使用的Ubuntu操作系統(tǒng)。

鏡像是用來(lái)創(chuàng)建容器的。Docker提供了簡(jiǎn)單的放來(lái)來(lái)建立新的鏡像或者升級(jí)現(xiàn)有的鏡像,你也可以下載別人已經(jīng)創(chuàng)建好的鏡像。Docker鏡像是Docker的 構(gòu)造 部分。

Docker倉(cāng)庫(kù)

Docker倉(cāng)庫(kù)用來(lái)保存鏡像??梢岳斫鉃榇a控制中的代碼倉(cāng)庫(kù)。同樣的,Docker倉(cāng)庫(kù)也有公有和私有的概念。公有的Docker倉(cāng)庫(kù)名字是Docker Hub。Docker Hub提供了龐大的鏡像集合供使用。這些鏡像可以是你自己創(chuàng)建的,或者你也可以在別人的鏡像基礎(chǔ)上創(chuàng)建。Docker倉(cāng)庫(kù)是Docker的 分發(fā) 部分。

Docker容器

Docker容器和文件夾很類似。一個(gè)Docker容器包含了所有的某個(gè)應(yīng)用運(yùn)行所需要的環(huán)境。每一個(gè)Docker容器都是從Docker鏡像創(chuàng)建 的。Docker容器可以運(yùn)行、開始、停止、移動(dòng)和刪除。每一個(gè)Docker容器都是獨(dú)立和安全的應(yīng)用平臺(tái)。Docker容器是Docker的 運(yùn)行 部分。

Docker的工作原理

到目前為止,我們學(xué)習(xí)到了:

  1. 我們可以建立一個(gè)容納應(yīng)用程序的容器。

  2. 我們可以從Docker鏡像創(chuàng)建Docker容器來(lái)運(yùn)行我們的應(yīng)用程序。

  3. 我們可以通過(guò)Docker Hub或者我們自己的Docker倉(cāng)庫(kù)分享Docker鏡像。

Docker鏡像是如何工作的

我們已經(jīng)看到了,Docker鏡像是Docker容器運(yùn)行時(shí)的只讀模板。每一個(gè)鏡像由一系列的層(layers)組成。Docker使用UnionFS來(lái)將這些層聯(lián)合到一二鏡像中。Union文件系統(tǒng)允許獨(dú)立文件系統(tǒng)中的文件和文件夾(稱之為分支)被透明覆蓋,形成一個(gè)單獨(dú)連貫的文件系統(tǒng)。

這一段的原文:We've already seen that Docker images are read-only templates from which Docker containers are launched. Each image consists of a series of layers. Docker makes use of union file systems to combine these layers into a single image. Union file systems allow files and directories of separate file systems, known as branches, to be transparently overlaid, forming a single coherent file system.

正因?yàn)橛辛诉@些層的存在,Docker是如此的輕量。當(dāng)你改變了一個(gè)Docker鏡像,比如升級(jí)到某個(gè)程序到新的版本,一個(gè)新的層會(huì)被創(chuàng)建。因此, 不用替換整個(gè)原先的鏡像或者重新建立(在使用虛擬機(jī)的時(shí)候你可能會(huì)這么做),只是一個(gè)新的層被添加或升級(jí)了?,F(xiàn)在你不用重新發(fā)布整個(gè)鏡像,只需要升級(jí)。層 使得奮發(fā)Docker鏡像變得簡(jiǎn)單和快速。

每個(gè)鏡像都是從一個(gè)基礎(chǔ)的鏡像開始的,比如ubuntu,一個(gè)基礎(chǔ)的Ubuntu鏡像,或者是fedora,一個(gè)基礎(chǔ)的Fedora鏡像。你可以使用你自己的鏡像作為新鏡像的基礎(chǔ),例如你有一個(gè)基礎(chǔ)的安裝了Apache的鏡像,你可以使用該鏡像來(lái)建立你的Web應(yīng)用程序鏡像。

注: Docker通常從Docker Hub獲取基礎(chǔ)鏡像。

Docker鏡像從這些基礎(chǔ)的鏡像創(chuàng)建,通過(guò)一種簡(jiǎn)單、具有描述性的步驟,我們稱之為 指令(instructions)。 每一個(gè)指令會(huì)在鏡像中創(chuàng)建一個(gè)新的層,指令可以包含這些動(dòng)作:

  • 運(yùn)行一個(gè)命令。

  • 增加文件或者文件夾。

  • 創(chuàng)建一個(gè)環(huán)境變量。

  • 當(dāng)運(yùn)行容器的時(shí)候哪些程序會(huì)運(yùn)行。

這些指令存儲(chǔ)在Dockerfile文件中。當(dāng)你需要建立鏡像的時(shí)候,Docker可以從Dockerfile中讀取這些指令并且運(yùn)行,然后返回一個(gè)最終的鏡像。

Docker倉(cāng)庫(kù)是如何工作的

Docker倉(cāng)庫(kù)是Docker鏡像的存儲(chǔ)倉(cāng)庫(kù)。你可以推送你的鏡像到你的Docker倉(cāng)庫(kù)中。

通過(guò)Docker客戶端,你可以從Docker倉(cāng)庫(kù)中搜索鏡像。

Docker容器是如何工作的

一個(gè)Docker容器包含了一個(gè)操作系統(tǒng)、用戶添加的文件和元數(shù)據(jù)(meta-data)。我們可以看到,每個(gè)容器都是從鏡像建立的。鏡像告訴 Docker容器內(nèi)包含了什么,當(dāng)容器啟動(dòng)時(shí)運(yùn)行什么程序,還有許多配置數(shù)據(jù)。Docker鏡像是只讀的。當(dāng)Docker運(yùn)行一個(gè)從鏡像建立的容器,它會(huì) 在鏡像頂部添加一個(gè)可讀寫的層,應(yīng)用程序可以在這里運(yùn)行。

當(dāng)你運(yùn)行docker容器時(shí)發(fā)生了什么

不論你使用docker命令或者是RESTful API,Docker客戶端都會(huì)告訴Docker守護(hù)進(jìn)程運(yùn)行一個(gè)容器。

$ sudo docker run -i -t ubuntu /bin/bash

讓我們來(lái)分析這個(gè)命令。Docker客戶端使用docker命令來(lái)運(yùn)行,run參數(shù)表名客戶端要運(yùn)行一個(gè)新的容器。Docker客戶端要運(yùn)行一個(gè)容器需要告訴Docker守護(hù)進(jìn)程的最小參數(shù)信息是:

  • 這個(gè)容器從哪個(gè)鏡像創(chuàng)建,這里是ubuntu,基礎(chǔ)的Ubuntu鏡像。

  • 在容器中要運(yùn)行的命令,這里是/bin/bash,在容器中運(yùn)行Bash shell。

那么運(yùn)行這個(gè)命令之后在底層發(fā)生了什么?

按照順序,Docker做了這些事情:

  • 拉取ubuntu鏡像: Docker檢查ubuntu鏡像是否存在,如果在本地沒(méi)有該鏡像,Docker會(huì)從Docker Hub下載。如果鏡像已經(jīng)存在,Docker會(huì)使用它來(lái)創(chuàng)建新的容器。

  • 創(chuàng)建新的容器: 當(dāng)Docker有了這個(gè)鏡像之后,Docker會(huì)用它來(lái)創(chuàng)建一個(gè)新的容器。

  • 分配文件系統(tǒng)并且掛載一個(gè)可讀寫的層: 容器會(huì)在這個(gè)文件系統(tǒng)中創(chuàng)建,并且一個(gè)可讀寫的層被添加到鏡像中。

  • 分配網(wǎng)絡(luò)/橋接接口: 創(chuàng)建一個(gè)允許容器與本地主機(jī)通信的網(wǎng)絡(luò)接口。

  • 設(shè)置一個(gè)IP地址: 從池中尋找一個(gè)可用的IP地址并且服加到容器上。

  • 運(yùn)行你指定的程序: 運(yùn)行指定的程序。

  • 捕獲并且提供應(yīng)用輸出: 連接并且記錄標(biāo)準(zhǔn)輸出、輸入和錯(cuò)誤讓你可以看到你的程序是如何運(yùn)行的。

你現(xiàn)在擁有了一個(gè)運(yùn)行著的容器!從這里開始你可以管理你的容器,與應(yīng)用交互,應(yīng)用完成之后,可以停止或者刪除你的容器。

底層技術(shù)

Docker使用Go語(yǔ)言編寫,并且使用了一系列Linux內(nèi)核提供的性能來(lái)實(shí)現(xiàn)我們已經(jīng)看到的這些功能。

命名空間(Namespaces)

Docker充分利用了一項(xiàng)稱為namespaces的技術(shù)來(lái)提供隔離的工作空間,我們稱之為 container(容器)。當(dāng)你運(yùn)行一個(gè)容器的時(shí)候,Docker為該容器創(chuàng)建了一個(gè)命名空間集合。

這樣提供了一個(gè)隔離層,每一個(gè)應(yīng)用在它們自己的命名空間中運(yùn)行而且不會(huì)訪問(wèn)到命名空間之外。

一些Docker使用到的命名空間有:

  • pid命名空間: 使用在進(jìn)程隔離(PID: Process ID)。

  • net命名空間: 使用在管理網(wǎng)絡(luò)接口(NET: Networking)。

  • ipc命名空間: 使用在管理進(jìn)程間通信資源 (IPC: InterProcess Communication)。

  • mnt命名空間: 使用在管理掛載點(diǎn) (MNT: Mount)。

  • uts命名空間: 使用在隔離內(nèi)核和版本標(biāo)識(shí) (UTS: Unix Timesharing System)。

群組控制

Docker還使用到了cgroups技術(shù)來(lái)管理群組。使應(yīng)用隔離運(yùn)行的關(guān)鍵是讓它們只使用你想要的資源。這樣可以確保在機(jī)器上運(yùn)行的容器都是良民(good multi-tenant citizens)。群組控制允許Docker分享或者限制容器使用硬件資源。例如,限制指定的容器的內(nèi)容使用。

聯(lián)合文件系統(tǒng)

聯(lián)合文件系統(tǒng)(UnionFS)是用來(lái)操作創(chuàng)建層的,使它們輕巧快速。Docker使用UnionFS提供容器的構(gòu)造塊。Docker可以使用很多種類的UnionFS包括AUFS, btrfs, vfs, and DeviceMapper。

容器格式

Docker連接這些組建到一個(gè)包裝中,稱為一個(gè) container format(容器格式)。默認(rèn)的容器格式是libcontainer。Docker同樣支持傳統(tǒng)的Linux容器使用LXC。在未來(lái),Docker也許會(huì)支持其它的容器格式,例如與BSD Jails 或 Solaris Zone集成。

感謝各位的閱讀,以上就是“用Docker可以做什么”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)用Docker可以做什么這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

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

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

AI