通常,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主机
操作系统:CentOS 7.3 x86_64
IP:192.168.187.135
Docker Machine版本:17.03.1-ce
主机名:myvm1
安装方式:参考《如何在CentOS上手动安装Docker》
二、设置SSH免密码登录
需要在Docker Machine主机中设置SSH免密码登录Docker主机,本节的所有命令都是在Docker Machine主机的Shell中执行的。使用ssh-keygen命令生成公钥和私钥:
ssh-keygen
终端会提示输入密钥保存目录、密钥访问密码和确认密码,采用默认设置即可,命令运行结果如下图所示:
生成SSH密钥
使用ssh-copy-id命令将公钥上传至远程的Docker主机,并将身份标识文件追加至Docker主机的~/.ssh/authorized_keys目录中:
ssh-copy-id -i ~/.ssh/id_rsa.pub 192.168.187.135
终端会提示输入Docker主机的root登录密码,上传成功之后,终端输出如下图所示:
上传SSH公钥
测试SSH免密码登录是否设置成功:
ssh 192.168.187.135
若SSH免密码登录成功,则终端输出如下图所示:
测试SSH免密码登录
最后,别忘了退出SSH登录状态!
三、建立符号链接
Docker Machine要求远程主机将Docker Engine安装在/usr/bin目录中,因此需要在Docker主机上创建相关的符号链接(否则导入Docker主机时会找不到已安装的Docker Engine,然后便会自动yum安装):
ln -s /usr/local/docker/docker /usr/bin/docker ln -s /usr/local/docker/docker-containerd /usr/bin/docker-containerd ln -s /usr/local/docker/docker-containerd-ctr /usr/bin/docker-containerd-ctr ln -s /usr/local/docker/docker-containerd-shim /usr/bin/docker-containerd-shim ln -s /usr/local/docker/dockerd /usr/bin/dockerd ln -s /usr/local/docker/docker-init /usr/bin/docker-init ln -s /usr/local/docker/docker-proxy /usr/bin/docker-proxy ln -s /usr/local/docker/docker-runc /usr/bin/docker-runc
四、导入Docker主机
在Docker Machine主机中导入Docker主机:
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主机是否导入成功:
docker-machine ls
若终端输出如下图所示,则表示Docker主机导入成功:
导入Docker主机