前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >你知道docker容器间网络通信如何实现吗?

你知道docker容器间网络通信如何实现吗?

作者头像
MaybeHC
发布2024-04-23 19:36:18
1070
发布2024-04-23 19:36:18
举报
文章被收录于专栏:技术之路技术之路

你知道docker容器间网络通信如何实现吗?

docker容器间的通信使用Linux网络命名空间实现,下面我通过一个实验模拟下这个过程

测试

下面我创建两个测试容器先做个实验

创建测试容器
代码语言:javascript
复制
docker run -d --name test1 busybox /bin/sh -c "while true;do sleep 3600;done"
代码语言:javascript
复制
docker run -d --name test2 busybox /bin/sh -c "while true;do sleep 3600;done"

不需要关注busybox image的作用,只需要知道这个容器会一直循环,使用这个容器的目的只是为了测试两个容器间的通讯

查询测试容器ip
在这里插入图片描述
在这里插入图片描述
测试网络通信

这里我们测试下两个容器间的通信

在这里插入图片描述
在这里插入图片描述

两容器通信正常,同主机下创建conrainer默认是可以通信的。

命名空间通信方式

创建两个网络命名空间
在这里插入图片描述
在这里插入图片描述
查看网络命名空间网络状况
在这里插入图片描述
在这里插入图片描述
连通两个命名空间

想要连通两个命名空间,我们需要引入虚拟设备接口veth-pair,veth-pair都是成对出现的,连接两端。我们在这里使用veth-pair做桥梁,连接两个namespace.

在这里插入图片描述
在这里插入图片描述
创建一对veth-pair veth0 veth1
代码语言:javascript
复制
ip l a veth0 type veth peer name veth1

我们在创建前先行查看了宿主机的端口,现在可以看到多了两个端口

在这里插入图片描述
在这里插入图片描述
将端口加入test1 test2 命名空间
代码语言:javascript
复制
ip l s veth0 netns test1    #veth0 端口加到test1
ip l s veth1 netns test2    #veth1 端口加到test2
给veth0、veth1 配上IP 并启用
代码语言:javascript
复制
[root@localhost hechong]# ip netns exec test1 ip a a 192.168.1.1/24 dev veth0
[root@localhost hechong]# ip netns exec test2 ip a a 192.168.1.2/24 dev veth1
[root@localhost hechong]# ip netns exec test1 ip l s veth0 up
[root@localhost hechong]# ip netns exec test2 ip l s veth1 up
测试连通
在这里插入图片描述
在这里插入图片描述

docker容器间通信方式

有了上面直连两个命名空间的知识铺垫下面我们就可以来说说docker的容器通行方式了。在一台主机上的多个独立的容器,容器间会使用bridge模式。我们可以从图看,两个容器都连接到了docker0,连接方式就是veth-pair,docker0相当于一台交换机使得两容器间可以通信。

在这里插入图片描述
在这里插入图片描述
主机接口

通过ip a 我们可以查看当前用户主机的连接端口,前面是正常的接口我就不截图了我们主要关注下这两个接口,一个是docker0,另一个我们看名称是一个直连接口veth-pair,应该是与容器间的端口。

在这里插入图片描述
在这里插入图片描述
查询bridge连接
代码语言:javascript
复制
[root@localhost ~]# docker network  ls
NETWORK ID          NAME                DRIVER              SCOPE
cb38d9e42a8c        bridge              bridge              local
08eb693c2315        host                host                local
595580ae3010        none                null                local
[root@localhost ~]# docker network  inspect cb38d9e42a8c
在这里插入图片描述
在这里插入图片描述
查询容器接口
在这里插入图片描述
在这里插入图片描述

我们可以看到test1有eth0@if8 端口,我们再创建一个容器看看主机端口是否有增加。

在这里插入图片描述
在这里插入图片描述

我们可以看到多了一个接口,这个接口就是新的容器与主机间的直连接口

本文参与?腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2024-04-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客?前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 你知道docker容器间网络通信如何实现吗?
    • 测试
      • 创建测试容器
      • 查询测试容器ip
      • 测试网络通信
    • 命名空间通信方式
      • 创建两个网络命名空间
      • 查看网络命名空间网络状况
      • 连通两个命名空间
    • docker容器间通信方式
      • 主机接口
      • 查询bridge连接
      • 查询容器接口
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com