前面咱们的实验环境中只有一个 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