前面两篇总结,我们分别介绍了Docker的CS模式,以及Docker守护进程的操作和配置。本篇我们将运用前两次学习的知识,来学习如何配置Docker客户端与守护进程的远程访问。

在之前的讲解中,我们使用的Docker客户端和守护进程都是在同一台机器上。本篇我们就来学习如何将Docker的客户端与守护进程配置在不同的机器上,也就是Docker的客户端与守护进程的远程访问。

一、准备工作

在开始之前,我们需要准备以下环境:
1.第二台安装Docker的服务器
之前我们使用的是在VMware上安装的CentOS 7的Linux版本虚拟系统,那么我们需要再创建一台CentOS 7的虚拟机,同样安装Docker:
【Docker学习总结】13.Docker的远程访问

2.修改Docker守护进程启动选项,区别服务器
我们在两台服务器中针对Docker守护进程的label进行不同的修改,来区别它们。
在服务器1上,我们修改/etc/docker/daemon.json启动配置文件,将labels选项指定为“docker_server_1”:
"labels":["nodeName=docker_server_1"]
【Docker学习总结】13.Docker的远程访问
在服务器2上,同样修改/etc/docker/daemon.json启动配置文件,将labels选项指定为“docker_server_2”:
"labels":["nodeName=docker_server_1"]
【Docker学习总结】13.Docker的远程访问
重启两台的Docker服务:
sudo service docker restart
通过“service docker status”,查看两个Docker的状态,可以“labels”通过区分两台服务器的Docker:
【Docker学习总结】13.Docker的远程访问【Docker学习总结】13.Docker的远程访问

3.保证Client API与Server API版本版本一致
远程访问的时候,需要保证两台服务器的API版本一致,通过“docker version”版本信息查看指令,可以看到这里我们安装的是同一版本的Docker:
【Docker学习总结】13.Docker的远程访问【Docker学习总结】13.Docker的远程访问

二、交互网络端配置

要实现Docker的远程通信,需要修改Docker守护进程的启动选项,使用“-H”来配置Docker守护进程使用的服务器的Socket类型,它接受“tcp”、“unix”和“fd”模式:
-H  tcp://host:port
    unix:///path/to/socket
    fd://* or fd://socketfd

默认情况下,Docker的守护进程使用的是“unix”模式来实现与客户端的通信。

我们这里需要用“tcp”模式来进行网络交互。老版的Docker(1.12版本之前)需要在 配置文件中(在Ubuntu 中的位置是:/etc/default/docker,在CentOS中的位置是:/etc/sysconfig/docker)修改相关的“-H”选项的值,才能开启“tcp”:
-H tcp://0.0.0.0:2375
修改完毕后需要重启,才能够生效。
而在1.12版本之后的Docker中,有两种方式配置,首先是在/etc/docker/daemon.json文件中配置:

{
  "hosts": ["tcp://0.0.0.0:2375","unix:///var/run/docker.sock"]
}

然后重启即可。
其次,是在docker daemon的配置文件/lib/systemd/system/docker.service中的“ExecStart”选项后,添加“tcp”协议的配置:
【Docker学习总结】13.Docker的远程访问
目前笔者下载的Docker的18.06.1-ce版本中,/lib/systemd/system/docker.service文件的“ExecStart”选项后已经默认添加好了“tcp”协议的配置,这里就无需再添加(之前端口默认是2375,新版本端口默认是5678)。
当我们在服务器2上配置完,重启服务后,使用ps命令查看Docker守护进程的情况时,就可以发现是否已经支持了tcp交互:
【Docker学习总结】13.Docker的远程访问

此时我们使用服务器1来访问服务器2的守护进程。首先我们使用curl指令来访问服务器2的守护进程的info的API:
【Docker学习总结】13.Docker的远程访问
发现是可以连通的。此时我们可以尝试在Docker的查询指令中间添加“-H tcp://192.168.0.107:5678”来运行远程Docker指令:
【Docker学习总结】13.Docker的远程访问
发现是可以的。
如果我们需要频繁访问远程Docker指令,一直添加“-H”指令明显很繁琐,所以Docker客户端提供了一个环境变量来简化该操作。如果指定“DOCKER_HOST”环境变量,就可以在Docker客户端,像连接本机一样,使用远程的Docker服务。
首先我们使用export指令来设置环境变量:export DOCKER_HOST="tcp://192.168.0.107:5678"。
设置完毕之后,我们运行info命令,发现返回的信息是远程服务器的:
【Docker学习总结】13.Docker的远程访问
这是因为此时在执行Docker命令时,会默认的连接到远程的Docker服务器上。
如果我们使用完了远程的服务器,需要连接本机时,只需使用exoprt指令将“DOCKER_HOST”环境变量置空,即可恢复本机的Docker服务连接。此时我们再运行info命令,显示的就是我们本机的Docker信息了:
【Docker学习总结】13.Docker的远程访问

参考资料:
《极客学院Docker学习》教学视频
转载请注明出处:https://blog.csdn.net/acmman/article/details/86387311

相关文章: