实战|两种常用的跨主机Docker容器互通方法
基础环境准备
安装Docker
点击链接安装Docker
下载演示镜像
Docker官方在https://hub.docker.com/中提供了很多镜像,你可以根据自己的需要选择并下载,也可以自行安装Docker镜像仓库,此处我就直接下载使用docker hub中提供的ubuntu官方镜像进行后续演示;
[root@docker-host-01 ~]# docker pull ubuntu
镜像在两台Docker主机中都下载,当然如果网速慢的话,可以下载一个,然后使用docker save 打包镜像,将镜像传到第二台机器上,在用docker load导入镜像。方法很多,适合你的才是最好的。
镜像下载完成,使用docker images命令查看。
[root@docker-host-01 ~]# docker images
1.通过直接路由方式实现跨主机Docker容器通信
直接路由这种方式操作起来比较简单,对Docker原生网络改变最小,只需要互相指定对方的路由即可完成跨主机Docker容器之间的互通;
主机配置及IP信息
基础环境需要准备两台主机(可以是两台工控机安装原生ubuntu或者是两台运行在windows下面的虚拟机),系统可以是CentOS,Ubuntu;需要能支持安装Docker,本实战文档中使用的主机信息如下;
主机名 | IP | 配置 | 容器网段 |
---|---|---|---|
docker-host-01 | 192.168.61.132 | 16核32G内存,50G硬盘 | 172.16.200.0/24 |
docker-host-02 | 192.168.61.135 | 16核32G内存,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文件(一般来说主机里面会有这个文件,没有的话就自己创建,用root权限创建),内容如下
[root@docker-host-01 ~]# cat /etc/docker/daemon.json
{
"bip": "172.16.200.1/24"
}
重启docker服务
[root@docker-host-01 ~]# systemctl restart docker
完成重启后,再看docker0的IP,已经调整完成了
[root@docker-host-01 ~]# ifconfig docker0
docker0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 172.16.200.1 netmask 255.255.255.0 broadcast 172.16.200.255
inet6 fe80::42:b3ff:fef9:1cc1 prefixlen 64 scopeid 0x20<link>
ether 02:42:b3:f9:1c:c1 txqueuelen 0 (Ethernet)
RX packets 2916 bytes 121276 (118.4 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 3115 bytes 10870567 (10.3 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
使用同样的方法,调整docker-host-02主机上的的docker网络。
创建并进入Docker容器
[root@docker-host-01 ~]# docker run --name host-01-docker -it ubuntu /bin/bash
[root@6cb01044fda8 /]# apt update #更新
[root@6cb01044fda8 /]# apt install -y net-tools #安装工具查看ip和网关
[root@6cb01044fda8 /]# ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.16.200.2 netmask 255.255.255.0 broadcast 172.16.200.255
ether 02:42:ac:10:c8:02 txqueuelen 0 (Ethernet)
RX packets 3168 bytes 10876332 (10.3 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 2970 bytes 165058 (161.1 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0