Docker | Machine

2022年2月27日 · 1688 字 · 4 分钟 · Docker

一、简介

Docker Machine 是 Docker 官方编排项目之一,使用 go 语言编写的,使用不同引擎在多种平台上快速的安装 Docker 环境。
Docker Machine 是一个工具,它允许你在虚拟宿主机上安装 Docker,并使用 docker-machine 命令管理这个宿主机,可以使用 Docker Machine 在本地的 MAC 或者 windows box、公司网络,数据中心或者 AWS 这样的云提供商上创建 docker。
使用 docker-machine 命令,可以启动、审查、停止、重启托管的 docker 也可以升级 Docker 客户端和守护程序并配置 docker 客户端和宿主机通信。
Docker Machine 也可以集中管理所有的 docker 主机。

Docker Machine 是一个曾经非常流行的工具,它让你可以在远程主机、虚拟机或云平台上轻松安装和管理 Docker 引擎。
如果把 Docker 比作“集装箱”,Docker Machine 就是那个负责在空地上铺设码头底层架构的施工队。

二、为什么要使用 Docker Machine

Docker Machine 使你能够在各种 Linux 上配置多个远程 Docker 宿主机。
此外,Machine 允许你在较早的 Mac 或 Windows 系统上运行 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 和 Docker Machine 之间的区别

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

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 Mechine 可以在多种平台上安装使用,包括 Linux 、MacOS 以及 windows
Docker Mechine 安装非常的简单:GitHub 地址:Releases。
安装 Docker Mechine:

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

查看版本确认是否安装成功:

docker-machine -v

五、常用命令参数

  • active 查看当前激活状态的 Docker 主机
  • config 查看当前激活状态 Docker 主机的连接信息
  • creat 创建 Docker 主机
  • env 显示连接到某个主机需要的环境变量
  • inspect 以 json 格式输出指定 Docker 的详细信息
  • ip 获取指定 Docker 主机的地址
  • kill 直接杀死指定的 Docker 主机
  • ls 列出所有的管理主机
  • provision 重新配置指定主机
  • regenerate-certs 为某个主机重新生成 TLS 信息
  • restart 重启指定的主机
  • rm 删除某台 Docker 主机,对应的虚拟机也会被删除
  • ssh 通过 SSH 连接到主机上,执行命令
  • scp 在 Docker 主机之间以及 Docker 主机和本地主机之间通过 scp 远程复制数据
  • mount 使用 SSHFS 从计算机装载或卸载目录
  • start 启动一个指定的 Docker 主机,如果对象是个虚拟机,该虚拟机将被启动
  • status 获取指定 Docker 主机的状态 (包括:Running、Paused、Saved、Stopped、Stopping、Starting、Error) 等
  • stop 停止一个指定的 Docker 主机
  • upgrade 将一个指定主机的 Docker 版本更新为最新
  • url 获取指定 Docker 主机的监听 URL
  • version 显示 Docker Machine 的版本或者主机 Docker 版本
  • help 显示帮助信息

六、现状

Docker Machine 目前已经处于“维护模式”,官方不再积极开发新功能。
原因在于基础设施管理工具的进化:

  • 本地开发:现在有了 Docker Desktop(Windows/Mac),它内置了虚拟机管理,不再需要手动用 Machine 去折腾。
  • 云端部署:现在大家更多使用 Terraform 或云厂商自带的容器服务(如阿里云 ACK、AWS EKS),这些工具比 Docker Machine 更强大、更稳健。
  • 集群管理:正如你刚才图片里看到的 Docker Swarm 或 Kubernetes,它们自带了节点管理功能。

Reference Docker三剑客之Docker Machine