
实战|两种常用的跨主机Docker容器互通方法
作者 | 杨俊俊
来源 | 新钛云服(ID:newtyun)
转载请联系授权(微信ID:zlm935177782)
现在提到容器,可能很容易想到的就是Kubernates,确实它很火,也很强大,但是对于规模非常小,容器不多的小环境,Kubernetes 就显得比较累赘了,直接使用Docker Compose拉取一个小环境,这种使用方式,也有不少用户在使用;本篇通过实战,来介绍两种,在不使用类似Kubernetes容器管理平台的下,实现跨主机Docker容器之间互通的方法;
基础环境准备
安装Docker
在能访问公网且DNS正常的情况下,将下面的代码,直接复制并在docker-host-01,docker-host-02上执行,即可完成Docker安装。
下载演示镜像
Docker官方在https://hub.docker.com/中提供了很多镜像,你可以根据自己的需要选择并下载,也可以自行安装Docker镜像仓库,此处我就直接下载使用docker hub中提供的centos官方镜像进行后续演示;
镜像在两台Docker主机中都下载,当然如果网速慢的话,可以下载一个,然后使用docker save 打包镜像,将镜像传到第二台机器上,在用docker load导入镜像。方法很多,适合你的才是最好的。
镜像下载完成,使用docker images命令查看。
通过直接路由方式实现跨主机Docker容器通信
直接路由这种方式操作起来比较简单,对Docker原生网络改变最小,只需要互相指定对方的路由即可完成跨主机Docker容器之间的互通;
主机配置及IP信息
基础环境需要准备两台主机,系统可以是CentOS,Ubuntu;需要能支持安装Docker,本实战文档中使用的主机信息如下;
主机名 | IP | 配置 | 容器网段 |
docker-host-01 | 192.168.61.132 | 2核4G内存,50G硬盘 | 172.16.200.0/24 |
docker-host-02 | 192.168.61.135 | 2核4G内存,50G硬盘 | 172.16.201.0/24 |
调整Docker网络配置
Docker安装完之后,默认会创建一个docker0的网桥,启动的Docker容器网段是172.17.0.1/16,如果不做调整,两台Docker主机上的容器,就可能出现IP地址冲突,所以我们先将默认docker0网桥的地址按【主机配置及IP信息】中规划的进行调整。
在docker-host-01中创建/etc/docker/daemon.json文件,内容如下
重启docker服务
完成重启后,再看docker0的IP,已经调整完成了;
使用同样的方法,调整docker-host-02主机上的的docker网络。
创建并进入Docker容器
在docker-host-01中执行下面命令创建容器并查看IP和网关信息。
如上,创建了一个名为host-01-docker 的容器,容器的ip是172.16.200.2/24,网关是172.16.200.1;同理在docker-host-02中也执行上述命令;
host-02-docker容器的ip是172.16.201.2/24,网关是172.16.201.1;此时我们直接在host-01-docker容器里面去ping host-02-docker容器的IP 172.16.201.2 肯定是不通的。
添加互通路由
原理非常简单,就是通过互相指定到达对方容器的路由;
docker-host-01主机上的操作如下
docker-host-02主机上的操作如下
验证在docker-host-01主机上的Docker容器中,ping docker-host-02中的Docker容器IP:172.16.201.2
最后,需要注意一点,通过路由打通跨主机Docker容器之间的 网络,必须确保Docker宿主机是在相同的网段;
通过桥接到Docker宿主机网络实现跨主机Docker容器通信
将Docker容器网络直接桥接到Docker宿主机网络里面,
容器通信过程中不在需要NAT的转换,优点是性能提升,容器及Docker宿主机IP统一管理;缺点是,容器及Docker宿主机IP统一管理之后带来的IP地址分配变复杂了;下面就来实战一下这种场景。
主机配置及IP信息
基础环境需要准备两台主机,系统可以是CentOS,Ubuntu;需要能支持安装Docker,本实战文档中使用的主机信息如下;
主机名 | IP | 配置 | 容器网段 |
docker-host-01 | 192.168.61.132 | 2核4G内存,50G硬盘 | 192.168.61.64/27 |
docker-hose-02 | 192.168.61.135 | 2核4G内存,50G硬盘 | 192.168.61.96/27 |
调整Docker宿主机网桥
默认情况下docker0,是不与物理接口连接了,Docker宿主机的IP地址也是配置在物理接口上的,现在需要把物理接口添加到docker0网桥中,并把IP地址配置到docker0上;具体操作如下
在docker-host-01上,创建并编辑docker配置文件,bip表示网桥接口的地址,配置为Docker宿主机 IP,fixed-cidr配置的是分配给docker容器的IP地址,这个地方需要注意,每台宿主机上不能重复,否则会IP地址冲突。
重启docker服务,重启完成后,192.168.61.132已经被配置到docker0上了
将物理接口添加到docker0网桥中,同时清空物理网卡上的IP ,注意必须两条命令一起执行,否则会断网。
注意:网桥配置,如果需要永久保存,需要通过配置文件的方式配置
检查网桥信息
在docker-host-02上配置与 docker-host-01上基本一样,只是docker配置文件略有不同,fixed-cidr分配给docker容器的ip段不能与docker-host-01中配置的相同。
创建并进入Docker容器
在docker-host-01中创建容器并查看容器ip是192.168.61.64
在docker-host-02中创建容器并查看容器ip是192.168.61.96
验证在docker-node-01宿主机的容器中ping docker-node-02宿主机上的容器IP 192.168.61.96,可以ping通验证没问题。
直接桥接到Docker宿主机网络这种方式,打通不通宿主机上的Docker容器,在IP,网段划分上会比较麻烦,
总结
路由方式和网桥方式,都可以使跨主机之间的Docker容器互通,操作起来也比较简单;再结合docker-compose,可以非常迅速的拉起一套环境。
