理解Docker架構

2021-09-20 00:17:59 字數 3410 閱讀 2969

docker是乙個用於開發,發布和執行應用程式的開放平台。docker被設計用於更快的交付你的應用。使用dokcer,你可以將你的應用從基礎設施中分離出來,並且向對待乙個管理應用程式一樣對待你的基礎設施。docker幫助你更快的發布**,更快的測試,更快的部署和縮短編寫**和執行**的週期。

docker通過組合帶有工作流和工具的核心容器化特徵來實現,這些工具能夠幫助你管理和部署你的應用。

在她的核心,docker提供了乙個方式,該方式能夠在乙個容器中安全分離的執行任何程式。這種分離和安全性允許你同時在你的主機上執行任何容器。容器的輕量化特徵,不帶額外的虛擬機器載入來執行,意味著你可以獲取盡可能多的硬體。

圍繞著容器的是工具和乙個平台,他們可以以下面幾個方式幫助你:

1、更快的發布你的應用

docker在幫助縮短開發生命週期方面做的很完美。docker允許你的應用在本地容器中開發,該容器包含你的應用和服務程式。然後他會整合乙個連續的集合體和部署工作流。

舉個例子,你的開發者本地編寫**並且和他們的同事使用docker共享他們的開發棧。當他們完成之後,他們推送他們的**和棧進入到乙個測試環境中,執行任何必須的測試。從測試環境中,你可以推送docker映象到產品中,並部署你的**。

2、更簡單的部署和擴充套件

docker的基於容器的平台允許高度可移植的工作負載。docker容器可以執行在乙個開發者本地主機上,在乙個資料中心的物理或虛擬機器上,或者是在雲上。

docker的可移植性和輕量性特徵也使得動態管理工作負載更加容易。你可以使用docker更快的擴充套件和解除安裝應用和服務。docker的速度意味著擴充套件可以更加接近真實的時間。

3、實現更高的密度和執行更多的工作負載

docker是輕量的和快速的。相比較基於管理程式的虛擬機器,他提供乙個切實可行的,價效比高的選擇。這在高密度環境中是及其有用的:例如,構件你自己的雲或paas。但是他用於小中型的部署,你想要獲取更多的資源,也是很有用的。

docker有兩個主要元件:

docker使用乙個客戶端伺服器架構。docker客戶端和docker守護程序交流,docker守護程序做非常重要的工作,構建,執行和分發你的docker容器。docker客戶端和守護程序可以執行在同樣的系統上,或者是你可以連線乙個docker客戶端到乙個遠端docker守護程序中。docker客戶端和守護程序通過sockets或通過restful api進行溝通交流。

docker守護程序

正如上面的顯示,docker守護程序執行在乙個主機機器中。使用者不直接和守護程序互動,而是通過docker客戶端。

docker客戶端

docker客戶端,以docker二進位制的形式出現,是docker最基本的使用者介面。他接收來自使用者的命令,然後和docker守護程序來回溝通。

docker內部

為了能夠理解docker的內部,你需要去理解下面三個資源:

docker映象

docker註冊處

docker容器。

docker容器和目錄是相似的。乙個docker容器可以儲存任何東西,這些東西是執行乙個應用程式所必須的。每乙個容器都是從乙個docker映象中建立的。docker容器可以被執行,開啟,停止,移動和刪除。每乙個容器都是乙個分離的和安全的應用平台。docker容器是docker的執行元件。

我們已經知道docker映象是乙個唯讀的模板,在映象中docker容器被建立。每乙個容器包含一系列層。docker使用union檔案系統來組合這些層到乙個單一的映象中。union檔案系統允許分離檔案系統的檔案和目錄作為分支,被透明化的覆蓋,構成乙個單一的一致的檔案系統。

