docker容器如何实现跨主机通信
admin
2023-03-26 11:01:43
0

什么是docker

docker是一个开源的应用容器引擎,开发者可以打包自己的应用到容器里面,然后迁移到其他机器的docker应用中,可以实现快速部署。如果出现的故障,可以通过镜像,快速恢复服务。

docker安装

环境准备

操作系统:CentOS 7.6.1810

软件源:阿里云镜像(在阿里云镜像站上面可以找到docker-ce的软件源,使用国内的源速度比较快)

安装docker-ce

如果没有物理机,可以先使用虚拟机进行学习。操作系统安装,跳过(网上教程很多)。

1、安装依赖

docker依赖于系统的一些必要的工具,可以提前安装。

yum install -y yum-utils device-mapper-persistent-data lvm2

2、添加软件源

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

3、安装docker-ce

yum clean all yum makecache fastyum -y install docker-ce

4、启动服务

通过systemctl启动服务

systemctl start docker

5、查看安装版本

这样子就安装成功了,启动服务以后可以使用docker version查看一下当前的版本。

一、准备工作
跨主机需要两个独立的网卡:
server1和server2添加网卡

docker容器如何实现跨主机通信
docker容器如何实现跨主机通信
docker容器如何实现跨主机通信

[root@localhost ~]# ip addr show   查看网卡是否添加成功

docker容器如何实现跨主机通信
添加成功。

macvlan本身是linxu kernel的模块,本质上是一种网卡虚拟化技术。其功能是允许在同一个物理网卡上虚拟出多个网卡,通过不同的MAC地址在数据链路层进行网络数据的转发,一块网卡上配置多个 MAC 地址(即多个 interface),每个interface可以配置自己的IP,Docker的macvlan网络实际上就是使用了Linux提供的macvlan驱 动。因为多个MAC地址的网络数据包都是从同一块网卡上传输,所以需要打开网卡的混杂模式ip link set eth2 promisc on。

打开server1和server2的ens37网卡的混杂模式,在server1和server2上运行以下命令:
[root@localhost ~]# ip link set ens37 promisc  on
[root@localhost ~]# ip addr show ens37              #查看promiscm功能是否打开

docker容器如何实现跨主机通信
docker容器如何实现跨主机通信
注意:如果不开启混杂模式,会导致macvlan网络无法访问外界
具体在不使用vlan时,表现为无法ping通路由,无法ping通同一网络内其他主机
在两台主机上各创建macvlan网络
创建macvlan网络不同于桥接模式,需要指定网段和网关(因为要保证跨主机上网段和网关是相同的),并且都得是真实存在的
[root@localhost ~]# docker network create -d macvlan --subnet 172.16.36.0/24 --gateway 172.16.36.254 -o parent=ens37 macvlan       #创建名为macvlan的网络
[root@localhost ~]# docker network ls        #查看本地网络信息

docker容器如何实现跨主机通信

创建docker容器
server1:
[root@localhost ~]# docker run -it --name vm01 --network=macvlan --ip=172.16.36.101 centos
[root@1f89fd5f37ff /]# ip addr

docker容器如何实现跨主机通信

[root@1f89fd5f37ff /]# ping 172.16.36.100

docker容器如何实现跨主机通信
server2:
[root@localhost ~]# docker run -it --name vm02 --network=macvlan --ip=172.16.36.100 centos
[root@e8da7e4ef2b3 /]# ip addr

docker容器如何实现跨主机通信

[root@e8da7e4ef2b3 /]# ping 172.16.36.101

docker容器如何实现跨主机通信

跨主机通信就这样配置完了。

DNS设置

跨主机通信设置成功后,容器可能需要上网进行资料下载。所以现在进行DNS设置,配置如下:
修改daemon.json文件,文件所在路径为/etc/docker/下,文件添加以下内容:
"dns" :[
"172.16.1.1",
"202.96.128.166"
]
docker容器如何实现跨主机通信
注:安装软件为docker的直接修改daemon.json文件,安装软件为docker-ce的需要创建daemon.json文件。

测试:
docker容器如何实现跨主机通信

补充:

在使用过程中,发现重启宿主主机后,macvlan模式会自动关闭,导致使用该功能的容器之间无法通信。
docker容器如何实现跨主机通信
docker容器如何实现跨主机通信
未发现PROMISC状态是 UP,
需要手动开启promisc功能,才能恢复通信。
[root@localhost ~]# ip link set ens37 promisc on                 #开启promisc功能
[root@localhost ~]# ip addr show ens37                 #查看网卡ens37的网卡信息
[root@localhost ~]# docker exec -it vm02 /bin/bash          #登录容器
[root@8cb8828007cf /]# ping 172.16.36.100          #连通性测试
docker容器如何实现跨主机通信

相关内容

热门资讯

特朗普下令不打了,美国的“余粮... 可以说戛然而止,快得让很多人都无法适应。前两周,每一天美国都要打击伊朗一通。就在7月24日白宫会议前...
穆杰塔巴最新表态:支持黎真主党 △伊朗最高领袖穆杰塔巴·哈梅内伊(资料图)当地时间7月26日晚,伊朗最高领袖穆杰塔巴·哈梅内伊对黎巴...
美军瘫痪一艘驶向伊朗的油轮,特... 美国总统特朗普虽下令暂停打击伊朗,但美军仍在执行对霍尔木兹海峡的封锁任务。针对美军瘫痪一艘驶向伊朗油...
“小牌大耍”的底气到底是哪里来... 澎湃首席评论员 李平这两天,“艺人李权哲乘高铁占座事件”在网上引发热议,该艺人参加的活动主办方曾发布...
越南籍船舶南海遇险沉没,中方已... 据凤凰卫视报道,一艘越南船舶7月24日夜间在越南庆和以东220海里附近遇险沉没,船上共62名越南籍人...
李权哲占座、蒙面、装死:娱乐圈... 你买了一张高铁一等座的票,找到自己的位置,18A。有人坐着。你拿出手机看了眼购票记录——没错,18A...
杭州景区咖啡店闯入1条幼蛇,仅... 夏天气温高、湿度大,蛇类活动进入高峰期,千万别被“小蛇无害”的刻板印象骗了!有些幼蛇看着迷你可爱,实...
AI开源公开信签署企业增至50... IT之家 7 月 26 日消息,英伟达、微软、IBM、Meta 等 25 家美国科技企业本周(7 月...
南阳快手短视频代运营企业的服务... 在短视频平台快速发展的背景下,企业通过快手等渠道进行内容运营已成为常见的市场动作。对于希望借助短视频...
普通人该如何跟上科技发展的步伐 这个被称作科技的词汇, 听起来既有宏大之感, 又颇为遥远, 好似仅仅归属于在实验室里专心致志钻研的科...