我的编程空间,编程开发者的网络收藏夹
学习永远不晚

常用的跨主机Docker容器互通方法有哪些

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

常用的跨主机Docker容器互通方法有哪些

本篇内容主要讲解“常用的跨主机Docker容器互通方法有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“常用的跨主机Docker容器互通方法有哪些”吧!

现在提到容器,可能很容易想到的就是Kubernates,确实它很火,也很强大,但是对于规模非常小,容器不多的小环境,Kubernetes  就显得比较累赘了,直接使用Docker  Compose拉取一个小环境,这种使用方式,也有不少用户在使用;本篇通过实战,来介绍两种,在不使用类似Kubernetes容器管理平台的下,实现跨主机Docker容器之间互通的方法;

基础环境准备

安装Docker

在能访问公网且DNS正常的情况下,将下面的代码,直接复制并在docker-host-01,docker-host-02上执行,即可完成Docker安装。

#卸载原有docker环境及依赖,并安装必要的包 yum remove docker-latest-logrotate docker-logrotate docker-selinux docker-engine yum install -y yum-utils   device-mapper-persistent-data   lvm2  #使用阿里云安装源 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo rpm --import http://mirrors.aliyun.com/docker-ce/linux/centos/gpg yum makecache fast yum -y install docker-ce  #安装完成启动Docker systemctl start docker systemctl enable docker systemctl status docker

下载演示镜像

Docker官方在https://hub.docker.com/中提供了很多镜像,你可以根据自己的需要选择并下载,也可以自行安装Docker镜像仓库,此处我就直接下载使用docker  hub中提供的centos官方镜像进行后续演示;

[root@docker-host-01 ~]# docker pull centos

镜像在两台Docker主机中都下载,当然如果网速慢的话,可以下载一个,然后使用docker save 打包镜像,将镜像传到第二台机器上,在用docker  load导入镜像。方法很多,适合你的才是最好的。

镜像下载完成,使用docker images命令查看。

[root@docker-host-01 ~]# docker images REPOSITORY         TAG                 IMAGE ID           CREATED             SIZE centos             latest             470671670cac        3 days ago         237MB

通过直接路由方式实现跨主机Docker容器通信

常用的跨主机Docker容器互通方法有哪些

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

主机配置及IP信息

基础环境需要准备两台主机,系统可以是CentOS,Ubuntu;需要能支持安装Docker,本实战文档中使用的主机信息如下;

主机名IP配置容器网段

主机名 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文件,内容如下

