?
This document uses PHP Chinese website manual Release
Docker 是開發(fā),運(yùn)輸和運(yùn)行應(yīng)用程序的開放平臺。Docker 使您能夠?qū)?yīng)用程序與基礎(chǔ)架構(gòu)分離開來,從而可以快速交付軟件。借助 Docker,您可以像管理應(yīng)用程序一樣管理基礎(chǔ)架構(gòu)。通過利用 Docker 的方法快速進(jìn)行運(yùn)輸,測試和部署代碼,您可以顯著縮短編寫代碼和在生產(chǎn)環(huán)境中運(yùn)行代碼之間的延遲。
Docker 提供了在稱為容器的松散隔離環(huán)境中打包和運(yùn)行應(yīng)用程序的能力。隔離和安全性允許您在給定主機(jī)上同時運(yùn)行多個容器。容器是輕量級的,因為它們不需要管理程序的額外負(fù)載,而是直接在主機(jī)的內(nèi)核中運(yùn)行。這意味著,與使用虛擬機(jī)相比,您可以在給定的硬件組合上運(yùn)行更多的容器。你甚至可以在實際上是虛擬機(jī)的主機(jī)中運(yùn)行 Docker 容器!
Docker 提供工具和平臺來管理容器的生命周期:
使用容器開發(fā)您的應(yīng)用程序及其支持組件。
容器成為分發(fā)和測試你的應(yīng)用程序的單元。
準(zhǔn)備好后,將您的應(yīng)用程序部署到生產(chǎn)環(huán)境中,作為容器或協(xié)調(diào)服務(wù)。無論您的生產(chǎn)環(huán)境是本地數(shù)據(jù)中心,云提供商還是兩者的混合,這都是一樣的。
Docker Engine是一個包含以下主要組件的客戶端 - 服務(wù)器應(yīng)用程序:
一種稱為守護(hù)進(jìn)程(dockerd
命令)的長期運(yùn)行程序。
REST API指定程序可用于與守護(hù)進(jìn)程進(jìn)行通信并指示其執(zhí)行操作的接口。
命令行界面 (CLI)客戶端(docker
命令)。
該 CLI 使用多克爾 REST API 來控制或通過腳本或直接 CLI 命令多克爾守護(hù)進(jìn)程交互。許多其他 Docker 應(yīng)用程序使用底層API 和 CLI。守護(hù)程序創(chuàng)建并管理 Docker 對象,例如圖像,容器,網(wǎng)絡(luò)和卷。注意:Docker 使用開放源代碼 Apache 2.0許可證進(jìn)行許可。有關(guān)更多詳細(xì)信息,請參見下面的 Docker 體系結(jié)構(gòu)。我可以使用 Docker 進(jìn)行何種操作?快速,一致地交付您的應(yīng)用程序通過允許開發(fā)人員使用提供應(yīng)用程序和服務(wù)的本地容器在標(biāo)準(zhǔn)化環(huán)境中工作,Docker 簡化了開發(fā)生命周期。容器對持續(xù)集成和持續(xù)開發(fā)(CI / CD)工作流程非常有用。請考慮以下示例場景:
您的開發(fā)人員在本地編寫代碼,并使用 Docker 容器與同事分享他們的工作。
他們使用 Docker 將他們的應(yīng)用程序推入測試環(huán)境并執(zhí)行自動和手動測試。
當(dāng)開發(fā)人員發(fā)現(xiàn)錯誤時,他們可以在開發(fā)環(huán)境中修復(fù)它們,并將它們重新部署到測試環(huán)境進(jìn)行測試和驗證。
測試完成后,向客戶提供修補(bǔ)程序與將更新后的圖像推送到生產(chǎn)環(huán)境一樣簡單。
響應(yīng)式部署和縮放
Docke r的基于容器的平臺支持高度可移植的工作負(fù)載。Docker 容器可以在開發(fā)人員的本地筆記本電腦上,數(shù)據(jù)中心的物理或虛擬機(jī)上,云提供程序上或混合環(huán)境中運(yùn)行。
Docker 的可移植性和輕量級特性也使得動態(tài)管理工作負(fù)載變得非常容易,可以近乎實時地按業(yè)務(wù)需求擴(kuò)展或拆分應(yīng)用程序和服務(wù)。
在同一個硬件上運(yùn)行更多的工作負(fù)載
Docker 輕量且快速。它為基于虛擬機(jī)管理程序的虛擬機(jī)提供了一種可行,經(jīng)濟(jì)高效的替代方案,因此您可以使用更多計算容量來實現(xiàn)業(yè)務(wù)目標(biāo)。Docker 非常適合高密度環(huán)境和中小型部署,您需要以更少的資源實現(xiàn)更多功能。
Docker 使用客戶端 - 服務(wù)器體系結(jié)構(gòu)。Docker 客戶端與Docker 守護(hù)進(jìn)程通信,Docker 守護(hù)進(jìn)程負(fù)責(zé)構(gòu)建,運(yùn)行和分發(fā)Docker容器。Docker 客戶端和守護(hù)進(jìn)程可以在同一個系統(tǒng)上運(yùn)行,也可以將 Docker 客戶端連接到遠(yuǎn)程 Docker 守護(hù)進(jìn)程。Docker客戶端和守護(hù)進(jìn)程使用 REST API 通過 UNIX 套接字或網(wǎng)絡(luò)接口進(jìn)行通信。
Docker守護(hù)進(jìn)程(dockerd
)監(jiān)聽Docker API請求并管理Docker對象,如圖像,容器,網(wǎng)絡(luò)和卷。守護(hù)進(jìn)程還可以與其他守護(hù)進(jìn)程通信來管理Docker服務(wù)。
Docker 客戶端(docker
)是許多 Docker 用戶與 Docker 交互的主要方式。當(dāng)你使用諸如這樣的命令時docker run
,客戶端發(fā)送這些命令給dockerd
其執(zhí)行。該docker
命令使用Docker API。Docker 客戶端可以與多個守護(hù)進(jìn)程進(jìn)行通信。
Docker 注冊表存儲Docker鏡像。Docker Hub 和 Docker Cloud 是任何人都可以使用的公共注冊表,并且Docker默認(rèn)配置為在 Docker Hub 上查找圖像。你甚至可以運(yùn)行你自己的私人注冊表。如果您使用 Docker Datacenter(DDC),它包括Docker Trusted Registry(DTR)。
當(dāng)您使用docker pull
或docker run
命令時,所需的圖像將從您配置的注冊表中提取。當(dāng)您使用該docker push
命令時,您的圖像被推送到您配置的注冊表中。
Docker商店允許您購買和銷售 Docker 圖像或免費(fèi)發(fā)布。例如,您可以購買包含來自軟件供應(yīng)商的應(yīng)用程序或服務(wù)的 Docker 映像,并使用該映像將應(yīng)用程序部署到您的測試,臨時和生產(chǎn)環(huán)境中。您可以通過拉取新版本的圖像并重新部署容器來升級應(yīng)用程序。
當(dāng)您使用 Docker 時,您正在創(chuàng)建和使用圖像,容器,網(wǎng)絡(luò),卷,插件和其他對象。本節(jié)簡要介紹其中一些對象。
一個圖像是一個只讀用于創(chuàng)建一個泊塢容器的指令模板。通常,圖像基于另一張圖像,并具有一些額外的自定義功能。例如,您可以構(gòu)建基于該ubuntu
映像的映像,但會安裝 Apache Web 服務(wù)器和應(yīng)用程序,以及使應(yīng)用程序運(yùn)行所需的配置詳細(xì)信息。
您可能會創(chuàng)建自己的圖像,或者您可能只能使用其他人創(chuàng)建并在注冊表中發(fā)布的圖像。為了構(gòu)建您自己的圖像,您可以使用簡單的語法創(chuàng)建一個Dockerfile,以定義創(chuàng)建圖像并運(yùn)行它所需的步驟。Dockerfile 中的每條指令都會在圖像中創(chuàng)建一個圖層。當(dāng)您更改Dockerfile 并重建映像時,只重建那些已更改的圖層。與其他虛擬化技術(shù)相比,這是使圖像輕量,小巧,快速的一部分。
容器是圖像的可運(yùn)行實例。您可以使用 Docker API或CLI創(chuàng)建,運(yùn)行,停止,移動或刪除容器。您可以將容器連接到一個或多個網(wǎng)絡(luò),將存儲器連接到它,甚至可以根據(jù)其當(dāng)前狀態(tài)創(chuàng)建新映像。
默認(rèn)情況下,容器與其他容器及其主機(jī)相對隔離。您可以控制容器的網(wǎng)絡(luò),存儲或其他底層子系統(tǒng)與其他容器或主機(jī)的隔離程度。
容器由其圖像定義,以及您在創(chuàng)建或運(yùn)行時為其提供的任何配置選項。當(dāng)容器停止時,未存儲在永久存儲中的狀態(tài)更改將消失。
docker run
命令以下命令運(yùn)行一個ubuntu
容器,以交互方式附加到本地命令行會話并運(yùn)行/bin/bash
。
$ docker run -i -t ubuntu /bin/bash
當(dāng)您運(yùn)行此命令時,會發(fā)生以下情況(假定您正在使用默認(rèn)的注冊表配置):
如果您ubuntu
本地沒有鏡像,Docker 會從您配置的注冊表中提取它,就像您docker pull ubuntu
手動運(yùn)行一樣。
Docker 創(chuàng)建一個新的容器,就好像您docker create
手動運(yùn)行了一個命令一樣。
Docker 將一個讀寫文件系統(tǒng)分配給容器,作為其最后一層。這允許正在運(yùn)行的容器在其本地文件系統(tǒng)中創(chuàng)建或修改文件和目錄。
由于您沒有指定任何網(wǎng)絡(luò)選項,因此 Docker 會創(chuàng)建一個網(wǎng)絡(luò)接口來將容器連接到默認(rèn)網(wǎng)絡(luò)。這包括分配一個IP地址給容器。默認(rèn)情況下,容器可以使用主機(jī)的網(wǎng)絡(luò)連接連接到外部網(wǎng)絡(luò)。
Docker 啟動容器并執(zhí)行/bin/bash
。由于容器是交互式運(yùn)行并且連接到您的終端(由于-i
和-t
)標(biāo)志,因此您可以使用鍵盤提供輸入并將輸出記錄到您的終端。
當(dāng)您鍵入exit
以終止/bin/bash
命令時,容器停止但不會被刪除。您可以重新啟動或刪除它。
通過服務(wù),您可以跨多個 Docker 守護(hù)進(jìn)程擴(kuò)展容器,這些守護(hù)進(jìn)程可以作為一個群組與多個管理人員和工作人員一起工作。swarm中的每個成員都是 Docker 守護(hù)進(jìn)程,守護(hù)進(jìn)程都使用 Docker API 進(jìn)行通信。服務(wù)允許您定義所需的狀態(tài),例如在任何給定時間必須可用的服務(wù)的副本數(shù)量。默認(rèn)情況下,該服務(wù)在所有工作節(jié)點(diǎn)之間進(jìn)行負(fù)載平衡。對于消費(fèi)者來說,Docker 服務(wù)似乎是一個單一的應(yīng)用程序。Docker 引擎在Docker 1.12及更高版本中支持 swarm 模式。
Docker 使用Go編寫,利用 Linux 內(nèi)核的幾個特性來提供其功能。
Docker 使用一種叫做namespaces
提供稱為容器的獨(dú)立工作空間的技術(shù)。當(dāng)你運(yùn)行一個容器時,Docker 會為該容器創(chuàng)建一組命名空間。
這些名稱空間提供了一個隔離層。容器的每個方面都在單獨(dú)的名稱空間中運(yùn)行,并且其訪問權(quán)限限于該名稱空間。
Docker 引擎在 Linux 上使用如下的命名空間:
該 pid
命名空間:進(jìn)程隔離(PID:進(jìn)程ID)。
該 net
命名空間:管理網(wǎng)絡(luò)接口(NET:網(wǎng)絡(luò))。
該ipc
命名空間:管理訪問IPC資源(IPC:進(jìn)程間通信)。
該 mnt
命名空間:管理文件系統(tǒng)掛載點(diǎn)(MNT:摩)。
該 uts
命名空間:隔離內(nèi)核和版本標(biāo)識符。(UTS:Unix分時系統(tǒng))。
Linux 上的 Docker Engine 也依賴于另一種稱為控制組(cgroups
)的技術(shù)。cgroup 將應(yīng)用程序限制為一組特定的資源??刂平M允許 Docker 引擎將可用硬件資源共享給容器,并可選地強(qiáng)制實施限制和約束。例如,您可以限制可用于特定容器的內(nèi)存。
聯(lián)合文件系統(tǒng)或 UnionFS 是通過創(chuàng)建圖層進(jìn)行操作的文件系統(tǒng),使它們非常輕巧和快速。Docker 引擎使用 UnionFS 為容器提供構(gòu)建塊。Docker Engine 可以使用多種 UnionFS 變體,包括AUFS,btrfs,vfs和DeviceMapper。
Docker 引擎將名稱空間,控制組和 UnionFS 組合成一個名為容器格式的包裝器。默認(rèn)的容器格式是libcontainer
。將來,Docker 可以通過與諸如 BSD Jails 或 Solaris Zones等技術(shù)集成來支持其他容器格式。
閱讀關(guān)于安裝 Docker 的信息。
獲取 Docker 入門教程的實踐經(jīng)驗。
查看 Docker Engine 用戶指南中的示例和深入探討主題。
碼頭工人,介紹,文件,關(guān)于,技術(shù),理解