Docker-Bridge Network 01 容器间通信
本小节介绍bridge network模式下,单机上的容器网络拓扑及通信。
1.前言
点击跳转至Docker系列文章
对于单机上的容器,Docker提供了bridge、host、none三种网络。我们首先介绍经典的bridge模式。
Linux bridge是Linux内核中广泛使用的网络虚拟化工具,在OpenStack、Docker、Kubernetes中,常常能看到它的身影。
Docker默认使用Bridge Network。Docker安装时会创建一个名为docker0的bridge,创建容器时如果不指定网络,则默认将容器连接在docker0上,实现容器的网络通信。
2.安装docker,查看网络变化
上一节在虚拟机上安装了docker,我们查看虚拟机上网卡、路由表、网桥等设备的变化。
- 网卡
新增了docker0,其地址为172.17.0.1/16
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP
link/ether 08:00:27:70:b6:ef brd ff:ff:ff:ff:ff:ff
inet 192.168.0.11/24 brd 192.168.0.255 scope global noprefixroute enp0s3
valid_lft forever preferred_lft forever
inet6 fe80::da96:cef:9147:bcc1/64 scope link noprefixroute
valid_lft forever preferred_lft forever
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN
link/ether 02:42:a8:64:6c:32 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
valid_lft forever preferred_lft forever
- 路由表
执行route -n,docker创建了一条路由:发往172.17.0.0/16的报文,会走到docker0
[root@docker1 ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.0.1 0.0.0.0 UG 100 0 0 enp0s3
172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0
192.168.0.0 0.0.0.0 255.255.255.0 U 100 0 0 enp0s3
- 网桥
执行brctl show,发现docker0上还没有interface
[root@docker1 ~]# brctl show
bridge name bridge id STP enabled interfaces
docker0 8000.0242a8646c32 no
- 网络命名空间
执行ip netns,返回空,此时还没有net namespace。
3.创建一个容器
3.1 创建busybox容器
busybox镜像包含了各种linux工具,我们用该镜像创建容器来做实验。
执行docker run -it -d --name=bbox1 busybox
3.2 查看主机网络变化
- 网卡
多了一个veth网卡,从名字可以看出这是一个veth pair设备,并且在docker0上。
5: vethe9a0e73@if4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP
link/ether 1e:ec:13:2e:96:e4 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet6 fe80::1cec:13ff:fe2e:96e4/64 scope link
valid_lft forever preferred_lft forever
- 网桥
网桥多了一个接口,该接口就是上面的veth的网卡设备
[root@docker1 ~]# brctl show
bridge name bridge id STP enabled interfaces
docker0 8000.0242a8646c32 no vethe9a0e73
- 网络命名空间
执行ip netns依然返回空。
其实docker会为每个容器创建net namespace,只是没挂载在/var/run/netns目录下,所以用ip netns命令查不到。
小tip:如果想用ip netns查看,可以用ln –s创建软连接,自行搜索吧。
3.3 查看容器内部网络
执行docker exec -it bbox1 sh进入容器
- 网卡及路由表
[root@docker1 ~]# docker exec -it bbox1 sh
/ # ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue 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,M-DOWN> mtu 1500 qdisc noqueue
link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
valid_lft forever preferred_lft forever
/ #
/ # route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 172.17.0.1 0.0.0.0 UG 0 0 0 eth0
172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0
可以发现,容器的网卡eth0跟bridge上的vethe9a0e73是一对veth pair设备,并且容器内部的默认路由指向docker0的IP 172.17.0.1。
3.4 容器网络拓扑
结合上面的分析,画出当前网络拓扑如下:
3.5 两个容器
执行docker run -it -d --name=bbox2 busybox,创建一个新容器。
网络拓扑如下:
bbox1 ping bbox2,就是简单的二层转发,过程如下:
- 在bbox1内部ping 172.17.0.3,根据bbox1的路由表的默认路由,报文从eth0发出,docker0上的vethe9a0e73收到;
- docker0就是虚拟交换机,遵从二层转发,根据目的mac查到对应的端口,将其送出;
- bbox2收到报文。
4.小结
- 安装Docker时,Docker会自动创建一个名为docker0的bridge
- 每个容器都有自己的net namespace
- 创建容器,如果不指定网络,则默认使用bridge模式并且连接到docker0
- 容器与docker0通过veth pair连接
下一节,我们介绍容器与外部的通信。点击此处回到docker系列文章目录。
原创文章,如果转载,请声明出处!
-----------------------------------------------------------------------------------------------
本人微信公众号同步更新云计算、容器、网络、编程等文章,欢迎参观!

Docker-Bridge Network 01 容器间通信的更多相关文章
- Docker:跨主机容器间通信之overlay [十五]
一.配置overlay类型网络准备工作 1.在luoahong3主机上 docker run -d -p 8500:8500 -h consul --name consul progrium/cons ...
- 容器间通信的三种方式 - 每天5分钟玩转 Docker 容器技术(35)
容器之间可通过 IP,Docker DNS Server 或 joined 容器三种方式通信. IP 通信 从上一节的例子可以得出这样一个结论:两个容器要能通信,必须要有属于同一个网络的网卡. 满足这 ...
- WSL docker打通容器间通信和追加端口映射
最近在docker中搭建一个服务,需要有多个容器通信.这里简单记录一下如何在容器间进行通信,同时说一下已经存在的容器如何追加端口映射. 增加网桥 容器间通信的目的是不适用IP而是使用容器名称进行网络通 ...
- Docker 与 K8S学习笔记(九)—— 容器间通信
容器之间可通过IP.Docker DNS Server或joined三种方式进行通信,今天我们来详细学习一下. 一.IP通信 IP通信很简单,前一篇中已经有所涉及了,只要容器使用相同网络,那么就可以使 ...
- 使用docker搭建nfs实现容器间共享文件
首先介绍下今天的两个主角:nfs和docker nfs 是什么 NFS(Network File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TC ...
- 【云计算】使用docker搭建nfs实现容器间共享文件
首先介绍下今天的两个主角:nfs和docker nfs 是什么 NFS(Network File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TC ...
- docker容器间通信
现在在我们的docker中已经有了三个容器,分别是DB/API/UI三个容器,三个容器间肯定是要进行互相通信的 可以查看docker的官方文档,https://docs.docker.com/engi ...
- docker 不同机器上容器互相通信
环境说明: 1.系统:centos7 2.docker:Docker version 1.3.2 3.docker启动参数:OPTIONS=--selinux-enabled=false -H fd: ...
- Docker网络和容器的通信
Docker的本地网络实现其实就是利用了Linux上的网络命名空间和虚拟网络设备(特别是veth pair). 基本原理 直观上看,要实现网络通信,机器需要至少一个网络接口(物理接口或虚拟接口)与外界 ...
随机推荐
- Error: clean-webpack-plugin only accepts an options object. See: https://github.com/johnagan/clean-webpack-plugin#options-and-defaults-optional
webpack中文文档中推荐这样使用,but 执行npm run build Error: clean-webpack-plugin only accepts an options object. S ...
- python-pathlib
2019-12-12 04:27:17 我们知道在不同的操作系统中文件路径的组成方式是不同的,因此在python中关于路径的问题以往我们通常采用os.path.join来进行路径的字符串级别的串联,通 ...
- 北邮OJ 89. 统计时间间隔 java版
89. 统计时间间隔 时间限制 1000 ms 内存限制 65536 KB 题目描述 给出两个时间(24小时制),求第一个时间至少要经过多久才能到达第二个时间.给出的时间一定满足的形式,其中x和y分别 ...
- 我们是怎么实现gRPC CodeFirst-生成proto
前言: gRPC默认是ProtoFirst的,即先写 proto文件,再生成代码,需要人工维护proto,生成的代码也不友好,所以出现了gRPC CodeFirst,下面来说说我们是怎么实现gRPC ...
- spring boot项目打war包
1.如果有本地依赖,添加本地依赖到maven <!--lib目录下的jar包--> <dependency> <groupId>com.dm</groupId ...
- 在django中如何从零开始搭建一个mock服务
mock概念 mock 就是模拟接口返回的一系列数据,用自定义的数据替换接口实际需要返回的数据,通过自定义的数据来实现对下级接口模块的测试.这里分为两类测试:一类是前端对接口的mock,一类是后端单元 ...
- [AI开发]一个例子说明机器学习和深度学习的关系
深度学习现在这么火热,大部分人都会有‘那么它与机器学习有什么关系?’这样的疑问,网上比较它们的文章也比较多,如果有机器学习相关经验,或者做过类似数据分析.挖掘之类的人看完那些文章可能很容易理解,无非就 ...
- JRebel 破解使用
步骤1:生成一个GUID:在线生成GUID地址 步骤2: 根据反向代理服务器地址拼接激活地址 服务器地址: https://jrebel.qekang.com/{GUID} 如果失效刷新GUID替换就 ...
- python之路 2020/2/18
这是第一篇随笔,记录今天的内容,我不知道什么是成功,因为我没有成功过,但是,我想成功一次! python 多练吧! 一.编程语言的分类 机器语言:01001010,高低电平,计算机懂的语言. 汇编语言 ...
- Python python对象 enumerate
""" enumerate(iterable[, start]) -> iterator for index, value of iterable Return a ...