当前位置:   article > 正文

使用docker 容器 跨主机访问--实操_访问别的服务器的docker

访问别的服务器的docker

背景:

引出思考问题一:  在学习docker 服务的过程中想到一个问题,就是所有的docker 容器服务都部署在一台docker 宿主机上,若docker 容器服务足够多 这个docker 宿主机不会被撑死死掉么??

引出思考问题二: docker 容器里面的服务能不能跨宿主机访问另一台宿主机的docker 容器服务呢??

问题一: 其实我自己也不知道,希望有docker 大牛 可以解决这个疑问,让我这个小白能深入了解一下docker .

问题二: 请看实战操作二的内容

实战:

操作一: 安装docker 引擎,操作链接:docker 学习_未来创造无线可能的博客-CSDN博客

操作二:

一.实验条件准备:

 1. 准备两台linux centos 7 的机器:

主机名称ip地址
hadoop11192.168.64.141
hadoop12192.168.64.142

2. 两台机器上安装 了docker 引擎

二. 实现原理

我主要通过直接路由的方式来进行实现跨主机Docker容器通信,这种方式操作起来比较简单,对Docker原生网络改变最小,只需要互相指定对方的路由即可完成跨主机Docker容器之间的互通;

原理图如下:

    

三. 具体操作

1.docker网络设置

  在 Docker安装完之后,默认会创建一个docker0的网桥,启动的Docker容器网段是172.17.0.1/16,如果不做调整,两台Docker主机上的容器就出现IP地址冲突 。所以我们先将默认docker0网桥的地址按【主机配置及IP信息】进行调整。

在hadoop11中创建/etc/docker/daemon.json文件,内容如下

[root@hadoop11 ~]# cat /etc/docker/daemon.json
{
 "bip": "172.16.200.1/24"
}

重启docker服务

[root@hadoop11 ~]# systemctl restart docker

完成重启后,再看 hadoop11 中docker0的IP,已经调整完成了;

   [root@hadoop11 ~]# ifconfig

 使用同样的方式在 hadoop12 上进行 的操作内容

cat  /etc/docker/daemon.json 

2. 分别在两台宿主机器上安装docker 容器服务 

   这里我们在 宿主机上安装 centos:7  为例: 

   [root@hadoop11 ~]# docker  images  

 [root@hadoop11 ~]# docker  pull centos:7

[root@hadoop11 ~]# docker run  -d --name=centos_01  -it centos:7 

 [root@hadoop11 ~]# docker exec  -it centos_01 /bin/bash

[root@容器终端id 号 /]# ifconfig  

 

 关于hadoop12 机器上的操作和 hadoop11 的操作一样的,这里不再进行命令的操作演示。

[root@容器终端id 号 /]# ifconfig  

3.  分别在docker容器命令行终端,进行相互ping  

4. 添加互通路由
       原理非常简单,就是通过互相指定到达对方容器的路由;

       在hadoop11主机添加到172.16.201.0/24网段的路由,指向hadoop12的IP:192.168.64.142;
        在hadoop12主机添加到172.16.200.0/24网段的路由,指向hadoop11的IP:192.168.64.141;


 hadoop11操作:

[root@hadoop11 ~]# route -n

 

[root@hadoop11 ~]# route add -net 172.16.201.0/24 gw 192.168.64.142


[root@hadoop11 ~]# route -n

hadoop12 操作:

[root@hadoop12 ~]# route -n

[root@hadoop12 ~]#  route add -net 172.16.200.0/24 gw 192.168.64.141

[root@hadoop12 ~]# route -n

5.  验证是否能ping 通 

     在hadop11主机上的Docker容器中,ping  hadoop12中的Docker容器IP:172.16.201.2;

     在hadop12主机上的Docker容器中,ping  hadoop11中的Docker容器IP:172.16.200.2;

hadoop11 上 进行操作

[root@hadoop11 ~]# docker exec  -it centos_01 /bin/bash

 发现 ping 172.16.201.2  是 ping 不同的 

   说明一下:  截图中的my001 ,是由于我当时关了服务器,之后重新使用的centos:7镜像,启动的的centos:7 的docker服务名称, 与 本文中的 centos_01 是一致的。 

在 hadoop12 上操作: 

[root@hadoop12 ~]# docker exec  -it centos_02 /bin/bash

[root@docker容器服务终端号 ~]# ping  172.16.200.2 

 发现 ping  172.16.200.2  其实也是不能ping 通的  。 (由于忘记截图,所以这里没有原图)

6. (最重要的一步)添加防火墙转发规则, 在进行验证是否能ping 通

 在 hadoop11 节点上执行: 

 [root@hadoop11 ~]# iptables -t nat -I PREROUTING -s 172.16.200.0/24 -d 172.16.201.0/24 -j DNAT --to 172.16.200.1

在 hadoop12节点上执行: 

 [root@hadoop12 ~]# iptables -t nat -I PREROUTING -s 172.16.201.0/24 -d 172.16.200.0/24 -j DNAT --to 172.16.201.1

  

发现现在两台跨主机 的docker 容器 能相互访问了。 

   最后,需要注意一点:通过路由打通跨主机Docker容器之间的 网络,必须确保Docker宿主机是在相同的网段中;

四. 总结

  在整个实操过程中, 我学习了相关 技术牛人的博客文章。 

   文章一链接:Docker容器跨主机通信_L.Sir的博客-CSDN博客_docker跨主机容器通信  

    文章二链接: 实战|两种常用的跨主机Docker容器互通方法_大鹏的世界的博客-CSDN博客_docker跨主机容器通信

  路由方式 可以使跨主机之间的Docker容器互通,操作起来也比较简单;再结合docker-compose,可以非常快速的搭建一套真正跨越宿主机的分布式环境

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/258300
推荐阅读
相关标签
  

闽ICP备14008679号