Docker Machine 简介

Docker 继续探索

什么是Docker Machine

Docker Machine 是一种可让您在虚拟主机上安装 Docker Engine 并使用docker-machine命令管理主机的工具。你能使用Docker Machine 工具在你的本地 Mac 或 Windows boxs,公司网络,数据中心或 Azure 提供商(如 Azure,AWS 或 Digital Ocean)上创建 Docker 主机。

使用 docker-machine 命令,你能够开始、插入、停止和重启一个你所管理的主机、更新Docker的客户端和守护进程、并配置Docker配置以便和主机进行通信。

将Machine CLI指向一个正在运行并且托管的主机,你能够直接使用docker直接命令该主机。比如说,运行docker-machine env default指向一个名为defaule的主机,按照屏幕上的指令完成env的配置,并运行docker psdocker run hello-world等等

在Docker v1.12版本之前,Machine是在Mac和Window上运行Docker的唯一方法。从 Beta 版程序和 Docker v1.12 开始,Docker for Mac 和 Docker for Windows 可作为本地应用程序使用,并且是在在较新的台式机和笔记本电脑上的更好选择。我们鼓励您尝试这些新应用。 Docker for Mac 和Docker for Windows 的安装程序包括 Docker Machine,以及 Docker Compose。

在什么情况下使用Docker Machine

Docker Machine提供一种在各种各样的Linux主机上配置Docker的解决方案。此外Machine能够让你在老的的Mac和Windows上像上面一样运行Docker。

Docker有两个基本的应用场景:

  1. 我有一个旧的桌面系统,并且想在Mac和Windows上运行Docker

enter description here

如果你的主要工作环境是在一台旧的Mac或者Windows笔记本电脑或者台式机上,这些主机无法满足新的Docker for MacDocker for Windows的配置要求,那么你可以使用Docker Machine来在本地使用Docker Engine。

使用 Docker Toolbox 安装程序在 Mac 或 Windows box 上安装 Docker Machine 可以使用 Docker Engine 配置本地虚拟机,使您可以连接它并运行 docker 命令。

  1. 我想在远程系统中配置Docker主机

enter description here

Docker Engine在Linux系统上本机运行。如果有一个Linux box作为你的主系统,并且向运行docker命令,你需要的东西就是下载并安装Docker Engine。但是你想用一种高效的方式在网络、云端甚至本地配置多个Docker主机,你就需要Docker Machine

不管你的主系统是Linux、Max还是Windows,你都能够安装Docker Machine并且使用docker-machine去配置并管理大量的Docker主机。它会自动创建主机、安装Docker Engine并且配置docker 客户端。每个托管主机(“machine”)是 Docker 主机和配置的客户端的组合。

Docker Engine 和 Docker Machine的区别

当人们说“Docker”时,他们通常意味着 Docker Engine,即由 Docker 守护程序组成的客户端-服务器应用程序,指定用于与守护程序进行交互的接口的 REST API 以及与守护程序(通过 REST API 包装器)通信的命令行界面(CLI)客户端。Docker Engine 从 CLI 接受docker命令,例如docker run <image>docker ps列出运行的容器,docker images以列出镜像等。

enter description here

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

enter description here

安装 Docker Machine

安装Docker Machine的前提是你已经安装好Docker

Linux

1
2
curl -L https://github.com/docker/machine/releases/download/v0.13.0/docker-machine-`uname -s`-`uname -m` >/usr/local/bin/docker-machine && \
chmod +x /usr/local/bin/docker-machine

maxOS

1
2
curl -L https://github.com/docker/machine/releases/download/v0.13.0/docker-machine-`uname -s`-`uname -m` >/tmp/docker-machine && \
sudo install /tmp/docker-machine /usr/local/bin/docker-machine

Windows

使用GIt Bash工具安装,并且这个工具支持像chmod这样的Linux命令:

1
2
3
if [[ ! -d "$HOME/bin" ]]; then mkdir -p "$HOME/bin"; fi && \
curl -L https://github.com/docker/machine/releases/download/v0.13.0/docker-machine-Windows-x86_64.exe > "$HOME/bin/docker-machine.exe" && \
chmod +x "$HOME/bin/docker-machine.exe"

