為了保證可讀性,本文采用意譯而非直譯。另外,本文版權歸原作者所有,翻譯僅用于學習。
docker并非單體應用,它由多個組件構成。這篇博客將介紹docker守護進程(daemon)與docker命令行(cli)。事實上,當我們在談論安裝或使用docker時,所指的其實就是docker守護進程與命令行。
docker架構圖
解釋一下上圖中的元素:
docker守護進程(docker daemon)是運行在你的操作系統上的一個服務。目前,它只能運行在linux上,因為它依賴于一些linux內核特性(比如cgroup與namespace)。 但是,也有一些特殊的辦法讓docker運行在macos與windows上(運行在linux虛擬機中)。
docker守護進程提供了rest api。許多工具(docker命令行,docker compose等)都可以通過rest api與docker守護進程進行交互,例如創建容器,構建鏡像等。
docker命令行(docker cli)是與docker守護進程進行交互的主要工具。
docker是c/s架構
docker是client/server架構。其中docker守護進程是服務端,docker命令行是眾多客戶端之一。事實上,還有很多第三方的docker客戶端。
對于各種流行的編程語言,它們都有對應的docker客戶端。感興趣的話,你也可以開發一個,使用rest api與docker守護進程進行交互就好了。
通過客戶端,你可以管理docker的各種元素,包括鏡像、容器、網絡以及數據卷。對于docker感興趣的話,你不妨看看 dive into docker course。
docker命令行與守護進程如何交互?
從左至右理解上圖:
最左側是docker客戶端,即docker命令行。我們可以運行各種docker命令,比如構建鏡像(docker build),下載鏡像(docker pull),運行容器(docker run)。docker命令行可以安裝在各種操作系統上,例如windows,macos或者linux服務器。
中間是docker主機,docker守護進程運行在上面。docker命令行可以輕松地連接遠程的docker主機(給定ip和端口即可)。而在macos與windows上"運行"docker時,docker守護進程事實上運行在linux虛擬機中。這里關鍵點在于,docker守護進程和命令行可以運行在不同的主機上。
最右側是docker倉庫,它也是docker生態系統中的一份子。它是我們下載、上傳、存儲以及分享docker鏡像的地方。docker倉庫的細節與本文無關,因此不再贅述。
譯者按: docker是典型的c/s架構,其守護進程(daemon)與命令行(cli)是通過rest api進行交互的。
原文: understanding how the docker daemon and docker cli work together
譯者: fundebug
原文鏈接:https://blog.fundebug.com/2017/05/22/docker-cli-daemon/