[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容器

在docker-host-01中执行下面命令创建容器并查看IP和网关信息。

[root@docker-host-01 ~]# docker run --name host-01-docker -it centos /bin/bash [root@6cb01044fda8 /]# yum 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 collisions 0 [root@6cb01044fda8 /]# route -n Kernel IP routing table Destination     Gateway         Genmask         Flags Metric Ref   Use Iface 0.0.0.0         172.16.200.1    0.0.0.0         UG    0      0        0 eth0 172.16.200.0    0.0.0.0         255.255.255.0   U     0      0        0 eth0

如上,创建了一个名为host-01-docker  的容器,容器的ip是172.16.200.2/24,网关是172.16.200.1;同理在docker-host-02中也执行上述命令;

[root@docker-host-02 ~]# docker run --name host-02-docker -it centos /bin/bash [root@f52ed4088844 /]# yum install -y net-tools [root@f52ed4088844 /]# ifconfig eth0 eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500       inet 172.16.201.2 netmask 255.255.255.0 broadcast 172.16.201.255       ether 02:42:ac:10:c9:02 txqueuelen 0 (Ethernet)       RX packets 3436 bytes 10890638 (10.3 MiB)       RX errors 0 dropped 0 overruns 0 frame 0       TX packets 3159 bytes 175122 (171.0 KiB)       TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0  [root@f52ed4088844 /]# route -n Kernel IP routing table Destination     Gateway         Genmask         Flags Metric Ref   Use Iface 0.0.0.0         172.16.201.1    0.0.0.0         UG    0      0        0 eth0 172.16.201.0    0.0.0.0         255.255.255.0   U     0      0        0 eth0

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容器互通方法有哪些

添加互通路由

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

  1. 在docker-host-01主机添加到172.16.201.0/24网段的路由,指向docker-host-02的IP:192.168.61.135; 

  2. 在docker-host-02主机添加到172.16.200.0/24网段的路由,指向docker-host-01的IP:192.168.61.132; 


docker-host-01主机上的操作如下

[root@docker-host-01 ~]# route -n Kernel IP routing table Destination     Gateway         Genmask         Flags Metric Ref   Use Iface 0.0.0.0         192.168.61.2    0.0.0.0         UG    0      0        0 ens33 169.254.0.0     0.0.0.0         255.255.0.0     U     1002   0        0 ens33 172.16.200.0    0.0.0.0         255.255.255.0   U     0      0        0 docker0 192.168.61.0    0.0.0.0         255.255.255.0   U     0      0        0 ens33 [root@docker-host-01 ~]# route add -net 172.16.201.0/24 gw 192.168.61.135 [root@docker-host-01 ~]# route -n Kernel IP routing table Destination     Gateway         Genmask         Flags Metric Ref   Use Iface 0.0.0.0         192.168.61.2    0.0.0.0         UG    0      0        0 ens33 169.254.0.0     0.0.0.0         255.255.0.0     U     1002   0        0 ens33 172.16.200.0    0.0.0.0         255.255.255.0   U     0      0        0 docker0 172.16.201.0    192.168.61.135  255.255.255.0   UG    0      0        0 ens33 192.168.61.0    0.0.0.0         255.255.255.0   U     0      0        0 ens33

docker-host-02主机上的操作如下

[root@docker-host-02 ~]# route -n Kernel IP routing table Destination     Gateway         Genmask         Flags Metric Ref   Use Iface 0.0.0.0         192.168.61.2    0.0.0.0         UG    0      0        0 ens33 169.254.0.0     0.0.0.0         255.255.0.0     U     1002   0        0 ens33 172.16.201.0    0.0.0.0         255.255.255.0   U     0      0        0 docker0 192.168.61.0    0.0.0.0         255.255.255.0   U     0      0        0 ens33 [root@docker-host-02 ~]# route add -net 172.16.200.0/24 gw 192.168.61.132 [root@docker-host-02 ~]# route -n Kernel IP routing table Destination     Gateway         Genmask         Flags Metric Ref   Use Iface 0.0.0.0         192.168.61.2    0.0.0.0         UG    0      0        0 ens33 169.254.0.0     0.0.0.0         255.255.0.0     U     1002   0        0 ens33 172.16.200.0    192.168.61.132  255.255.255.0   UG    0      0        0 ens33 172.16.201.0    0.0.0.0         255.255.255.0   U     0      0        0 docker0 192.168.61.0    0.0.0.0         255.255.255.0   U     0      0        0 ens33

验证在docker-host-01主机上的Docker容器中,ping  docker-host-02中的Docker容器IP:172.16.201.2

常用的跨主机Docker容器互通方法有哪些

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

通过桥接到Docker宿主机网络实现跨主机Docker容器通信

常用的跨主机Docker容器互通方法有哪些

将Docker容器网络直接桥接到Docker宿主机网络里面,

容器通信过程中不在需要NAT的转换,优点是性能提升,容器及Docker宿主机IP统一管理;缺点是,容器及Docker宿主机IP统一管理之后带来的IP地址分配变复杂了;下面就来实战一下这种场景。

主机配置及IP信息

基础环境需要准备两台主机,系统可以是CentOS,Ubuntu;需要能支持安装Docker,本实战文档中使用的主机信息如下;

主机名IP配置容器网段

docker-host-01192.168.61.1322核4G内存,50G硬盘192.168.61.64/27

docker-host-02192.168.61.1352核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地址冲突。

[root@docker-host-01 ~]# cat /etc/docker/daemon.json {   "bip": "192.168.61.132/24",  "fixed-cidr": "192.168.61.64/27",  "default-gateway": "192.168.61.1" }

重启docker服务,重启完成后,192.168.61.132已经被配置到docker0上了

[root@docker-host-01 ~]# systemctl restart docker [root@docker-host-01 ~]# ifconfig docker0 docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500       inet 192.168.61.132 netmask 255.255.255.0 broadcast 192.168.61.255       inet6 fe80::42:b3ff:fef9:1cc1 prefixlen 64 scopeid 0x20<link>       ether 02:42:b3:f9:1c:c1 txqueuelen 0 (Ethernet)       RX packets 6420 bytes 308080 (300.8 KiB)       RX errors 0 dropped 0 overruns 0 frame 0       TX packets 6373 bytes 21761327 (20.7 MiB)       TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

将物理接口添加到docker0网桥中,同时清空物理网卡上的IP ,注意必须两条命令一起执行,否则会断网。

[root@docker-host-01 ~]# brctl addif docker0 ens33&&ifconfig ens33  0.0.0.0

注意:网桥配置,如果需要永久保存,需要通过配置文件的方式配置

检查网桥信息

[root@docker-host-01 ~]# brctl show bridge name     bridge id               STP enabled     interfaces docker0         8000.0242b3f91cc1       no             ens33

创建并进入Docker容器

在docker-host-01中创建容器并查看容器ip是192.168.61.64

[root@docker-host-01 ~]# docker run -it centos /bin/bash [root@811f01405906 /]# ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000   link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00   inet 127.0.0.1/8 scope host lo       valid_lft forever preferred_lft forever 12: eth0@if13: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default   link/ether 02:42:c0:a8:3d:40 brd ff:ff:ff:ff:ff:ff link-netnsid 0   inet 192.168.61.64/24 brd 192.168.61.255 scope global eth0       valid_lft forever preferred_lft forever

在docker-host-02中创建容器并查看容器ip是192.168.61.96

[root@docker-host-02 ~]# docker run -it centos /bin/bash [root@7940a9efcf6a /]# ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000   link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00   inet 127.0.0.1/8 scope host lo       valid_lft forever preferred_lft forever 4: eth0@if5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default   link/ether 02:42:c0:a8:3d:60 brd ff:ff:ff:ff:ff:ff link-netnsid 0   inet 192.168.61.96/24 brd 192.168.61.255 scope global eth0       valid_lft forever preferred_lft forever

验证在docker-node-01宿主机的容器中ping docker-node-02宿主机上的容器IP  192.168.61.96,可以ping通验证没问题。

常用的跨主机Docker容器互通方法有哪些

直接桥接到Docker宿主机网络这种方式,打通不通宿主机上的Docker容器,在IP,网段划分上会比较麻烦,

到此,相信大家对“常用的跨主机Docker容器互通方法有哪些”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

常用的跨主机Docker容器互通方法有哪些

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

docker容器互联的方式有哪些

Docker容器互联的方式有以下几种:使用Docker Compose:Docker Compose是一个用于定义和运行多个Docker容器的工具。通过在docker-compose.yml文件中定义容器之间的连接和依赖关系,可以实现容器之
2023-10-22

Docker容器与宿主机相互访问更方便的方法

Docker是当今使用范围最广的开源容器技术之一,具有高效易用的优点,然而如果使用Docker时采取不当安全策略,则可能导致系统面临安全威胁,这篇文章主要给大家介绍了关于Docker容器与宿主机相互访问更方便的方法,需要的朋友可以参考下
2023-05-20

JavaScript常用的互动方法有哪些

这篇“JavaScript常用的互动方法有哪些”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“JavaScript常用的互动方
2023-06-27

保护Docker容器安全的方法有哪些

这篇文章主要讲解了“保护Docker容器安全的方法有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“保护Docker容器安全的方法有哪些”吧!应用程序的容器化涉及将应用程序代码及其依赖项(
2023-06-17

服务器主机租用的方法有哪些

1. 共享主机:多个网站共享同一台服务器,适合小型网站和个人博客等,价格较为便宜。2. VPS主机:虚拟专用服务器,一台物理服务器虚拟出多个独立的服务器,适合中小型网站和企业级应用,具有更高的安全性和稳定性。3. 云服务器:基于云计算技术的
2023-06-14

主机租用的具体方法有哪些

1.选择合适的托管服务商:通过互联网寻找合适的托管服务商,并进行比较和评估,选择最适合自己的托管服务商。2.选择合适的主机:根据自己的需求选择适合的主机,包括 CPU、内存、硬盘、带宽等参数,以及选择合适的操作系统和管理面板。3.提交订单并
2023-06-05

游戏主机租用的方法有哪些

1. 在线租赁平台:可以通过在线租赁平台,如“京东租机”、“苏宁租赁”等,选择合适的游戏主机,并按照规定的租赁流程进行租赁。2. 游戏主机租赁公司:一些专业的游戏主机租赁公司,如“游戏租赁网”、“游戏机租赁”等,可以提供游戏主机的租赁服务,
2023-06-03

常用的机器学习算法有哪些

常用的机器学习算法有以下几种:1. 线性回归(Linear Regression):通过线性模型进行回归分析。2. 逻辑回归(Logistic Regression):通过逻辑函数进行二分类分析。3. 决策树(Decision Tree):
2023-09-21

沈阳虚拟主机使用的方法有哪些

1. 注册虚拟主机账号:首先需要在虚拟主机提供商的官网上注册账号,并选择合适的虚拟主机套餐。2. 绑定域名:在购买虚拟主机后,需要将自己的域名绑定到虚拟主机上,这样才能通过域名访问网站。3. 配置FTP:通过FTP客户端软件连接虚拟主机,进
2023-06-14

java类加载器的常用方法有哪些

这篇文章主要讲解了“java类加载器的常用方法有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“java类加载器的常用方法有哪些”吧!1、loadClass,当类加载请求到来时,首先从缓存
2023-06-30

常用的云服务器包括哪些内容和方法

云服务器包括三个主要组件:基础设施(IaaS)、平台(PaaS)和服务(SaaS)。IaaS提供了基础设施的支持,如服务器、存储和网络设备等,它们可以根据需求自动分配和管理。PaaS提供了一组服务,如应用程序运行时(PaaS)、数据库、消息队列等,可以按需提供和管理。SaaS提供了一组服务,如安全性、管理和运维等,它们
2023-10-27

编程热搜

目录