您好,登錄后才能下訂單哦!
本篇內容主要講解“Docker的模塊組件有哪些”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Docker的模塊組件有哪些”吧!
Docker 是一個 C/S 模式的架構,后端是一個松耦合架構,模塊各司其職。下圖是它的總體架構圖:
1、用戶是使用 Docker Client 與 Docker Daemon 建立通信,并發送請求給后者。
2、Docker Daemon 作為 Docker 架構中的主體部分,首先提供 Docker Server 的功能使其可以接受 Docker Client 的請求。
3、Docker Engine 執行 Docker 內部的一系列工作,每一項工作都是以一個 Job 的形式的存在。
4、Job 的運行過程中,當需要容器鏡像時,則從 Docker Registry 中下載鏡像,并通過鏡像管理驅動 Graphdriver 將下載鏡像以 Graph 的形式存儲。
5、當需要為 Docker 創建網絡環境時,通過網絡管理驅動 Networkdriver 創建并配置 Docker容器網絡環境。
6、當需要限制 Docker 容器運行資源或執行用戶指令等操作時,則通過 Execdriver 來完成。
7、Libcontainer 是一項獨立的容器管理包,Networkdriver 以及 Execdriver 都是通過 Libcontainer 來實現具體對容器進行的操作。
1、Docker Client 是 和 Docker Daemon 建立通信的客戶端。用戶使用的可執行文件為 docker(一個命令行可執行文件),docker 命令使用后接參數的形式來實現一個完整的請求命令(例如:docker images,docker 為命令不可變,images 為參數可變)。
2、Docker Client 可以通過以下三種方式和 Docker Daemon 建立通信:tcp://host:port、unix://pathtosocket 和 fd://socketfd
3、Docker Client 發送容器管理請求后,由 Docker Daemon 接受并處理請求,當 Docker Client 接收到返回的請求相應并簡單處理后,Docker Client 一次完整的生命周期就結束了。(一次完整的請求:發送請求→處理請求→返回結果),與傳統的 C/S 架構請求流程并無不同。
Docker daemon 架構圖:
Docker Server 架構圖:
1、Docker Server 相當于 C/S 架構的服務端。功能為接受并調度分發 Docker Client 發送的請求。接受請求后,Docker Server 通過路由與分發調度,找到相應的 Handler 來執行請求。
2、在 Docker 的啟動過程中,通過包 gorilla/mux 創建了一個 mux.Router 來提供請求的路由功能。在 Golang 中 gorilla/mux 是一個強大的 URL 路由器以及調度分發器。該 mux.Router 中添加了眾多的路由項,每一個路由項由 HTTP 請求方法(PUT、POST、GET 或DELETE)、URL、Handler 三部分組成。
3、創建完 mux.Router 之后,Docker 將 Server 的監聽地址以及 mux.Router 作為參數來創建一個 httpSrv=http.Server{},最終執行 httpSrv.Serve() 為請求服務。
4、在 Docker Server 的服務過程中,Docker Server 在 listener 上接受 Docker Client 的訪問請求,并創建一個全新的 goroutine 來服務該請求。在 goroutine 中,首先讀取請求內容并做解析工作,接著找到相應的路由項并調用相應的 Handler 來處理該請求,最后 Handler 處理完請求之后回復該請求。
1、Docker Engine 是 Docker 架構中的運行引擎,同時也 Docker 運行的核心模塊。它扮演 Docker Container 存儲倉庫的角色,并且通過執行 Job 的方式來操縱管理這些容器。
2、在 Docker Engine 數據結構的設計與實現過程中,有一個 Handler 對象。該 Handler 對象存儲的都是關于眾多特定 Job 的 Handler 處理訪問。舉例說明: Docker Engine 的Handler 對象中有一項為:{“create”: daemon.ContainerCreate,},則說明當名為”create” 的 Job 在運行時,執行的是 daemon.ContainerCreate 的 Handler。
1、一個 Job 可以認為是 Docker 架構中 Docker Engine 內部最基本的工作執行單元。Docker 可以做的每一項工作,都可以抽象為一個 Job。例如:在容器內部運行一個進程,這是一個 Job;創建一個新的容器,這是一個 Job。Docker Server 的運行過程也是一個 Job,名為 ServeApi。
2、Job 的設計者,把 Job 設計得與 Unix 進程相仿。比如說:Job 有一個名稱、有參數、有環境變量、有標準的輸入輸出、有錯誤處理,有返回狀態等。
1、Docker Registry 是一個存儲容器鏡像的倉庫(注冊中心),可理解為云端鏡像倉庫。按 Repository 來分類,docker pull 按照 [repository]:[tag] 來精確定義一個具體的 Image。
2、在 Docker 的運行過程中,Docker Daemon 會與 Docker Registry 通信,并實現搜索鏡像、下載鏡像、上傳鏡像三個功能,這三個功能對應的 Job 名稱分別為:“search”、”pull” 與 “push”。
3 Docker Registry 可分為公有倉庫( Docker Hub)和私有倉庫。
Graph 架構圖:
Repository
1、已下載鏡像的保管者(包括下載的鏡像和通過 Dockerfile 構建的鏡像)。
搜索公眾號頂級架構師回復關鍵字“架構整潔”,獲取一份驚喜禮包。
2、一個 Repository 表示某類鏡像的倉庫(例如:Ubuntu),同一個 Repository 內的鏡像用 Tag 來區分(表示同一類鏡像的不同標簽或版本)。一個 Registry 包含多個Repository,一個 Repository 包含同類型的多個 Image。
3、鏡像的存儲類型有 Aufs、Devicemapper、Btrfs、Vfs等。其中 CentOS 系統 7.x 以下版本使用 Devicemapper 的存儲類型。
4、同時在 Graph 的本地目錄中存儲有關于每一個的容器鏡像具體信息,包含有:該容器鏡像的元數據、容器鏡像的大小信息、以及該容器鏡像所代表的具體 rootfs。
GraphDB
1、已下載容器鏡像之間關系的記錄者。
2、GraphDB 是一個構建在 SQLite 之上的小型數據庫,實現了節點的命名以及節點之間關聯關系的記錄。
Driver 是 Docker 架構中的驅動模塊。通過 Driver 驅動,Docker 可以實現對 Docker 容器執行環境的定制。即 Graph 負責鏡像的存儲,Driver 負責容器的執行。
Graphdriver
Graphdriver 架構圖:
1、Graphdriver 主要用于完成容器鏡像的管理,包括存儲與獲取。
2、存儲:docker pull 下載的鏡像由 Graphdriver 存儲到本地的指定目錄( Graph 中 )。
3、獲取:docker run(create)用鏡像來創建容器的時候由 Graphdriver 到本地 Graph中獲取鏡像。
Networkdriver
Networkdriver 架構圖:
Networkdriver 的用途是完成 Docker 容器網絡環境的配置,其中包括:
Docker 啟動時為 Docker 環境創建網橋。
Docker 容器創建時為其創建專屬虛擬網卡設備。
Docker 容器分配IP、端口并與宿主機做端口映射,設置容器防火墻策略等。
Execdriver
Execdriver 架構圖:
1、Execdriver 作為 Docker 容器的執行驅動,負責創建容器運行命名空間、容器資源使用的統計與限制、容器內部進程的真正運行等。
2、現在 Execdriver 默認使用 Native 驅動,不依賴于 LXC。
Libcontainer 架構圖:
1、Libcontainer 是 Docker 架構中一個使用 Go 語言設計實現的庫,設計初衷是希望該庫可以不依靠任何依賴,直接訪問內核中與容器相關的 API。
2、Docker 可以直接調用 Libcontainer 來操縱容器的 Namespace、Cgroups、Apparmor、網絡設備以及防火墻規則等。
3、Libcontainer 提供了一整套標準的接口來滿足上層對容器管理的需求。或者說 Libcontainer 屏蔽了 Docker 上層對容器的直接管理。
Docker Container 架構:
1、Docker Container( Docker 容器 )是 Docker 架構中服務交付的最終體現形式。
2、Docker 按照用戶的需求與指令,訂制相應的 Docker 容器:
用戶通過指定容器鏡像,使得 Docker 容器可以自定義 rootfs 等文件系統。
用戶通過指定計算資源的配額,使得 Docker 容器使用指定的計算資源。
用戶通過配置網絡及其安全策略,使得 Docker 容器擁有獨立且安全的網絡環境。
用戶通過指定運行的命令,使得 Docker 容器執行指定的工作。
到此,相信大家對“Docker的模塊組件有哪些”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。