What is Docker Machine?

    Docker Machine是一款可以通过Docker Machine命令在虚拟机上安装Docker引擎和管理主机的工具。Machine可以在本地mac后者Windows、数据中心、或者如Azure, AWS, or Digital Ocean等云环境下创建docker主机。

    使用Docker Machine命令可以启动、检查、停止和重启主机等,升级Docker客户端和守护进程,以及配置Docker客户端与主机进行通信。

Why should I use it?

Docker Machine 使你能够在各种 Linux 上配置多个远程 Docker 宿主机。此外,Machine 允许你在较早的 Mac 或 Windows 系统上运行 Docker,如上一主题所述。Docker Machine 有这两个广泛的用例。

  • 我有一个较旧的桌面系统,并希望在 Mac 或 Windows 上运行 Docker

Docker三剑客之Machine_第1张图片

如果你主要在不符合新的 Docker for Mac 和 Docker for Windows 应用程序的旧 Mac 或 Windows 笔记本电脑或台式机上工作,则需要 Docker Machine 来在本地“运行Docker”(即Docker Engine)。在 Mac 或 Windows box 中使用 Docker Toolbox 安装程序安装 Docker Machine 将为 Docker Engine 配置一个本地的虚拟机,使你能够连接它、并运行 docker 命令。

  • 我想在远程系统上配置 Docker 宿主机

Docker三剑客之Machine_第2张图片

Docker Engine Linux 系统上原生地运行。如果你有一个 Linux 作为你的主系统,并且想要运行 docker 命令,所有你需要做的就是下载并安装 Docker Engine 。然而,如果你想要在网络上、云中甚至本地配置多个 Docker 宿主机有一个有效的方式,你需要 Docker Machine。

无论你的主系统是 Mac、Windows 还是 Linux,你都可以在其上安装 Docker Machine,并使用 docker-machine 命令来配置和管理大量的 Docker 宿主机。它会自动创建宿主机、在其上安装 Docker Engine 、然后配置 docker 客户端。每个被管理的宿主机(“machine”)是 Docker 宿主机和配置好的客户端的结合。

Docker Engine 和 Docker Machine 有什么区别?

当人们说“Docker”时,他们通常是指 Docker Engine,它是一个客户端 - 服务器应用程序,由 Docker 守护进程、一个REST API指定与守护进程交互的接口、和一个命令行接口(CLI)与守护进程通信(通过封装REST API)。Docker Engine 从 CLI 中接受docker 命令,例如 docker run 、docker ps 来列出正在运行的容器、docker images 来列出镜像,等等。

Docker三剑客之Machine_第3张图片


Docker Machine 是一个用于配置和管理你的宿主机(上面具有 Docker Engine 的主机)的工具。通常,你在你的本地系统上安装 Docker Machine。Docker Machine有自己的命令行客户端 docker-machine 和 Docker Engine 客户端 docker。你可以使用 Machine 在一个或多个虚拟系统上安装 Docker Engine。

这些虚拟系统可以是本地的(就像你在 Mac 或 Windows 上使用 Machine 在 VirtualBox 中安装和运行 Docker Engine 一样)或远程的(就像你使用 Machine 在云提供商上 provision Dockerized 宿主机一样)。Dockerized 宿主机本身可以认为是,且有时就称为,被管理的“machines”。

Docker三剑客之Machine_第4张图片

安装Docker Machine

    Docker Machine 可以在多种操作系统平台上安装,包括 Linux、Mac OS,以及Windows。

Linux下安装

    直接下载Docker Machine二进制文件即可。

[root@centos7 ~]#base=https://github.com/docker/machine/releases/download/v0.14.0 &&  
curl -L $base/docker-machine-$(uname -s)-$(uname -m) >/tmp/docker-machine &&  
sudo install /tmp/docker-machine /usr/local/bin/docker-machine

    安装查看安装信息:

image.png

使用

远程创建Docker引擎

Docker Machine 支持多种后端驱动,包括虚拟机、本地主机和云平台等。

通过docker machine在远程主机中创建docker环境,创建动作包括:ssh登录远程主机、安装docker、拷贝证书、配置docker daemon、启动docker。因此,在使用前需要配置ssh密钥认证

使用 generic 类型的驱动,创建一台 Docker 主机,命名为 centos7-3。

[root@centos7 ~]# docker-machine create --driver generic --generic-ip-address=192.168.39.102 centos7-3

注意:主机名为centos7-3,其ip为192.168.39.102Docker三剑客之Machine_第5张图片

创建主机成功后,可以通过 env 命令来让后续操作对象都是目标主机。

[root@centos7 ~]# docker-machine env centos7-3

Docker三剑客之Machine_第6张图片

远程登陆centos7-3,查看安装情况:

Docker三剑客之Machine_第7张图片

查看machine下的服务器列表:

[root@centos7 ~]# docker-machine ls
NAME        ACTIVE   DRIVER    STATE     URL                         SWARM   DOCKER        ERRORS
centos7-3   -        generic   Running   tcp://192.168.39.102:2376           v18.06.1-ce   
centos7-4   *        generic   Running   tcp://192.168.39.103:2376           v18.06.1-ce

可以通过 SSH 登录到主机:

[root@centos7 ~]# docker-machine ssh centos7-3

通过docker machine创建的docker主机时,在环境下会多处docker.service.d文件夹,该文件夹下只有一个配置文件10-machine.conf

# cat /etc/systemd/system/docker.service.d/10-machine.conf

image.png

同时生成证书文件:

# ls /etc/docker/
ca.pem          key.json        server-key.pem  server.pem

Docker三剑客之Machine_第8张图片

更多场景

通过docker-machine可以在本地创建docker主机;可以创建一个带有docker主机的虚拟机;也可以在阿里云等云环境中创建docker主机。官方文档中有更加详细的使用说明。

Docker Machine常用命令

  • active 查看活跃的 Docker 主机

  • config 输出连接的配置信息

  • create 创建一个 Docker 主机

  • env 显示连接到某个主机需要的环境变量

  • inspect 输出主机更多信息

  • ip 获取主机地址

  • kill 停止某个主机

  • ls 列出所有管理的主机

  • provision 重新设置一个已存在的主机

  • regenerate-certs 为某个主机重新生成 TLS 认证信息

  • restart 重启主机

  • rm 删除某台主机

  • ssh SSH 到主机上执行命令

  • scp 在主机之间复制文件

  • mount 挂载主机目录到本地

  • start 启动一个主机

  • status 查看主机状态

  • stop 停止一个主机

  • upgrade 更新主机 Docker 版本为最新

  • url 获取主机的 URL

  • version 输出 docker-machine 版本信息

  • help 输出帮助信息

每个参数又都是有help的,可以通过:

docker-machine  -h

查看具体帮助信息。

支持驱动
通过 -d 选项可以选择支持的驱动类型。

  • amazonec2 

  • azure 

  • digitalocean 

  • exoscale 

  • generic

  • google

  • none

  • openstack 

  • rackspace 

  • softlayer 

  • virtualbox 

  • vmwarevcloudair 

  • vmwarevsphere

参考资料:

https://docs.docker.com/machine/overview/

https://blog.51cto.com/ityouknow/2092774