溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Docker Machine怎么應(yīng)用

發(fā)布時間:2022-05-25 14:47:19 來源:億速云 閱讀:131 作者:iii 欄目:大數(shù)據(jù)

今天小編給大家分享一下Docker Machine怎么應(yīng)用的相關(guān)知識點,內(nèi)容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

docker 與 docker machine 的區(qū)別

docker 是一個 client-server 架構(gòu)的應(yīng)用,人家是有官稱的:docker engine。docker 只是大家對 docker engine 的昵稱,當然 docker 還有其他的意思,比如一家公司的名稱。簡單起見,本文中的 docker 等同于 docker engine。

提到 docker 我們必須要知道它包含了三部分內(nèi)容:

  • docker daemon

  • 一套與 docker daemon 交互的 rest api

  • 一個命令行客戶端

下圖很清晰的展示了它們之間的關(guān)系:

Docker Machine怎么應(yīng)用

docker machine 則是一個安裝和管理 docker 的工具。它有自己的命令行工具:docker-machine。

docker daemon socket

既然 docker 客戶端要和 docker daemon 通過 rest api 通信,那就讓我們看看它們可以采用的方法有哪些:

  • unix socket

  • systemd socket activation

  • tcp

我們可以簡單的把 1 和 2 理解成一種方式,就是同一臺主機上的進程間通信。至于 3 則很好理解:通過 tcp 協(xié)議進行跨網(wǎng)絡(luò)的通信。

既然 1 和 2 用于同一臺機器上的進程間通信,那么我們可以猜想:安裝在同一主機上的 docker 客戶端和 docker daemon 就是通過這種方式來通信的。事實也正是如此,我們可以查看安裝 docker 時默認添加的 docker daemon 啟動配置,打開文件 /etc/systemd/system/multi-user.target.wants/docker.service:

Docker Machine怎么應(yīng)用

圖中的 -h 用來指定 docker daemon 監(jiān)聽的 socket,此處指定的類型為 system socket activation。使用類型 1 和 2 進行通信需要進程具有 root 權(quán)限。這也是 docker 安裝過程中會自動創(chuàng)建一個具有 root 權(quán)限的用戶和用戶組的主要原因。新創(chuàng)建的用戶和用戶組名稱為 docker,建議大家把需要操作 docker 的用戶都加入到這個組中,否則當你執(zhí)行命令時就會碰到下圖顯示的問題:

Docker Machine怎么應(yīng)用

我們還可以同時指定多個 -h 參數(shù)讓 docker daemon 同時監(jiān)聽不同的 socket 類型。比如要添加對 tcp 端口 2376 的監(jiān)聽就可以使用下面的命令行參數(shù):

$ sudo dockerd -h fd:// -h tcp://0.0.0.0:2376

運行上面的命令,然后查看本機監(jiān)聽的端口:

Docker Machine怎么應(yīng)用

此時我們就可以從遠程主機上的 docker 客戶端訪問這部主機的 2376 端口了。

docker_host 環(huán)境變量

docker 客戶端默認的配置是訪問本機的 docker daemon,當你指定了 docker_host 變量后,docker 客戶端會訪問這個變量中指定的 docker daemon。讓我們回顧一下 docker-machine env 命令:

Docker Machine怎么應(yīng)用

原來我們在中執(zhí)行的 $ eval $(docker-machine env krdevdb) 命令就是在設(shè)置 docker_host 環(huán)境變量。

解決安全問題

我們的 docker daemon 監(jiān)聽了 tcp 端口,糟糕的是此時我們沒有做任何的保護措施。因此任何 docker 客戶端都可以通過 tcp 端口與我們的 docker daemon 交互,這顯然是無法接受的。解決方案是同時啟用 docker daemon 和 docker 客戶端的 tls 證書認證機制。這樣 docker daemon 和 docker 客戶端之間的通信會被加密,并且只有安裝了特定證書的客戶端才能夠與對應(yīng)的 docker daemon 交互。

