架構是一個很大的概念,也絕非一兩篇文章能寫清楚的,這裏記錄本身認爲重要的部分和相關的學習資料。linux
Docker 總架構圖docker
docker 系統使用了 C/S 的架構,docker client 經過 REST API 請求 docker daemon 來管理 docker 的鏡像和容器等。json
Server 端駐守在後臺,稱之爲 docker daemonubuntu
Client 端是一個 CLI 程序,能夠在命令行中經過 docker
這個二進制文件進行交互api
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」,指的就是運行 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 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
。