Docker基本原理概述
Docker基本原理概述
Docker是一個用于開發(fā),交付和運(yùn)行應(yīng)用程序的開放平臺。Docker能夠?qū)?yīng)用程序與基礎(chǔ)架構(gòu)分開,從而可以快速交付軟件。借助Docker,可以以與管理應(yīng)用程序相同的方式來管理基礎(chǔ)架構(gòu)。通過利用Docker的快速交付,測試和部署代碼的方法,可以顯著減少編寫代碼和在生產(chǎn)環(huán)境中運(yùn)行代碼之間的延遲。
Docker平臺
Docker提供了在松散隔離的環(huán)境(稱為容器)中打包和運(yùn)行應(yīng)用程序的功能。隔離和安全性可以在給定主機(jī)上同時運(yùn)行多個容器。容器是輕量級的,包含運(yùn)行該應(yīng)用程序所需的所有內(nèi)容,因此無需依賴主機(jī)上當(dāng)前安裝的內(nèi)容。可以在工作時輕松共享容器,并確保與共享的每個人都能以相同的方式獲得相同的容器。
Docker提供了工具和平臺來管理容器的生命周期:
? 使用容器開發(fā)應(yīng)用程序及其支持組件。
? 容器成為分發(fā)和測試應(yīng)用程序的單元。
? 準(zhǔn)備就緒后,可以將應(yīng)用程序作為容器或協(xié)調(diào)服務(wù)部署到生產(chǎn)環(huán)境中。無論生產(chǎn)環(huán)境是本地數(shù)據(jù)中心,云提供商還是兩者的混合,其工作原理都相同。
可以將Docker用于什么?
快速,一致地交付應(yīng)用程序
Docker通過允許開發(fā)人員使用提供應(yīng)用程序和服務(wù)的本地容器在標(biāo)準(zhǔn)化環(huán)境中工作,從而簡化了開發(fā)生命周期。容器非常適合進(jìn)行持續(xù)集成和持續(xù)交付(CI / CD)工作流。
考慮以下示例方案:
? 開發(fā)人員在本地編寫代碼,并使用Docker容器與同事共享工作。
? 使用Docker將其應(yīng)用程序推送到測試環(huán)境中,并執(zhí)行自動和手動測試。
? 當(dāng)開發(fā)人員發(fā)現(xiàn)錯誤時,可以在開發(fā)環(huán)境中對其進(jìn)行修復(fù),然后將其重新部署到測試環(huán)境中以進(jìn)行測試和驗(yàn)證。
? 測試完成后,將修補(bǔ)程序推送給生產(chǎn)環(huán)境,將更新的映像推送到生產(chǎn)環(huán)境一樣簡單。
響應(yīng)式部署和擴(kuò)展
Docker的基于容器的平臺允許高度可移植的工作負(fù)載。Docker容器可以在開發(fā)人員的本地筆記本電腦上,數(shù)據(jù)中心內(nèi)的物理或虛擬機(jī)上,云提供商上或混合環(huán)境中運(yùn)行。
Docker的可移植性和輕量級的特性,可以輕松地動態(tài)管理工作負(fù)載,并根據(jù)業(yè)務(wù)需求指示實(shí)時擴(kuò)展或拆除應(yīng)用程序和服務(wù)。
在相同的硬件上運(yùn)行更多的工作負(fù)載
Docker輕巧快速。將基于虛擬機(jī)管理程序的虛擬機(jī)提供了一種可行的,具有成本效益的替代方案,可以利用更多的計(jì)算能力來實(shí)現(xiàn)業(yè)務(wù)目標(biāo)。Docker非常適合高密度環(huán)境以及中小型部署,而需要用更少的資源做更多的事情。
Docker架構(gòu)
Docker使用客戶端-服務(wù)器架構(gòu)。Docker客戶端與Docker守護(hù)進(jìn)程進(jìn)行對話,守護(hù)進(jìn)程完成了構(gòu)建,運(yùn)行和分發(fā)Docker容器的繁重工作。Docker客戶端和守護(hù)程序可以在同一系統(tǒng)上運(yùn)行,或者可以將Docker客戶端連接到遠(yuǎn)程Docker守護(hù)程序。Docker客戶端和守護(hù)程序在UNIX套接字或網(wǎng)絡(luò)接口上使用REST API進(jìn)行通信。另一個Docker客戶端是Docker Compose,可以處理由一組容器組成的應(yīng)用程序。
Docker守護(hù)程序
Docker守護(hù)程序(dockerd)偵聽Docker API請求,管理Docker對象,例如圖像,容器,網(wǎng)絡(luò)和卷。守護(hù)程序還可以與其它守護(hù)程序通信以管理Docker服務(wù)。
Docker客戶端
Docker客戶端(docker)是許多Docker用戶與Docker交互的主要方式。當(dāng)使用諸如docker run之類的命令時,客戶端會將這些命令發(fā)送到dockerd,以執(zhí)行這些命令。該docker命令使用Docker API。Docker客戶端可以與多個守護(hù)程序通信。
Docker注冊表
Docker注冊表存儲Docker映像。Docker Hub是任何人都可以使用的公共注冊表,并且默認(rèn)情況下,Docker已配置為在Docker Hub上查找映像。甚至可以運(yùn)行自己的私人注冊表。
使用docker pull或docker run命令時,將從配置的注冊表中提取所需的圖像。使用該docker push命令時,會將映像推送到已配置的注冊表。
Docker對象
使用Docker時,正在創(chuàng)建和使用映像,容器,網(wǎng)絡(luò),卷,插件和其它對象。本節(jié)是其中一些對象的簡要概述。
圖片
一個圖像是用于創(chuàng)建一個docker容器指令的只讀模板。通常,一個映像基于另一個映像,并進(jìn)行一些其它自定義。例如,可以基于該ubuntu 映像構(gòu)建映像,但安裝Apache Web服務(wù)器和應(yīng)用程序,以及運(yùn)行該應(yīng)用程序所需的配置詳細(xì)信息。
可以創(chuàng)建自己的圖像,也可以僅使用其它人創(chuàng)建并在注冊表中發(fā)布的圖像。為了構(gòu)建自己的映像,可以使用簡單的語法創(chuàng)建一個Dockerfile,以定義創(chuàng)建映像和運(yùn)行映像所需的步驟。Dockerfile中的每條指令都會在映像中創(chuàng)建一個層。當(dāng)更改Dockerfile并重建映像時,僅重建那些已更改的層。與其它虛擬化技術(shù)相比,這是使映像如此輕巧,小型和快速的部分原因。
貨柜
容器是圖像的可運(yùn)行實(shí)例。可以使用Docker API或CLI創(chuàng)建,啟動,停止,移動或刪除容器。可以將容器連接到一個或多個網(wǎng)絡(luò),將存儲連接到它,甚至根據(jù)其當(dāng)前狀態(tài)創(chuàng)建一個新映像。
默認(rèn)情況下,容器與其它容器及其主機(jī)之間的隔離度相對較高。可以控制容器的網(wǎng)絡(luò),存儲或其它底層子系統(tǒng)與其它容器或與主機(jī)的隔離程度。
容器由其映像以及在創(chuàng)建或啟動時為其提供的任何配置選項(xiàng)定義。刪除容器后,未存儲在持久性存儲中的狀態(tài)更改將消失。
示例docker run命令
以下命令運(yùn)行一個ubuntu容器,以交互方式附加到本地命令行會話,然后運(yùn)行/bin/bash。
$ docker run -i -t ubuntu /bin/bash
當(dāng)運(yùn)行此命令時,會發(fā)生以下情況(假設(shè)使用的是默認(rèn)注冊表配置):
- 如果在ubuntu本地沒有該映像,則Docker會將其從已配置的注冊表中拉出,就像docker pull ubuntu手動運(yùn)行一樣。
- Docker會創(chuàng)建一個新容器,就像docker container create 手動運(yùn)行命令一樣。
- Docker將一個讀寫文件系統(tǒng)分配給容器,作為其最后一層。允許運(yùn)行中的容器在其本地文件系統(tǒng)中創(chuàng)建或修改文件和目錄。
- Docker創(chuàng)建了一個網(wǎng)絡(luò)接口,將容器連接到默認(rèn)網(wǎng)絡(luò),因?yàn)闆]有指定任何網(wǎng)絡(luò)選項(xiàng)。這包括為容器分配IP地址。默認(rèn)情況下,容器可以使用主機(jī)的網(wǎng)絡(luò)連接連接到外部網(wǎng)絡(luò)。
- Docker啟動容器并執(zhí)行/bin/bash。因?yàn)槿萜魇墙换ナ竭\(yùn)行的,并且已附加到終端(由于-i和-t標(biāo)志),可以在輸出記錄到終端時使用鍵盤提供輸入。
- 當(dāng)鍵入exit以終止/bin/bash命令時,容器將停止但不會被刪除。可以重新啟動或刪除它。
底層技術(shù)
Docker用Go編程語言編寫,并利用Linux內(nèi)核的多種功能來交付其功能。Docker使用一種稱為的技術(shù)namespaces來提供稱為容器的隔離工作區(qū)。運(yùn)行容器時,Docker會為該容器創(chuàng)建一組名稱空間。
這些名稱空間提供了一層隔離。容器的每個方面都在單獨(dú)的名稱空間中運(yùn)行,并且對其的訪問僅限于該名稱空間。
總結(jié)
以上是生活随笔為你收集整理的Docker基本原理概述的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Halide应用开发
- 下一篇: Dockerfile构建实践