将现有Docker主机添加到Docker Machine的一些技巧

本文介绍了如何使用Docker Machine与现有的Docker主机集成,通过通用驱动程序实现通过ssh连接到远程Docker守护进程。内容包括Docker Machine的快速入门,通用驱动程序的使用以及在过程中可能遇到的常见问题和解决方案,如端口配置、版本对齐、密钥认证等。
摘要由CSDN通过智能技术生成

Docker Machine快速入门

笔记本电脑上的boot2docker(不建议使用)切换到Docker Machine (或者我应该说是Mac上的Docker Toolbox )之后,并通过Docker Machine尝试使用Google Cloud Engine之后,我很想知道是否可以管理所有Docker从Docker Machine运行在VPS或专用服务器上的主机。

Docker Machine是一个方便的工具,可以选择要使用的Docker守护进程:可以是在Virtual Box VM中运行的Docker守护进程,也可以是在EC2,GCE,Digital Ocean等上运行的Docker守护进程,也可以是在Docker守护程序上运行一个Linux机器(只是使用哪个驱动程序的问题)

virtualbox驱动程序允许您在Virtual Box中创建一个新的VM,启动它,并使用tls(默认通过2376端口)配置客户端/守护程序tcp链接; 诸如google之类的云驱动程序允许您在“云”中做同样的事情,而通用驱动程序不会创建新主机,而是使用ssh在现有主机上使用tls配置客户端/守护程序tcp链接。

设置完成后,“ docker-machine ls”将为您提供与之交互的Docker守护进程列表:

$ docker-machine ls
NAME               ACTIVE   DRIVER       STATE     URL                           SWARM
my.host.com                 generic      Running   tcp://my.host.com:2376
default                     virtualbox   Running   tcp://192.168.99.104:2376
docker-vm          *        virtualbox   Running   tcp://192.168.99.102:2376

要与my.host.com守护进程对话,只需发出以下命令:

$ eval "$(docker-machine env my.host.com)"

现在您正在与my.host.com守护进程通信:

$ docker ps
CONTAINER ID        IMAGE                  COMMAND                  CREATED             STATUS              PORTS                          NAMES
77aa96cf6db9        flexget                "/usr/local/bin/flexg"   46 hours ago        Up 21 hours

方便吗?

将我的所有docker主机(守护程序)与笔记本电脑上的docker-machine集成在一起将带来以下好处:

  • 不再需要在我的(远程)Docker盒中使用ssh
  • 我所有的Docker映像工作(Dockerfiles)都可以留在我的笔记本电脑上,我可以从我的笔记本电脑舒适的地方从远程主机上的本地Dockerfiles启动新容器

Docker Machine:通用驱动程序

要将通过ssh访问的主机(例如my.host.com)集成到Docker Machine守护程序列表中,需要使用通用驱动程序。 (此驱动程序将负责配置您的远程守护程序以侦听端口2376并生成和分发tls的必要密钥)

从带有Docker 1.8.2的Docker Machine 0.4.2开始,您需要遵守一些约束以集成启用ssh的Docker主机; 这是一个列表(很难获得……):

  • 确保您可以使用公钥身份验证从笔记本电脑连接到远程Docker主机(这意味着您在笔记本电脑上生成了一个公钥,并添加到了远程主机上的授权密钥列表中:ssh-keygen,ssh-copy- id将对此有所帮助)
  • 如果在主机上使用“ sudo”,请确保配置无密码sudo:
# visudo
%sudo   ALL=(ALL) NOPASSWD:ALL

如果不这样做,那么除非这个问题解决了否则那是行不通的

  • 确保服务器上的Docker守护程序版本与笔记本电脑上的Docker客户端版本相同
  • 在远程主机上打开端口2376(在Debian / Ubuntu上为“ ufw allow 2376”):便携式Docker客户端将通过端口2376上的TCP连接以与远程守护程序通信

完成这些验证后,建议您现在将远程Docker守护程序(在my.host.com上运行)添加到Docker Machine中:

$ docker-machine create --driver generic \
 --generic-ip-address my.host.com \
 --generic-ssh-user anthony \
 my.host.com

那没起效 ? 好吧,我让您了解下一章!

Docker机器通用驱动程序常见问题

在Mac OS X上,它一直在问我我的密钥密码。

好吧,那还不错,但是这里仍然有一种解决方法

sudo:不存在tty且未指定askpass程序
SSH cmd error!
command: sudo hostname my.host.com && echo "my.host.com" | sudo tee /etc/hostname
err    : exit status 1
output : Saving password to keychain failed
Identity added: /Users/anthony/.docker/machine/machines/my.host.com/id_rsa (/Users/anthony/.docker/machine/machines/my.host.com/id_rsa)
sudo: no tty present and no askpass program specified

确保远程用户已配置无密码sudo,如上一章所述:

%sudo   ALL=(ALL) NOPASSWD:ALL
docker-machine将永远等待

可能是它试图连接到端口2376,但已被阻塞; 看一下远程主机上的系统日志,

sudo tail -f /var/log/syslog

并检查是否没有与此行相似的行:

Oct  7 01:26:54 my.host kernel: [1859460.411738] [UFW BLOCK] IN=eth0 OUT= MAC=XX:XX SRC=199.99.99.99 DST=92.12.12.12 LEN=64 TOS=0x00 PREC=0x00 TTL=52 ID=37574 DF PROTO=TCP SPT=49855 DPT=2376 WINDOW=65535 RES=0x00 SYN URGP=0

嗡嗡声,UFW BLOCK和2376在同一行上? 听起来您需要更新防火墙配置:

$ sudo ufw allow 2376
三重检查笔记本电脑和远程主机上的docker版本是否对齐
无法加载主机密钥:/ etc / ssh / ssh_host_ecdsa_key

如果您遇到麻烦,则可能正在查看ssh日志

sudo tail -f /var/log/auth.log

也许您看到了这两行:

Oct  7 01:04:41 host sshd[29920]: error: Could not load host key: /etc/ssh/ssh_host_ecdsa_key
Oct  7 01:04:41 host sshd[29920]: error: Could not load host key: /etc/ssh/ssh_host_ed25519_key

您只需要在远程主机上生成这些密钥:

$ sudo ssh-keygen -A

他们将被生成

ssh-keygen: generating new host keys: ECDSA ED25519
无法执行操作:文件存在
SSH cmd error!
command: sudo systemctl enable docker
err    : exit status 1
output : Synchronizing state for docker.service with sysvinit using update-rc.d...
Executing /usr/sbin/update-rc.d docker defaults
Executing /usr/sbin/update-rc.d docker enable
Failed to execute operation: File exists

显然, 这是Debian 8特有的问题 ,好消息是:它并没有阻止将远程主机添加到Docker Machine中

不重要的警告
Importing SSH key...
Warning: got an invalid line error parsing /etc/os-release: %sExpected Saving password to keychain failed to split by '=' char into two strings, instead got 1 strings
Warning: got an invalid line error parsing /etc/os-release: %sExpected Identity added: /Users/anthony/.docker/machine/machines/my.host.com/id_rsa (/Users/anthony/.docker/machine/machines/my.host.com/id_rsa) to split by '=' char into two strings, instead got 1 strings

您可以放心地忽略这些警告

胜利了!

$ docker-machine ls
NAME               ACTIVE   DRIVER       STATE     URL                           SWARM
my.host.com      *      generic      Running   tcp://my.host.com:2376

现在,您可以从笔记本电脑上享受在远程主机上运行的docker了!

翻译自: https://www.javacodegeeks.com/2015/10/adding-an-existing-docker-host-to-docker-machine-a-few-tips.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值