Docker(三)docker-machine连接云服务器
一、准备工作
- 去阿里云服务器官网,购买ECS服务器。注意要买按月租或年租的服务器,本文只演示月租或年租的服务器,按流量付费的服务器的相关操作与此不同。
- 进入控制台,重置密码。
注意:重置密码后要重启服务器
二、远程管理阿里云的docker
docker-machine不支持直接创建阿里云ECS,这里本文只想用docker-machine远程安装管理docker的功能。docker官方虽然没有阿里云driver但有一个generic driver,可通过ssh管理远程的服务器。
那么问题来了,docker-machine的ssh功能只支持基于Public Key认证,而阿里云创建虚拟机的时候只支持通过密码登录,所以还需配置一下Public Key。
2.1 配置**
ssh-copy-id
命令可以把本地主机的公钥复制到远程主机的authorized_keys
文件上,ssh-copy-id
命令也会给远程主机的用户主目录(home)和~/.ssh
, 和~/.ssh/authorized_keys
设置合适的权限
安装ssh-copy-id
:
brew install ssh-copy-id
生成**:
ssh-******
在生成**等时候特别注意下:会遇到提示Enter passphrase (empty for no passphrase):
,在这里最好不要对私钥设置口令(passphrase),直接Enter,设置口令为空。不然会出现,在后面使用docker-machine create
命令的时候会一直提示要输入passphrase,而且不管我输入的正确与否。
把本地的公钥~/.ssh/id_rsa.pub
拷贝到远程主机上:
# 0.0.0.0表示阿里云服务器等公网ip
ssh-copy-id -i ~/.ssh/id_rsa.pub root@0.0.0.0
我在运行该命令的时候遇到个问题(由于是第二天写博客忘记裁图了,只记住大概的报错信息):ssh连接服务器的时候,提示:Operation timed out
如何解决?
首先,登录到阿里云控制台,进入
云服务器 ECS
,进入安全组
栏目,进入配置规则
:进入
配置规则
后,再进入添加安全组规则
这里因为ssh默认为22端口,所以端口范围填写22/22
配置完以上步骤后,就可以正常运行ssh-copy-id -i ~/.ssh/id_rsa.pub aaa@qq.com
啦。
测试ssh是否能正常连接:
# 0.0.0.0表示阿里云服务器等公网ip
ssh root@0.0.0.0
2.2 创建阿里云的docker-machine
export ECS_IP=0.0.0.0 # 0.0.0.0表示阿里云服务器等公网ip
export ALI_MIRROR=https://ehehda.mirror.aliyuncs.com #从dev.aliyun.com后台获取你的专属加速器,这个是假的并不能用
docker-machine create --engine-registry-mirror=$ALI_MIRROR --driver generic --generic-ip-address=$ECS_IP aliyun-machine
我在创建的过程中又遇到问题了:
是不是很眼熟呢?采用和上面一样的处理方式,只是现在的端口号变成了2376
。
最后,创建成功后,使用docker-machine ls
:
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
aliyun-machine - generic Running tcp://47.106.11.111:2376 v18.04.0-ce
此时,咱们的docker-machine已经成功的管理到了,远程服务器的docker。再执行eval $(docker-machine env aliyun-machine)
。即可用本地的docker远程操作阿里云ECS上的docker镜像了。