docker容器之间网络是如何通信的?

相关概念:

网桥:相当于一个虚拟的交换机,连接在此网桥上的所有设备均可以正常通信;

veth pair:虚拟网卡对(2张网卡),两张网卡之间的收发数据保持一致;

docker网络:

docker0网桥:在安装启动完docker之后,会出现一个docker0的网卡设备(此设备相当于一个交换机);

创建docker容器后,会创建2个虚拟网卡,一端显示在宿主机中,一端是容器中的eth0,这2张网卡是虚拟网卡对;

创建2个容器,在宿主机上执行ip a,可以看到会出现2个虚拟网卡(以veth开头):

docker run -d --name nginx-1 nginx
docker run -d --name nginx-2 nginx

[[email protected] ~]# ip a
...
3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:92:a1:07:20 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
inet6 fe80::42:92ff:fea1:720/64 scope link
valid_lft forever preferred_lft forever
37: [email protected]: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default
link/ether 56:3f:71:00:b2:95 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet6 fe80::543f:71ff:fe00:b295/64 scope link
valid_lft forever preferred_lft forever
39: [email protected]: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default
link/ether 66:f0:c4:e4:df:a9 brd ff:ff:ff:ff:ff:ff link-netnsid 1
inet6 fe80::64f0:c4ff:fee4:dfa9/64 scope link
valid_lft forever preferred_lft forever
brctl show:可以看到这2个虚拟网卡都绑定在docker0上(相当于通过宿主机上的虚拟网卡连接在交换机(docker0)上)

[[email protected] ~]# brctl show
bridge name bridge id STP enabled interfaces
docker0 8000.024292a10720 no veth87e12aa
vethed473fd
注:连接到同一个网桥上之后(相当于连接在同一个交换机上),容器之间就可以进行通信;

原文地址:https://blog.51cto.com/14464645/2431060

时间: 2024-08-29 21:34:38

docker容器之间网络是如何通信的?的相关文章

如何在Docker容器之间拷贝数据

[编者的话]在容器之间拷贝数据是Docker一个重要而且基本的功能.拷贝数据到其他容器是一个经常使用到的场景,如当服务器遇到不可预见的“灾难”(注:断电,宕机)时,起到备份数据的作用.本文作者详细介绍了操作步骤. 如何在Docker容器之间拷贝数据 Docker容器可以类比成一个目录,它可以将一个应用程序运行时所依赖的所有环境(注:此应用依赖的其他的服务或程序等)打包在一起运行:同时可以随意的对它进行“启动”.“停止”.“移动”或者“删除”等操作.Docker容器在Linux的命名空间(Name

Docker基本命令与使用 —— Docker容器的网络连接(四)

一.Docker容器的网络基础 通过ifconfig查看docker0的网络设备,docker守护进程就是通过docker0为docker的容器提供网络连接的各种服务. docker0是Linux虚拟网桥. Linux虚拟网桥的特点: 可以设置IP地址 相当于拥有一个隐藏的虚拟网卡 docker0的地址划分: IP:172.17.42.1 子网掩码: 255.255.0.0 MAC: 02:42:ac:11:00:00 到 02:42:ac:11:ff:ff 总共提供65534个地址 docke

docker 容器的网络

容器的网络模式 bridge -net=bridge 默认网络.docker启动后创建一个docker0网桥,默认创建的容器也添加到这个网桥 [root@localhost ~]# 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 12

Docker容器跨主机多网段通信解决方案

实现Docker的跨主机网络通信的方案有很多,比如在之前博文中写到的通过部署consul服务实现Docker容器跨主机通信 ,但是consul服务并不能实现多个网段跨主机进行通信,在这种情况之下,MacVlan的概念就应用而生了. Macvlan工作原理: Macvlan是Linux内核支持的网络接口.要求的Linux内部版本是v3.9–3.19和4.0+: 通过为物理网卡创建Macvlan子接口,允许一块物理网卡拥有多个独立的MAC地址和IP地址.虚拟出来的子接口将直接暴露在相邻物理网络中.从

Docker学习笔记(9-2)Docker容器之间的连接

学习目标: 容器之间的连接 准备工作 FROM ubuntu:14.04 RUN apt-get install -y ping RUN apt-get update RUN apt-get install -y nginx RUN pat-get install -y curl EXPOSE 80 CMD /bin/bash #构建测试镜像 docker build -t lexiaofei/cct . 1.允许所有容器互联 --icc=true 默认 $ docker run -it --n

如何使用数据卷在宿主机和docker容器之间共享文件

共享宿主机的目录给容器 docker run -i -t -v ~/download:/home/hello python3-env /bin/bash -v  表示创建一个数据卷并挂载到容器里 ~/download:/home/hello 冒号前面是宿主机目录,后面是容器里的目录.表示把宿主机的download目录挂载到容器的/home/hello目录下.注意run之后是一个新的容器,ID都不一样的.  注意:python3-env是镜像的名称 从Dockerfile新建一个镜像 Docker

Docker容器的网络基础

Linux虚拟网桥的特点:(docker0)1.可以设置IP地址2.相当于拥有一个隐藏的虚拟网卡安装网桥管理工具:[[email protected] ~]# yum install bridge-utils修改docker0地址:(有特定需求时使用)$ ifconfig docker0 192.168.200.1 netmask 255.255.0添加虚拟网桥:$ brctl addbr br0$ ifconfig br0 192.168.100.1 netmask 255.255.255.0

Docker 学习笔记【3】 Docker 仓库、数据卷、数据卷容器,网络基础实操。高级网络配置学习

Docker 学习笔记[4] 高级网络配置实操,实战案例实验 =========================================================================== Docker 学习笔记[2] Docker 仓库实操,创建私有仓库,实操数据卷.数据卷容器,记录开始 =========================================================================== 被格式化的脚本内容: #开头代表

部署Flannel,实现跨主机Docker容器通信

flannel(flannel is a virtual network that attaches IP addresses to containers) 两个主机下的Docker容器之间是不互通的,通过部署flannel,对docker容器的ip进行规划,就能实现跨主机容器之间的通信. 官方文档:https://coreos.com/flannel/docs/latest/flannel-config.html 以下介绍Flannel的部署 机器配置如下 hostname ip 系统版本 e