欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Docker(三)docker-machine连接云服务器

程序员文章站 2024-03-23 13:16:16
...

一、准备工作

  1. 去阿里云服务器官网,购买ECS服务器。注意要买按月租或年租的服务器,本文只演示月租或年租的服务器,按流量付费的服务器的相关操作与此不同。
  2. 进入控制台,重置密码。
    Docker(三)docker-machine连接云服务器注意:重置密码后要重启服务器

二、远程管理阿里云的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

如何解决?

  1. 首先,登录到阿里云控制台,进入云服务器 ECS,进入安全组栏目,进入配置规则
    Docker(三)docker-machine连接云服务器

  2. 进入配置规则后,再进入添加安全组规则
    Docker(三)docker-machine连接云服务器
    这里因为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

我在创建的过程中又遇到问题了:
Docker(三)docker-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镜像了。