本系列文章:docker
第一章:九析帶你完爆 Docker 安裝後端
第二章:九析帶你完爆 Docker 架構服務器
目錄架構
1 Docker 架構ide
2 Docker 組件工具
3 Docker 進程spa
3.1 客戶端進程操作系統
3.2 服務端進程3d
3.3 registry 進程rest
1 Docker 架構圖
我認爲一個好的架構圖要作好三件事,第一:要展現出全部重要組件;第二:要清晰定義這些組件的主次、層次、範圍和通訊等關係。第三:要足夠簡單,可讓人一目瞭然。我認爲上面的架構圖已經所有都作到了。
docker 由客戶端(client)、服務端( Docker daemon,簡稱 dockerd )和註冊服務器(Registry)三個組件組成,是典型的c/s架構。其中服務端組件的操做對象爲:鏡像(image)和容器(container)。docker 各個組件能夠在同一臺主機,也能夠在不一樣的主機。所以,Docker 已經不能再被簡單當作工具,而應該被當作一個平臺。
2 Docker 組件
docker 三大組件都各司其職,這裏能夠用一個生產加工型的企業作類比。
1) docker client: 管理部門。負責向 docker daemon 安排工做。
2)docker registry:倉儲部門。負責存儲生產原料(image)。
3)docker daemon:生產部門。和倉儲部門溝通,獲取生產原料;和管理部門溝通,接受任務,生產商品(container)。
3 Docker 進程
Docker 默認狀況下不安裝 registry。client 和 daemon 程序包路徑以下:
1) client: /usr/bin/docker
2) daemon: /usr/bin/dockerd
3.1 客戶端進程
客戶端進程生命週期很短,從發送命令給 daemon,再到 daemon 響應返回、打印到控制檯,每每幾秒鐘就結束了。下圖是客戶端進程的一個快照。
3.2 服務端進程
能夠直接使用以下命令來啓動服務端進程。
可是通常狀況下,docker 安裝程序會將服務端封裝成一個操做系統後臺服務,而後交給系統控制器 (systemctl) 來統一進行管理。這樣作的好處是之後能夠只經過名稱(docker)而不是路徑(/usr/bin/dockerd) 來管理後端服務了。
sudo systemctl enable docker
sudo systemctl start docker
sudo systemctl stop docker
sudo systemctl restart docker
sudo systemctl status docker
後臺服務配置文件路徑 /usr/lib/systemd/system/docker.service。截圖以下:
從截圖能夠看出系統服務運行時會依賴哪些其餘服務(Unit單元)、真正調用的後臺程序是(/usr/bin/dockerd)、資源限制(Limit)、重啓策略(Restart)等。
執行以下命令啓動服務端進程。
sudo systemctl start docker
ps aux | grep dockerd | grep -v grep
3.3 registry 進程
這裏首先要區分兩個概念:registry 和 repo。repo 僅僅表示存儲概念,而 registry 是 repo + 認證(鑑權、受權)。也就是說倉庫並非誰訪問均可以,它還須要有一個認證和准入的操做。
此外,registry 還有公共和私有之分。docker 默認使用的就是公共 registry(hub.docker.com)。所以你在本地是沒法看到 registry 的進程。若是你想在本地也看到 registry 的進程,你須要下載 registry 鏡像,並將鏡像加載在容器中運行才行。
sudo mkdir /opt/data/registry -p
sudo docker run -d -p 5000:5000 -v /opt/data/registry:/tmp/registry registry:2