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 for Mac 和 Docker for Windows 应用程序的旧 Mac 或 Windows 笔记本电脑或台式机上工作,则需要 Docker Machine 来在本地“运行Docker”(即Docker Engine)。在 Mac 或 Windows box 中使用 Docker Toolbox 安装程序安装 Docker Machine 将为 Docker Engine 配置一个本地的虚拟机,使你能够连接它、并运行 docker 命令。
我想在远程系统上配置 Docker 宿主机
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 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
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
安装查看安装信息:
使用
远程创建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.102
创建主机成功后,可以通过 env 命令来让后续操作对象都是目标主机。
[root@centos7 ~]# docker-machine env centos7-3
远程登陆centos7-3,查看安装情况:
查看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
同时生成证书文件:
# ls /etc/docker/ ca.pem key.json server-key.pem server.pem
更多场景
通过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