Docker 初探 (6) - Docker Machine
参考资料:
前言
Docker GetStarted Swarm 官方文档中,为了在单机上演示如何搭建 Docker Swarm
而引入了 Docker Machine
,并在其中穿插了虚拟 shell 环境的内容,个人认为这部分内容干扰了集群搭建的关键信息。
Docker Machine
通过 Docker Machine
可实现在虚拟主机或远程主机上安装 Docker
引擎,并使用 docker-machine
命令行对其进行管理的工具。Docker Machine
在 Docker for Mac
和 Docker for Windows
上都已经预装,Linux
系统需要手动安装。
Docker Machine
有以下两种常用场景:
- 有些老的桌面系统主机如
Windows
和Mac
,它们不满足预装Docker for Windows
或Docker for Mac
的条件,但我想要在这些系统上运行Docker
。 - 我想要在远程主机系统上运行统一的
Docker image
。
docker
守护进程由服务端和客户端两部分组成,服务端发布 REST API 接口开放给客户端,docker CLI
客户端通过 REST API 接口与服务端通信。
无论你的管理主机是 Windows
,Mac
还是 Linux
,都可以安装 Docker Machine
并使用 docker-machine
命令统一管理大量的 Docker
从机。通常,你会将 Docker Machine
安装到本地主机,Docker Machine
包含 docker-machine
命令行工具和 Docker
引擎的客户端 docker
命令行工具。可通过 docker-machine
命令行工具在本地主机的虚拟环境或云主机上安装 Docker
引擎,它将自动创建虚拟环境,安装 Docker
引擎,配置好 docker
客户端,每一个被管理的从机由 Docker host
(运行了 Docker 引擎的主机) 和一个配置好的客户端组成,它们通常又被称为 **_”machines”_**。
意即,如果仅仅安装
Docker Machine
,将不会在本机安装Docker
引擎,仅仅安装其客户端管理工具
在 Linux 上安装 Docker Machine
首先在 docker/machine release page 页面上找到最新的发布版本号,并修改以下命令对应的位置
1 | $ base=https://github.com/docker/machine/releases/download/v0.14.0 && |
打印 docker-machine
的版本以确认安装完成:
1 | $ docker-machine --version |
以非 driver 方式添加主机
Docker Machine
为众多的虚拟机和云服务商提供了 driver
,以通过这些驱动在不同的服务商主机上安装 Docker
引擎,但也提供了一种 url 的方式来添加已有 docker
主机:
1 | $ docker-machine create --driver none --url=tcp://50.134.234.20:2376 custombox |
此后,便可通过 docker-machine
远程管理列表中的所有主机,可通过 docker-machine ssh custombox
向该主机发送指令,例如:
1 | $ docker-machine ssh custombox "docker container ls" |
如果出于某些原因出现 ssh 连接的问题,那么可以改用系统本地的 ssh 进行通信,加入
--native-ssh
参数即可:docker-machine --native-ssh ssh
配置虚拟 Docker 主机的 shell 环境
除了通过 docker-machine ssh
向 Docker 主机发送命令之外,还可以使用 docker-machine env <machine>
配置一个虚拟 shell 环境直接与目标主机的 Docker 守护进程通信。这样,便可访问执行 docker-machine
的本地主机的资源,如 docker-compose.yml
文件:
1 | $ docker-machine env custombox |
执行输出结果返回的最后一行命令:
1 | eval $(docker-machine env myvm1) |
执行 docker-machine ls
验证 custombox
变成了活动主机,Active 一栏的 *
指示了该状态:
1 | $ docker-machine ls |
清除 docker-machine 的 shell 变量设置
1 | eval $(docker-machine env -u) |
该命令退出与目标主机建立的虚拟 shell 环境并回到之前的环境中。
有关 Docker Machine
更多详情参考 Docker Machine。