前面我們的實驗環境中只有一個 docker host,所有的容器都是運行在這一個 host 上的。但在真正的環境中會有多個 host,容器在這些 host 中啟動、運行、停止和銷毀,相關容器會通過網絡相互通信,無論它們是否位於相同的 host。
對於這樣一個 multi-host 環境,我們將如何高效地進行管理呢?
我們面臨的第一個問題是:為所有的 host 安裝和配置 docker。
在前面我們手工安裝了第一個 docker host,步驟包括:
-
安裝 https CA 證書
-
添加 GPG key
-
添加 docker apt 源
-
安裝 docker
可見步驟還是挺多的,對於多主機環境手工方式效率低且不容易保證一致性,針對這個問題,docker 給出的解決方案是 Docker Machine。
用 Docker Machine 可以批量安裝和配置 docker host,這個 host 可以是本地的虛擬機、物理機,也可以是公有雲中的雲主機。
Docker Machine 支持在不同的環境下安裝配置 docker host,包括:
-
常規 Linux 操作系統
-
虛擬化平台 - VirtualBox、VMWare、Hyper-V
-
OpenStack
-
公有雲 - Amazon Web Services、Microsoft Azure、Google Compute Engine、Digital Ocean 等
Docker Machine 為這些環境起了一個統一的名字:provider。對於某個特定的 provider,Docker Machine 使用相應的 driver 安裝和配置 docker host,如下圖所示:
下面我們通過實驗來學習 Docker Machine。
實驗環境描述
實驗環境中有三個運行 Ubuntu 的 host。
我們將在 192.168.56.101 上安裝 Docker Machine,然后通過 docker-machine 命令在其他兩個 host 上部署 docker。
安裝 Docker Machine
官方安裝文檔在 https://docs.docker.com/machine/install-machine/
安裝方法很簡單,執行如下命令:
curl -L https://github.com/docker/machine/releases/download/v0.9.0/docker-machine-`uname -s`-`uname -m` >/tmp/docker-machine &&
chmod +x /tmp/docker-machine &&
sudo cp /tmp/docker-machine /usr/local/bin/docker-machine
下載的執行文件被放到 /usr/local/bin 中,執行docker-mahine version
驗證命令是否可用:
注:當你看到這篇文章的時候,Docker Machine 應該有了更新的版本,可參考官方文檔進行安裝。
為了得到更好的體驗,我們可以安裝 bash completion script,這樣在 bash 能夠通過 tab
鍵補全 docker-mahine
的子命令和參數。安裝方法是從https://github.com/docker/machine/tree/master/contrib/completion/bash下載 completion script:
將其放置到 /etc/bash_completion.d
目錄下。然后將如下代碼添加到$HOME/.bashrc
:
PS1='[\u@\h \W$(__docker_machine_ps1)]\$ '
其作用是設置 docker-machine 的命令行提示符,不過要等到部署完其他兩個 host 才能看出效果。
Docker Machine 已經就緒,當前環境如下:
下一節我們學習如何創建 Machine。