前面咱們的實驗環境中只有一個 docker host,全部的容器都是運行在這一個 host 上的。但在真正的環境中會有多個 host,容器在這些 host 中啓動、運行、中止和銷燬,相關容器會經過網絡相互通訊,不管它們是否位於相同的 host。git
對於這樣一個 multi-host 環境,咱們將如何高效地進行管理呢?咱們面臨的第一個問題是:爲全部的 host 安裝和配置 docker。github
在前面咱們手工安裝了第一個 docker host,步驟包括:(詳細見:容器環境搭建)docker
可見步驟仍是挺多的,對於多主機環境手工方式效率低且不容易保證一致性,針對這個問題,docker 給出的解決方案是 Docker Machine。bash
用 Docker Machine 能夠批量安裝和配置 docker host,這個 host 能夠是本地的虛擬機、物理機,也能夠是公有云中的雲主機。網絡
Docker Machine 支持在不一樣的環境下安裝配置 docker host,包括:app
Docker Machine 爲這些環境起了一個統一的名字:provider。對於某個特定的 provider,Docker Machine 使用相應的 driver 安裝和配置 docker host,以下圖所示:curl
下面咱們經過實驗來學習 Docker Machine。ide
實驗環境中有三個運行 Ubuntu 的 host。學習
咱們將在 10.0.0.20上安裝 Docker Machine,而後經過 docker-machine 命令在其餘兩個 host 上部署 docker。ui
官方安裝文檔在 https://docs.docker.com/machine/install-machine/
安裝方法很簡單,執行以下命令:
$ base=https://github.com/docker/machine/releases/download/v0.16.0 && curl -L $base/docker-machine-$(uname -s)-$(uname -m) >/tmp/docker-machine && sudo mv /tmp/docker-machine /usr/local/bin/docker-machine && chmod +x /usr/local/bin/docker-machine
下載的執行文件被放到 /usr/local/bin 中,執行docker-mahine version
驗證命令是否可用:
root@cuiyongchao:~# docker-machine version docker-machine version 0.16.0, build 702c267f root@cuiyongchao:~#
注:當你看到這篇文章的時候,Docker Machine 應該有了更新的版本,可參考官方文檔進行安裝。
爲了獲得更好的體驗,咱們能夠安裝 bash completion script,這樣在 bash 可以經過 tab
鍵補全 docker-mahine
的子命令和參數。安裝方法是從https://github.com/docker/machine/tree/master/contrib/completion/bash下載 completion script:
docker-machine.bash ;docker-machine-prompt.bash ; docker-machine-wrapper.bash
base=https://raw.githubusercontent.com/docker/machine/v0.16.0 for i in docker-machine-prompt.bash docker-machine-wrapper.bash docker-machine.bash do sudo wget "$base/contrib/completion/bash/${i}" -P /etc/bash_completion.d done
將其放置到 /etc/bash_completion.d
目錄下,啓動 docker-machine
後,增長 $(__docker_machine_ps1)
到~/.bashrc
.
PS1='[\u@\h \W$(__docker_machine_ps1)]\$ ' PS1='[\u@\h \W$(__docker_machine_ps1)]\$ '
其做用是設置 docker-machine 的命令行提示符,不過要等到部署完其餘兩個 host 才能看出效果。
Docker Machine 已經就緒,當前環境以下:
10.0.0.20>10.0.0.21>10.0.0.22