1. 程式人生 > 實用技巧 >docker 介紹

docker 介紹

目錄

Docker引擎介紹 (Docker Engine)

Docker Engine是一個包含以下元件的客戶端-服務端(C/S)應用程式

服務端 — 一個長時間執行的守護程序(Docker Daemon)

REST API — 一套用於與Docker Daemon通訊並指示其執行操作的介面

客戶端 — 命令列介面CLI( Command Line Interface)

![](https://raw.githubusercontent.com/cwyfengyiyuan/images/master/1598069395_20200822115544507_20980.png =820x)

CLI利用Docker命令通過REST API直接操控Docker Daemon執行操作

Docker Daemon負責建立並管理Docker的物件(映象、容器、網路、資料卷)

Docker結構概覽介紹

Docker客戶端(Docker Client)

Docker客戶端(Docker Client)是使用者與Docker進行互動的最主要方式。當在終端輸入docker命令時,對應的就會在服務端產生對應的作用,並把結果返回給客戶端。Docker Client除了連線本地服務端,通過更改或指定DOCKER_HOST連線遠端服務端。

Docker服務端(Docker Server)

Docker Daemon其實就是Docker 的服務端。它負責監聽Docker API請求(如Docker Client)並管理Docker物件(Docker Objects),如映象、容器、網路、資料卷等

Docker Registries

俗稱Docker倉庫,專門用於儲存映象的雲服務環境.

Docker Hub就是一個公有的存放映象的地方,類似Github儲存程式碼檔案。同樣的也可以類似Github那樣搭建私有的倉庫。

Docker 物件(Docker Objects)

映象:一個Docker的可執行檔案,其中包括執行應用程式所需的所有程式碼內容、依賴庫、環境變數和配置檔案等。

容器:映象被執行起來後的例項。

網路:外部或者容器間如何互相訪問的網路方式,如host模式、bridge模式。

資料卷:容器與宿主機之間、容器與容器之間共享儲存方式,類似虛擬機器與主機之間的共享檔案目錄。

Docker 底層技術

  1. Docker使用Go語言實現,利用linux核心的幾個特性來實現功能
利用linux的名稱空間(Namespaces)

利用linux控制組(Control Groups)

利用linux的聯合檔案系統(Union File Systems)

這也就意味著Docker只能在linux上執行。

在windows、MacOS上執行Docker,其實本質上是藉助了虛擬化技術,然後在linux虛擬機器上執行的Docker程式。
  1. 容器格式( Container Format )
Docker Engine將namespace、cgroups、UnionFS進行組合後的一個package,就是一個容器格式(Container Format)。Docker通過對這個package中的namespace、cgroups、UnionFS進行管理控制實現容器的建立和生命週期管理。

容器格式(Container Format)有多種,其中Docker目前使用的容器格式被稱為libcontainer
  1. Namespaces(名稱空間),為Docker容器提供作業系統層面的隔離
程序號隔離:每一個容器內執行的第一個程序,程序號總是從1開始起算

網路隔離:容器的網路與宿主機或其他容器的網路是隔離的、分開的,也就是相當於兩個網路

程序間通隔離:容器中的程序與宿主機或其他容器中的程序是互相不可見的,通訊需要藉助網路

檔案系統掛載隔離: 容器擁有自己單獨的工作目錄

核心以及系統版本號隔離:容器檢視核心版本號或者系統版本號時,檢視的是容器的,而非宿主機的
  1. Control Groups(控制組-cgroups),為Docker容器提供硬體層面的隔離
控制組能控制應用程式所使用的硬體資源。

基於該性質,控制組幫助docker引擎將硬體資源共享給容器使用,並且加以約束和限制。如控制容器所使用的記憶體大小。
  1. Union File Systems(聯合檔案系統–UnionFS),利用分層(layer)思想管理映象和容器