Docker 是一個(gè) Client-Server 架構的應用,人家是有官稱(chēng)的:Docker Engine。Docker 只是大家對 Docker Engine 的昵稱(chēng),當然 Docker 還有其他的意思,比如一家公司的名稱(chēng)。簡(jiǎn)單起見(jiàn),本文中的 Docker 等同于 Docker Engine。
提到 Docker 我們必須要知道它包含了三部分內容:
下圖很清晰的展示了它們之間的關(guān)系:
Docker Machine 則是一個(gè)安裝和管理 Docker 的工具。它有自己的命令行工具:docker-machine。
既然 Docker 客戶(hù)端要和 Docker daemon 通過(guò) REST API 通信,那就讓我們看看它們可以采用的方法有哪些:
我們可以簡(jiǎn)單的把 1 和 2 理解成一種方式,就是同一臺主機上的進(jìn)程間通信。至于 3 則很好理解:通過(guò) tcp 協(xié)議進(jìn)行跨網(wǎng)絡(luò )的通信。
既然 1 和 2 用于同一臺機器上的進(jìn)程間通信,那么我們可以猜想:安裝在同一主機上的 Docker 客戶(hù)端和 Docker daemon 就是通過(guò)這種方式來(lái)通信的。事實(shí)也正是如此,我們可以查看安裝 Docker 時(shí)默認添加的 Docker daemon 啟動(dòng)配置,打開(kāi)文件 /etc/systemd/system/multi-user.target.wants/docker.service:
圖中的 -H 用來(lái)指定 Docker Daemon 監聽(tīng)的 socket,此處指定的類(lèi)型為 system socket activation。使用類(lèi)型 1 和 2 進(jìn)行通信需要進(jìn)程具有 root 權限。這也是 Docker 安裝過(guò)程中會(huì )自動(dòng)創(chuàng )建一個(gè)具有 root 權限的用戶(hù)和用戶(hù)組的主要原因。新創(chuàng )建的用戶(hù)和用戶(hù)組名稱(chēng)為 docker,建議大家把需要操作 Docker 的用戶(hù)都加入到這個(gè)組中,否則當你執行命令時(shí)就會(huì )碰到下圖顯示的問(wèn)題:
我們還可以同時(shí)指定多個(gè) -H 參數讓 Docker daemon 同時(shí)監聽(tīng)不同的 socket 類(lèi)型。比如要添加對 TCP 端口 2376 的監聽(tīng)就可以使用下面的命令行參數:
$ sudo dockerd -H fd:// -H tcp://0.0.0.0:2376
運行上面的命令,然后查看本機監聽(tīng)的端口:
此時(shí)我們就可以從遠程主機上的 Docker 客戶(hù)端訪(fǎng)問(wèn)這部主機的 2376 端口了。
Docker 客戶(hù)端默認的配置是訪(fǎng)問(wèn)本機的 Docker daemon,當你指定了 DOCKER_HOST 變量后,Docker 客戶(hù)端會(huì )訪(fǎng)問(wèn)這個(gè)變量中指定的 Docker daemon。讓我們回顧一下 docker-machine env 命令:
執行的 $ eval $(docker-machine env krdevdb) 命令就是在設置 DOCKER_HOST 環(huán)境變量。
我們的 Docker daemon 監聽(tīng)了 tcp 端口,糟糕的是此時(shí)我們沒(méi)有做任何的保護措施。因此任何 Docker 客戶(hù)端都可以通過(guò) tcp 端口與我們的 Docker daemon 交互,這顯然是無(wú)法接受的。解決方案是同時(shí)啟用 Docker daemon 和 Docker 客戶(hù)端的 TLS ssl/' target='_blank'>證書(shū)認證機制。這樣 Docker daemon 和 Docker 客戶(hù)端之間的通信會(huì )被加密,并且只有安裝了特定證書(shū)的客戶(hù)端才能夠與對應的 Docker daemon 交互。
至此本文的鋪墊部分終于結束了,接下來(lái)我們將討論 Docker Machine 相關(guān)的內容。
根據 Docker Machine 驅動(dòng)的不同,create 命令執行的操作也不太一樣,但其中有兩步是我們在這里比較關(guān)心的:
docker-machine 會(huì )在您指定的主機上執行下面的操作:
配置 Docker daemon
Docker 的安裝過(guò)程并沒(méi)有什么秘密,這里不再贅述。我們重點(diǎn)關(guān)注 Docker daemon 的配置。仔細觀(guān)察我們會(huì )發(fā)現,通過(guò) docker-machine 安裝的 Docker 在 /etc/systemd/system 目錄下多出了一個(gè) Docker 相關(guān)的目錄:docker.service.d。這個(gè)目錄中只有一個(gè)文件 10-machine.conf:
好吧,-H tcp://0.0.0.0:2376 出現在這里并沒(méi)有讓我們太吃驚。在我們做了巨多的鋪墊之后,你應該覺(jué)得這是理所當然才是。--tls 開(kāi)頭的幾個(gè)參數主要和證書(shū)相關(guān),我們會(huì )在后面的安全設置中詳細的介紹它們。讓人多少有些疑惑的地方是上圖中的 /usr/bin/docker。當前最新版本的 Docker Machine 還在使用舊的方式設置 Docker daemon,希望在接下來(lái)的版本中會(huì )有所更新。
這個(gè)配置文件至關(guān)重要,因為它會(huì )覆蓋 Docker 默認安裝時(shí)的配置文件,從而以 Docker Machine 指定的方式啟動(dòng) Docker daemon。至此我們有了一個(gè)可以被遠程訪(fǎng)問(wèn)的 Docker daemon。
生成證書(shū)
我們在 Docker daemon 的配置文件中看到四個(gè)以 --tls 開(kāi)頭的參數,分別是 --tlsverify、--tlscacert、--tlscert和 –tlskey。其中的 --tlsverify 告訴 Docker daemon 需要通過(guò) TLS 來(lái)驗證遠程客戶(hù)端。其它三個(gè)參數分別指定了一個(gè) pem 格式文件的路徑,按照它們指定的文件路徑去查看一下:
對比一下手動(dòng)安裝的 Docker,會(huì )發(fā)現 /etc/docker 目錄下并沒(méi)有這三個(gè)文件。毫無(wú)疑問(wèn)它們是 Docker Machine 生成的,主要是為了啟用 Docker daemon 的 TLS 驗證功能。
現在讓我們回到安裝了 Docker Machine 的主機上。
查看 /home/nick/.docker/machines/krdevdb 目錄,發(fā)現了一些同名的文件(ca.pem、server-key.pem 和 server.pem),和主機 drdevdb 上的文件對比一下,發(fā)現它們是一樣的!
讓我們再來(lái)觀(guān)察一下這幅圖:
除了我們關(guān)注過(guò)的 DOCKER_HOST,還有另外三個(gè)環(huán)境變量。其中的 DOCKER_TLS_VERIFY 告訴 Docker 客戶(hù)端需要啟用 TLS 驗證。DOCKER_CERT_PATH 則指定了 TLS 驗證所依賴(lài)文件的目錄,這個(gè)目錄正是我們前面查看的 /home/nick/.docker/machines/krdevdb 目錄。
行文至此,困擾我們的安全問(wèn)題終于得到了解釋?zhuān)篋ocker Machine 在執行 create 命令的過(guò)程中,生成了一系列保證安全性的秘鑰和數字證書(shū)(*.pem)文件。這些文件在本地和遠程 Docker 主機上各存一份,本地的用于配置 Docker 客戶(hù)端,遠程主機上的用于配置 Docker daemon,讓兩邊都設置 TLS 驗證的標記,依此實(shí)現安全的通信。
從本文的前一部分可以看到,Docker 其實(shí)把該提供的都提供了,只是配置起來(lái)比較麻煩!但是對用戶(hù)來(lái)說(shuō),需要的總是更簡(jiǎn)單,更容易的配置。因此從使用者的角度來(lái)看,Docker Machine 確實(shí)很酷,一個(gè)命令下去不僅能夠安裝虛機和 Docker,還完成了很多手動(dòng)搞起來(lái)令人生畏的配置。然后帶來(lái)幾個(gè)清晰、簡(jiǎn)單的命令。再然后,同學(xué)們就可以開(kāi)心愉快的玩耍了!
到此這篇關(guān)于Docker Machine深入詳解的文章就介紹到這了,更多相關(guān)Docker Machine內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自本網(wǎng)站內容采集于網(wǎng)絡(luò )互聯(lián)網(wǎng)轉載等其它媒體和分享為主,內容觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如侵犯了原作者的版權,請告知一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容,聯(lián)系我們QQ:712375056,同時(shí)歡迎投稿傳遞力量。
Copyright ? 2009-2022 56dr.com. All Rights Reserved. 特網(wǎng)科技 特網(wǎng)云 版權所有 特網(wǎng)科技 粵ICP備16109289號
域名注冊服務(wù)機構:阿里云計算有限公司(萬(wàn)網(wǎng)) 域名服務(wù)機構:煙臺帝思普網(wǎng)絡(luò )科技有限公司(DNSPod) CDN服務(wù):阿里云計算有限公司 百度云 中國互聯(lián)網(wǎng)舉報中心 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證B2
建議您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流瀏覽器瀏覽本網(wǎng)站