Docker 實踐(一):瞭解架構

架構是一個很大的概念,也絕非一兩篇文章能寫清楚的,這裏記錄本身認爲重要的部分和相關的學習資料。linux

Docker 總架構圖docker

C/S 架構

docker 系統使用了 C/S 的架構,docker client 經過 REST API 請求 docker daemon 來管理 docker 的鏡像和容器等。json

  • Server 端駐守在後臺,稱之爲 docker daemonubuntu

  • Client 端是一個 CLI 程序,能夠在命令行中經過 docker 這個二進制文件進行交互api

Docker client

Docker client 是給用戶和 Docker daemon 創建通訊的客戶端,安裝了 docker 以後,二進制文件 docker 就是 Docker client,與 Docker daemon 交互,實現對 Docker image 和 container 的管理請求。bash

Docker client 與 docker daemon 創建請求的方式有三種,分別是:架構

  • tcp://host:portcurl

  • unix://path/to/socketsocket

  • fd://socketfdtcp

Docker daemon

Docker daemon 是一個常駐後臺的系統進程,所謂「運行 docker」,指的就是運行 Docker daemon,其做用主要有如下兩點:

  • 接受並處理 Docker Client 發送的請求

  • 管理全部的 Docker containers 和 Docker images

Docker daemon 的架構大體能夠分爲三部分:Docker Server、Engine 和 Job。

Docker daemon 架構示意圖

  • Docker Server 專門服務於 Docker Client,其做用是接受並調度分發 Docker client 發送的請求。

  • Engine 是 Docker 中的運行引擎, 是其運行的核心模塊。Engine 中存儲着大量的容器信息,也管理着 Docker 大部分 Job 的執行。

  • Job 是 Docker 中最基本的工做執行單元,Docker daemon 能夠完成的每一項工做都能呈現爲一個 Job。

Linux 下,使用 dockerd 命令,即可以 daemon 模式操做 docker

Docker Remote Api

docker daemon 會監聽 unix:///var/run/docker.sock 的 socket,提供一個 RESTful 的 Remote API,可供客戶端訪問,例如:

curl --unix-socket /var/run/docker.sock http:/containers/json\?all\=1

即可獲得全部的容器列表,至關於在 terminal 中執行了 docker ps -a 命令。

注:若是須要本身實現 docker client 的,可訪問 Docker Remote API 參考相關文檔。

docker daemon 監聽來自 remote api 的請求的方式有三種,unix、tcp 和 fd。

默認狀況下,監聽的是 unix:///var/run/docker.sock,在 linux 下,想要改變其監聽方式,可使用 dockerd 命令:

dockerd -H 0.0.0.0:5555

即可將 docker daemon 的監聽方式變爲 tcp://host:port 的方式,而後客戶端能夠

docker -H :5555 pull ubuntu

來訪問 daemon

相關文章
相關標籤/搜索