Docker三剑客之Docker Machine

Docker Machine 是 Docker 官方编排(Orchestration)项目之一,负责在多种平台上快速安装 Docker 环境。Docker Machine 项目基于 Go 语言实现,目前在 Github 上进行维护。Docker Machine 是 Docker 官方提供的一个工具,它可以帮助我们在远程的机器上安装 Docker,或者在虚拟机 host 上直接安装虚拟机并在虚拟机中安装 Docker。我们还可以使用 docker-machine 命令,你能够启动,检测,停止和重启被管理的主机,升级Docker客户端和进程,也可以配置Docker客户端与主机通信。

将Machine CLI指向正在运行的托管主机,我们可以直接在该主机上运行docker命令。 例如,运行docker-machine env default指向名为default的主机,按照屏幕上的说明完成env设置,然后运行docker ps,docker run hello-world等等。

1、Why Docker Machine?

Docker Machine 使您可以在各种linux上配置远程Docker主机。此外,Machine 运行您在较旧的Mac或Windows系统上运行Docker。

Docker Machine有两个广泛的使用场景:

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

img

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

img

Docker Engine在Linux系统上本机运行。 如果你有一个Linux机器作为主系统,并且想要运行docker命令,那么你需要做的就是下载并安装Docker Engine。 但是,如果您想要一种有效的方法来在网络,云端甚至本地配置多个Docker主机,那么您需要Docker Machine。

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

2、Docker Enine和Docker Machine的区别是什么?

当人们说“Docker”时,他们通常指的是Docker Engine,由Docker守护程序组成的客户端 – 服务器应用程序,指定用于与守护进程交互的接口的REST API,以及与守护进程通信的命令行界面(CLI)客户端 (通过REST API包装器)。 Docker Engine接受来自CLI的docker命令,例如docker run ,docker ps列出正在运行的容器,docker image ls列出图像,等等。

img

而Docker Machine是一个用于配置和管理Dockerized主机(带有Docker Engine的主机)的工具。 通常,您在本地系统上安装Docker Machine。 Docker Machine有自己的命令行客户端docker-machine和Docker Engine客户端docker。 您可以使用Machine在一个或多个虚拟系统上安装Docker Engine。 这些虚拟系统可以是本地的(如使用Machine在Mac或Windows上的VirtualBox中安装和运行Docker Engine时)或远程(如使用Machine在云提供商上配置Dockerized主机时)。 可以想到Dockerized主机本身,有时也称为托管“机器”。

img

3、Docker Machine安装

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

Mac && Windows

Docker for Mac、Docker for Windows 自带 docker-machine 二进制包,安装之后即可使用。

查看版本信息:

docker-machine -v

docker-machine version 0.13.0, build 9ba6da9

Linux

在 Linux 上的也安装十分简单,从 官方 GitHub Release 处直接下载编译好的二进制文件即可;例如,在 Linux 64 位系统上直接下载对应的二进制包:

curl -L https://github.com/docker/machine/releases/download/v0.16.2/docker-machine-`uname -s`-`uname -m` >/tmp/docker-machine &&
    chmod +x /tmp/docker-machine &&
    sudo cp /tmp/docker-machine /usr/local/bin/docker-machine

完成后,查看版本信息:

img

4、Docker Machine使用

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

创建本地主机实例Virtualbox 驱动

使用 virtualbox 类型的驱动,创建一台 Docker 主机,命名为 test。

$ docker-machine create -d virtualbox test

img

这里因为没有安装virtualbox,我们需要提前安装一下virtualbox。通过vim命令添加并编辑.repo文件 vim /etc/yum.repos.d/virtualbox.repo 插入内容如下:

[virtualbox]
name=Oracle Linux / RHEL / CentOS-releasever /releasever/basearch - VirtualBox
baseurl=http://download.virtualbox.org/virtualbox/rpm/el/$releasever/$basearch
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://www.virtualbox.org/download/oracle_vbox.asc

通过yum search VirtualBox 命令查找具体安装版本,下图我们可以看到,列出了VirtualBox 的多个版本、这里我们安装VirtualBox 6.1:

img

安装完成之后通过/sbin/vboxconfig 重新加载virtualbox服务,如果提示内核版本不一致,会出现下面的报错,需要安装相同的内核版本,我们可以去https://pkgs.org/download/kernel-devel网站下载对应的内核版本、通过rpm -ivh 命令进行安装,并通过yum install gcc make perl -y命令安装相应插件:

img

安装完成之后我们通过rpm -qa kernel*命令查看内核版本、确定所需内核版本已经安装成功。然后我们再次通过/sbin/vboxconfig命令启动VirtualBox,可以看到VirtualBox已经成功启动:

img

我们继续通过 docker-machine create -d virtualbox test 命令创建virtualbox主机、再次提示错误,这个报错是提示我们没有开启虚拟化功能,我们直接打开即可:

img

我们再次通过 docker-machine create -d virtualbox test 命令已经可以成功创建virtualbox主机:

img

当然,你也可以在创建时加上如下参数,来配置主机或者主机上的 Docker。

–engine-opt dns=114.114.114.114 配置 Docker 的默认 DNS

–engine-registry-mirror https://registry.docker-cn.com 配置 Docker 的仓库镜像

–virtualbox-memory 2048 配置主机内存

–virtualbox-cpu-count 2 配置主机 CPU

更多参数请使用 docker-machine create –driver virtualbox –help 命令查看。

Windows 10 安装 Docker for Windows 之后不能再安装 VirtualBox,也就不能使用 virtualbox 驱动来创建 Docker Machine,我们可以选择使用 hyperv 驱动。

$ docker-machine create –driver hyperv vm
# 更多参数请使用 docker-machine create –driver hyperv –help 命令查看。

创建好主机之后,查看主机

[root@localhost ~]# docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
test – virtualbox Running tcp://192.168.99.100:2376 v19.03.5

创建主机成功后,可以通过 env 命令来让后续操作对象都是目标主机 docker-machine env test 后续根据提示在命令行输入命令之后就可以操作 test 主机;也可以通过 SSH 登录到主机;连接到主机之后你就可以在其上使用 Docker 了。

img

5、Docker Machine驱动

官方驱动

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

  • amazonec2
  • azure
  • digitalocean
  • exoscale
  • generic
  • google
  • hyperv
  • none
  • openstack
  • rackspace
  • softlayer
  • virtualbox
  • vmwarevcloudair
  • vmwarefusion
  • vmwarevsphere

第三方驱动

请到 第三方驱动列表 查看(https://github.com/docker/docker.github.io/blob/master/machine/AVAILABLE_DRIVER_PLUGINS.md)

6、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 输出帮助信息
# 每个命令,又带有不同的参数,可以通过 docker-machine COMMAND –help 来查看具体的用法。

推荐文章