普通情况使用Docker Machine创建Machine

假设我现在有两个主机:主机1运行Docker Machine,创建主机2为Docker 主机

配置免交互认证登录

将主机1的公钥放入主机2的~/.ssh/authorized_keys文件中

或者使用ssh-copy-id完成上面的操作

修改sudoers文件

在主机2中的/etc/sudoers文件中添加Defaults visiblepw一行(或者把!visiblepw改为visiblepw

创建一个Docker主机

1
docker-machine create --driver generic--generic-ip-address=192.168.1.111 Ubuntu-004

使用docker-machinecreate创建machine时,会检测主机是否已经安装docker,如果安装就简单做相应的检查动作即可,如果未安装,则会安装最新版的docker

在云服务提供商平台使用Docker Machine

Docker Machine支持几个流行的云平台,如Digital Ocean、Amazon Web Services(AWS)、Microsoft Azure、Google Cloud Computing及其它等等,所以我们可以在不同的平台使用相同的接口来部署Docker。这里我们使用Digital Ocean驱动在Digital Ocean的服务器上部署Docker,运行如下命令:

1
2
3
docker-machine create --driver digitalocean --digitalocean-access-token <API-Token> Linux-test
eval "$(docker-machine env Linux-test)"

--driver选项指定digitalocean驱动,--digitalocean-access-token选项指定Digital Ocean Control Panel提供的API Token,命令最后的是我们创建的Docker虚拟机的机器名。

返回的信息如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Creating CA: /root/.docker/machine/certs/ca.pem
Creating client certificate: /root/.docker/machine/certs/cert.pem
Running pre-create checks...
Creating machine...
(Linux-test) Creating SSH key...
(Linux-test) Creating Digital Ocean droplet...
(Linux-test) Waiting for IP address to be assigned to the Droplet...
Waiting for machine to be running, this may take a few minutes...
Detecting operating system of created instance...
Waiting for SSH to be available...
Detecting the provisioner...
Provisioning with ubuntu(systemd)...
Installing Docker...
Copying certs to the local machine directory...
Copying certs to the remote machine...
Setting Docker configuration on the remote daemon...
Checking connection to Docker...
Docker is up and running!
To see how to connect your Docker Client to the Docker Engine running on this virtual machine, run: docker-machine env Linux-test

运行如上命令后,我们可以在Digital Ocean Droplet Panel中看到一个新的具有默认配置的droplet已经被创建出来了。

enter description here

简便起见,docker-machine会使用默认配置来部署Droplet。我们可以通过增加选项来定制我们的Droplet。这里是一些digitalocean相关的选项,我们可以使用它们来覆盖Docker Machine所使用的默认配置。

  • –digitalocean-image “ubuntu-14-04-x64” 用于选择Droplet的镜像
  • –digitalocean-ipv6 enable 启用IPv6网络支持
  • –digitalocean-private-networking enable 启用专用网络
  • –digitalocean-region “nyc3” 选择部署Droplet的区域
  • –digitalocean-size “512mb” 选择内存大小和部署的类型

如果你想在其他云服务使用docker-machine,并且想覆盖默认的配置,可以运行如下命令来获取Docker Mackine默认支持的对每种平台适用的参数。

1
docker-machine create -h

常用命令

查看主机

1
docker-machine ls

ACTIVE一列有“*”标记的是活跃主机,同时可以用docker-machine active命令来标记其他的主机为活跃主机

使用Docker容器

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

1
$ docker-machine env test

后续根据提示在命令行输入命令之后就可以操作 test 主机。

也可以通过 SSH 登录到主机:

1
2
3
4
$ docker-machine ssh test
docker@test:~$ docker --version
Docker version 17.10.0-ce, build f4ffd25

连接到主机之后你就可以在其上使用 Docker 了。

删除主机

删除在运行的主机以及它的所有镜像和容器,我们可以使用docker-machine rm命令:

1
docker-machine rm linux-dev

运行完以后,本地和与远端的都将删除,在云平台上的实例也会被删除

更多

  • 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 输出帮助信息