docker非常輕量化的乙個原因就是因為這些層。當你改變了乙個docker映象的時候–例如,更新乙個應用程式到乙個新版本–乙個新的層被構建。因此,不是替換整個映象或整體重新構建。就像你可能在乙個虛擬機器上工作,僅僅那一層被新增或更新。現在你不必發布乙個整體的新的映象,僅僅更新便可。這使得發布docker映象更快更簡單。

docker映象從這些基本映象中使用乙個簡單的,可描述的步驟,我們稱作指令,被構件。每乙個指令在我們的映象中建立乙個新層。指令包含的行為類似於:

這些指令被儲存在被稱為dockerfile的檔案中。乙個dockerfile是乙個基於包含構件映象的指令和命令指令碼的文字檔案。當你需要構件乙個映象,執行指令返回乙個最終映象的時候,docker讀取這個dockerfile

docker註冊處是你的docker映象的儲存處。一旦你構建了乙個docker映象,你可以將他推送到乙個公共的註冊處例如docker hub或者是到你自己的註冊處。

乙個容器包含乙個作業系統,使用者檔案和元資料。正如我們看到的,每乙個容器都是從映象中被構建的。那個映象告訴docker容器儲存什麼資料,當容器發布的時候執行什麼程序,還有其他一些配置資料。docker映象是唯讀的。當docker從乙個映象中執行乙個容器的時候,他在映象的最頂層新增乙個讀寫層(使用union檔案系統),在該層中你的應用程式可以執行。

無論是使用docker二進位制還是api,docker客戶端告訴docker守護程式來執行乙個容器。

$ docker run -i

-t ubuntu /bin/bash

docker引擎客戶端使用帶有run選項的docker二進位制執行乙個新的容器。docker客戶端需要告訴docker守護程序執行容器的最低限度是:

所以,當我們執行這個命令的時候鉤子下面發生了什麼?

按照次序,docker引擎做:

現在你就擁有乙個執行的容器了。現在你可以管理你的容器,與你的應用互動,當結束的時候,可以停止和移除你的容器。

docker是使用go編寫的,使用多個核心特徵來分發其功能。

docker充分使用稱為namespace的技術來提供分離的工作空間,我們稱為容器。當你執行乙個容器,docker為這個容器創造一些列命名空間。

這個提供了一層分離:容器的每乙個方面執行在他自己的明明空間中,並且不能訪問其命名空間之外的資料。

docker引擎在linux中使用的命名空間有:

在linux上的docker引擎也會使用其他的技術稱為cgroups或控制組。在分離體中執行程式的關鍵就是只讓他們使用你想要的資源。這能保證容器在主機中是乙個優秀的多租戶居民。控制組允許docker引擎共享可用硬體資源,如果必要,設定限制和約束。例如,為特定容器限制可用記憶體。

docker引擎組合這些元件到乙個包中,我們稱為乙個容器格式。預設的容器格式被稱為libcontainer。在將來,docker可能支援其他容器格式,例如,通過整合bsd jails或solaris zones。

Docker 系統架構

docker 使用客戶端 伺服器 c s 架構模式,使用遠端 api 來管理和建立 docker 容器。docker 容器通過 docker 映象來建立。容器與映象的關係類似於物件導向程式設計中的物件與類 docker 物件導向 容器物件映象類 標題說明 映象 images docker 映象是用於...

Docker 官方文件 理解 Docker

docker 是乙個用於開發 交付和執行應用的開放平台,docker 設計用來更快的交付你的應用程式。docker 能夠將你的應用程式和基礎設施層隔離。而且還能夠將你的基礎設施當作程式一樣進行管理。docker 能夠幫助你更塊地打包你 測試以及部署,而且也能夠降低從編寫 到部署執行 的週期。dock...

docker集群理解

某網際網路公司有12臺機器 2.在這些機器上面搭建docker環境 3.在docker容器中部署專案 4.docker容器中的網路和儲存是怎麼對映到主機上面的?網路對映 例如docker容器中的nginx監聽80埠?那麼是怎麼對應到宿主機的某個埠呢?容器內部的某個埠可以被宿主機的多個埠對映,比如 8...