Docker筆記1-概述

weixin_34124651發表於2018-02-23

參考文件:
Docker overview

The Docker platform

Docker提供可以在一個鬆隔離的環境中封裝和執行應用的能力,這個鬆隔離的環境被成為container。隔離和安全允許你在同一臺host同時執行多個container。Container是輕量級的,因為他們不需要額外載入管理者,而是直接在宿主機的核心上執行。這意味著相對於使用虛擬機器而言,你可以在一套硬體裝置上執行更多的container。你甚至可以使用虛擬機器作為宿主機,並在上面執行多個container。
Docker提供工具和一個平臺來管理container的生命週期:

  • 使用container開發應用和支援它的元件。
  • container成為分割應用和測試應用的單元。
  • 當你準備好後,使用container或一組協調工作的service來將應用部署到生產環境。無論你的生產環境是本地資料中心、雲服務提供者還是二者混合,所產生的效果是一樣的。

Docker Engine

Docker Engine是一個客戶端-服務端(C/S)應用,它具備以下幾個主要元件:

  • 一個長期執行的守護程式型別的服務(the dockerd command)
  • 一套REST API,用於指定程式訪問docker daemon併為其提供指令。
  • 一個控制檯客戶端(command line interface, CLI)(the docker command)


    7391491-6bf4a5910f9a1558.png
    Docker Engine

客戶端控制檯(CLI)使用Docker REST API通過指令碼或CLI命令來控制或影響Docker daemon。
Docker daemon建立並管理Docker物件(Docker objects),如映象(images),容器(containers),網路(networks),資料卷(volumes)。

Docker架構

Docker使用C/S架構。Docker Client(客戶端)訪問Docker Daemon(服務端),Docker daemon負責建立、執行、分割Docker container。
Docker Client和Docker Daemon可以在同一個系統下執行,也可以使用Docker Client遠端連線Docker daemon。client和daemon通過REST API訪問。


7391491-63e8586da46c6486.png
Docker架構

The Docker daemon

Docker daemon(dockerd)監聽Docker API請求並管理Docker物件,如image,container,network,volume。daemon也可以訪問其他daemon來管理docker service。

The Docker Client

Docker client(docker)是使用者用於影響Docker的私有方式。當你使用Docker命令如docker run,client傳送這些命令到dockerd服務,並由dockerd服務執行。docker命令使用Docker API。Docker client可以訪問多個daemon。

Docker registries(Docker註冊中心)

Docker registries儲存Docker image。Docker Hub和Docker Cloud是對所有人開放的註冊中心,並且Docker預設向DockerHub索取image。你可以建立私有註冊中心。如果使用Docker Datacenter (DDC),它包含了Docker Trusted Registry (DTR)。
當使用docker pull或者docker run命令時,所需要的image會從配置好的註冊中心中拉取下來。當使用docker push命令時,image推送到註冊中心。
你可以通過pull新版本的image並重新部署container來升級應用。

Docker objects

當你使用Docker時,你就在建立並使用image、container、network、volumes、plugin等物件。

映象(IMAGE)

image是一個整合用於建立Docker container指令的只讀的模版。通常情況下,一個image是基於另一個image,並新增一些額外的配置而來。
你可以自己建立image或者僅僅是從註冊中心獲取image並使用。

建立image

建立Dockerfile檔案。該檔案使用一些簡單的語法來定義建立映象所需要的步驟,並執行這些步驟。
Dockerfile中的每條指令會在image中建立一個新的層(layer)。
當你改變Dockerfile並重新建立image時,僅僅重建那些有變動的層。

容器(CONTAINERS)

容器是一個映象的可執行例項。
你可以使用Docker API或CLI建立、啟動、停止、移動和刪除container。
你可以將一個container連線至一個和多個網路、向其附加儲存器,也可以基於container的當前狀態建立一個新的image。
預設情況下,一個container相對於其他container和它的host machine是隔離的。你可以控制怎樣隔離container的網路、儲存,或者來自其他container和來自host machine的底層系統。
container由它的image和建立或啟動container時提供的配置項定義的。當一個container移除時,任何沒存儲存在持久化儲存中的狀態的更改都將丟失。

服務(SERVICE)

service允許跨多個Docker daemon擴充套件容器,他們將成為一個swarm,且擁有多個manager和worker。swarm中的每個成員都是一個Docker daemon,並且daemon都通過Docker API互相訪問。
service允許你定義期望的狀態,比如service在某一時間所需要執行的副本數量。
預設情況下,service的所有worker節點是負載均衡的。對於消費者來說,Docker service看上去就像一個應用一樣。

相關文章