至此本文的鋪墊部分終于結(jié)束了,接下來我們將討論 docker machine 相關(guān)的內(nèi)容。

docker machine create 命令

根據(jù) docker machine 驅(qū)動的不同,create 命令執(zhí)行的操作也不太一樣,但其中有兩步是我們在這里比較關(guān)心的:

docker-machine 會在您指定的主機上執(zhí)行下面的操作:

  • 安裝 docker,并進行配置。

  • 生成證書保護 docker 服務(wù)的安全。

配置 docker daemon

docker 的安裝過程并沒有什么秘密,這里不再贅述。我們重點關(guān)注 docker daemon 的配置。仔細觀察我們會發(fā)現(xiàn),通過 docker-machine 安裝的 docker 在 /etc/systemd/system 目錄下多出了一個 docker 相關(guān)的目錄:docker.service.d。這個目錄中只有一個文件 10-machine.conf:

Docker Machine怎么應(yīng)用

好吧,-h tcp://0.0.0.0:2376 出現(xiàn)在這里并沒有讓我們太吃驚。在我們做了巨多的鋪墊之后,你應(yīng)該覺得這是理所當然才是。--tls 開頭的幾個參數(shù)主要和證書相關(guān),我們會在后面的安全設(shè)置中詳細的介紹它們。讓人多少有些疑惑的地方是上圖中的 /usr/bin/docker。當前最新版本的 docker machine 還在使用舊的方式設(shè)置 docker daemon,希望在接下來的版本中會有所更新。

這個配置文件至關(guān)重要,因為它會覆蓋 docker 默認安裝時的配置文件,從而以 docker machine 指定的方式啟動 docker daemon。至此我們有了一個可以被遠程訪問的 docker daemon。

生成證書

我們在 docker daemon 的配置文件中看到四個以 --tls 開頭的參數(shù),分別是 --tlsverify、--tlscacert、--tlscert和 –tlskey。其中的 --tlsverify 告訴 docker daemon 需要通過 tls 來驗證遠程客戶端。其它三個參數(shù)分別指定了一個 pem 格式文件的路徑,按照它們指定的文件路徑去查看一下:

Docker Machine怎么應(yīng)用

對比一下手動安裝的 docker,會發(fā)現(xiàn) /etc/docker 目錄下并沒有這三個文件。毫無疑問它們是 docker machine 生成的,主要是為了啟用 docker daemon 的 tls 驗證功能。關(guān)于 tls,筆者在《局域網(wǎng)內(nèi)部署 docker registry》一文中略有涉及,當時是手動配置的證書,感興趣的朋友可以參考一下。

現(xiàn)在讓我們回到安裝了 docker machine 的主機上。

查看 /home/nick/.docker/machines/krdevdb 目錄,發(fā)現(xiàn)了一些同名的文件(ca.pem、server-key.pem 和 server.pem),和主機 drdevdb 上的文件對比一下,發(fā)現(xiàn)它們是一樣的!

讓我們再來觀察一下這幅圖:

Docker Machine怎么應(yīng)用

除了我們關(guān)注過的 docker_host,還有另外三個環(huán)境變量。其中的 docker_tls_verify 告訴 docker 客戶端需要啟用 tls 驗證。docker_cert_path 則指定了 tls 驗證所依賴文件的目錄,這個目錄正是我們前面查看的 /home/nick/.docker/machines/krdevdb 目錄。

行文至此,困擾我們的安全問題終于得到了解釋:docker machine 在執(zhí)行 create 命令的過程中,生成了一系列保證安全性的秘鑰和數(shù)字證書(*.pem)文件。這些文件在本地和遠程 docker 主機上各存一份,本地的用于配置 docker 客戶端,遠程主機上的用于配置 docker daemon,讓兩邊都設(shè)置 tls 驗證的標記,依此實現(xiàn)安全的通信。

以上就是“Docker Machine怎么應(yīng)用”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學(xué)習(xí)更多的知識,請關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI