这篇文章上次修改于 2401 天前,可能其部分内容已经发生变化,如有疑问可询问作者。 ##Docker Machine 是什么? Docker Machine 是 Docker 官方提供的一个工具,用来批量管理Docker,同时支持win/linux/mac。我们还可以通过 docker-machine 命令来管理这些虚拟机和 Docker。 ##安装 Docker Machine 安装 Docker Machine 前请先在本地安装 Docker。 Docker Machine 的安装十分简单,在 Ubuntu 中直接把可执行文件下载到本地就可以了。 ``` $ curl -L https://github.com/docker/machine/releases/download/v0.14.0/docker-machine-`uname -s`-`uname -m` > /tmp/docker-machine $ chmod +x /tmp/docker-machine $ sudo mv /tmp/docker-machine /usr/local/bin/docker-machine ``` 安装完后 ``` nick@u16os:~/myworks[master]$ docker-machine -v docker-machine version 0.14.0, build 89b8332 ``` ##在远程主机上安装 Docker 前提条件:ssh证书登录已打通 例如下面就是在远程主机上安装docker的命令: ``` $ docker-machine create -d generic \ --generic-ip-address=xxx.xxx.xxx.xxx \ --generic-ssh-user=nick \ --generic-ssh-key ~/.ssh/id_rsa \ krdevdb ``` 注意,create 命令本是要创建虚拟主机并安装 Docker,因为本例中的目标主机已经存在,所以仅安装 Docker。-d 是 --driver 的简写形式,主要用来指定使用什么驱动程序来创建目标主机。Docker Machine 支持在云服务器上创建主机,就是靠使用不同的驱动来实现了。本例中使用 generic 就可以了。接下来以 --generic 开头的三个参数主要是指定操作的目标主机和使用的账户。最后一个参数 krdevdb 是虚拟机的名称,Docker Machine 会用它来设置目标主机的名称。具体用法请参考docker-machine -h 经过简短的等待 Docker 就在目标机器上安装成功了 ![docker-machine-install.png](/usr/uploads/2018/04/2738219140.png) ####检查安装结果 ``` docker-machine ls ``` ##管理远程的 Docker 使用本地的客户端连接远程的服务器 Docker Machine 通过设置DOCKER_HOST环境变量的方式来实现客户端链接到不同服务端!下面就让我们看看如何通过本地的 Docker 客户端在 krdevdb 这台主机上运行容器: ``` docker-machine env krdevdb ``` ![docker-shell.png](/usr/uploads/2018/04/3073569128.png) 接下来使用docker client就跟本地是一样的效果了 ##管理远程 Docker daemon 除了运行基本的 docker 命令,Docker Machine 还能够管理远程的 Docker 主机。比如我们可以通过 start, stop, restart 命令分别启动、关闭和重启远程的 Docker daemon。这里的情况稍微复杂一些,只有支持这些命令的驱动才能完成相关的操作。比如,我们分别关闭 krdevdb 和 testvm: ![docker-machine-manage.png](/usr/uploads/2018/04/2327747399.png) 前一个提示 generic 驱动不支持 stop 命令。而 testvm 是通过 vmwarevsphere 驱动安装的,所以成功的执行了 stop。 ##结语 Docker Machine 的目的是简化 Docker 的部署和管理。默认将部署最新版,对于使用kubernetes的同学或者国内用户,需要使用点小技巧,通过--engine-install-url自定义安装参数来部署最新稳定版。 详见下面代码 ``` # This value will automatically get changed for: # * edge # * test # * experimental DEFAULT_CHANNEL_VALUE="edge" if [ -z "$CHANNEL" ]; then CHANNEL=$DEFAULT_CHANNEL_VALUE fi DEFAULT_DOWNLOAD_URL="https://download.docker.com" if [ -z "$DOWNLOAD_URL" ]; then DOWNLOAD_URL=$DEFAULT_DOWNLOAD_URL fi ``` 不同channel的区别: - **Stable** gives you reliable updates every quarter - **Edge** gives you new features every month 参考: https://get.docker.com/
没有评论