如何将已有的Docker主机导入docker-machine

通常,Docker Machine可用于在远程主机上安装Docker Engine,然后便能启动、停止和重启受管理的Docker主机,还能够观察主机状态、升级Docker客户端和后台程序,以及对Docker客户端进行交互性配置。除此之外,Docker Machine还可以导入已经安装Docker Engine的主机。

一、环境描述

1. Docker Machine主机

  • 操作系统:CentOS 7.3 x86_64
  • IP:192.168.187.134
  • Docker版本:0.11.0, build 5b27455

2. Docker主机

二、设置SSH免密码登录

需要在Docker Machine主机中设置SSH免密码登录Docker主机,本节的所有命令都是在Docker Machine主机的Shell中执行的。使用ssh-key-gen命令生成公钥和私钥:

  1. ssh-keygen

终端会提示输入密钥保存目录、密钥访问密码和确认密码,采用默认设置即可,命运运行结果如下图所示:

产生SSH公钥

ssh-copy-id命令将公钥上传至远程的Docker主机,并将身份标识文件追加至Docker主机的~/.ssh/authorized_keys目录中:

  1. ssh-copy-id -i ~/.ssh/id_rsa.pub 192.168.187.135

终端会提示输入Docker主机的root登录密码,上传成功之后,终端输出如下图所示:

上传SSH公钥

测试SSH免密码登录是否设置成功:

  1. ssh 192.168.187.135

若SSH免密码登录成功,则终端输出如下图所示:

SSH免密码登录

最后,别忘了退出SSH登录状态!

三、建立符号链接

Docker Machine要求远程主机将Docker Engine安装在/usr/bin目录中,因此需要在Docker主机上创建相关的符号链接(否则导入Docker主机时会找不到已安装的Docker Engine,然后便会自动yum安装):

  1. ln -s /usr/local/docker/docker /usr/bin/docker
  2. ln -s /usr/local/docker/docker-containerd /usr/bin/docker-containerd
  3. ln -s /usr/local/docker/docker-containerd-ctr /usr/bin/docker-containerd-ctr
  4. ln -s /usr/local/docker/docker-containerd-shim /usr/bin/docker-containerd-shim
  5. ln -s /usr/local/docker/dockerd /usr/bin/dockerd
  6. ln -s /usr/local/docker/docker-init /usr/bin/docker-init
  7. ln -s /usr/local/docker/docker-proxy /usr/bin/docker-proxy
  8. ln -s /usr/local/docker/docker-runc /usr/bin/docker-runc

四、导入Docker主机

在Docker Machine主机中导入Docker主机:

  1. docker-machine -D create --driver generic --generic-ip-address=192.168.187.135 --generic-ssh-key ~/.ssh/id_rsa --engine-storage-driver overlay myvm1

上述命令各个选项的意义,如下所述:

  • –driver generic
    指定驱动程序为generic,若需要导入已有的Docker主机,则使用这种驱动程序。generic驱动会执行以下任务:
    ① 如果远程主机尚未运行Docker Engine,那么便会自动安装;
    ② 更新远程主机的软件包(apt-get update或yum update,等等);
    ③ 生成安全证书,确保Docker守护进程的安全性;
    ④ 重新启动Docker守护进程或后台服务,所有正在运行的容器都会停止;
    ⑤ 会将主机名修改为指定的机器名。

  • –generic-ip-address=192.168.187.135
    指定远程Docker主机的IP地址。

  • –generic-ssh-key ~/.ssh/id_rsa
    指定SSH公钥在Docker主机中的存放目录。

  • –engine-storage-driver overlay
    将Docker Engine使用的存储驱动程序指定为overlay。

检查Docker主机是否导入成功:

  1. docker-machine ls

若终端输出如下图所示,则表示Docker主机导入成功:

列出已导入的Docker主机