Docker网络,网络工程师还不赶紧收藏!

简介: Docker网络,网络工程师还不赶紧收藏!

学习Docker网络前建议清空所有环境

docker rmi -f $(docker images -aq )

每启动一个docker容器,docker就会给docker容器分配一个ip。

只要安装了docker,就会有一个网卡docker0 ( 桥接模式,使用的是evth-pair技术 )

image.png

跟这网络工程师一起学Docker网络😍

1️⃣什么是Evth-pair

Evth-pair就是一对的虚拟设备接口,他们都是成对出现的,一段连着协议,一段彼此相连.正因为这个特性,evth-pair 充当一个桥梁,连接各种虚拟网络设备。

OpenStac,Docker容器之间的连接, OVS的连接,都是使用 evth-pair 技术.

2️⃣容器与容器的连通

  • linux与docker容器之间通过docker0是可以ping通的
  • docker容器与容器之间是可以相互ping通的

image.png

分析:tomcat01和tomcat02公用一个路由器,所有的容器在不指定网络的情况下,都用docker0,dockers默认给每个容器分配一个可用的IP地址。

image.png

3️⃣结论

  • Docker使用的是Linux的桥接,宿主机是一个Docker容器的网桥docker0
  • Docker中所有的网络接口都是虚拟,虚拟网卡转发效率高

容器删除,对应的Evth-pair就会消失

docker exec -it tomect01 ip addr

image.png

删除tomec01

image.png

查看Evth-pair消失

image.png

4️⃣概述

image.png

容器的接口与连接到Bridge上的veth接口,形成veth-pair,默认的Bridge网络,网关默认是docker0。

默认的Bridge网络,docker0的地址是172.17.0.1/24,而第一个接入的设备,则IP地址为172.17.0.2/24…以此内推。

5️⃣查看Bridge网络的相关命令

1.ifconfig命令:

宿主机上:

docker0接口信息:可以理解为Bridge的SVI口。

image.png

ens和lo接口:可以理解为宿主机的物理接口。

image.png

veth-pair接口:Bridge上连接容器的接口。

image.png

容器中:

通过docker exec -it xxx(容器名称)ifconfig进行查看:

可以看到容器的’物理接口’和回还口信息。

2.查看Bridge上接口信息:

CentOS8为例,命令为bridge link,结果为如下:

image.png

可以看到,2个veth接口和docker0连接在这个Bridge上。

3.查看容器与Bridge上的veth接口的对应关系:

方法1:使用脚本,查看容器ID和veth的对应关系。具体方法请参考:https://blog.csdn.net/tushanpeipei/article/details/116077454,执行结果如下:

image.png

方案二:通过索引来对比:

4.docker inspect network命令:

命令如下:

image.png

其中,使用jq查看IPAM.Config的信息和此网络的IP、网关信息:

image.png

Containers的信息为此网络连接的容器信息:

三、使用主机名进行通信

1.问题:

连接到默认的Bridge的容器,互相可以使用IP地址来通信,但是无法使用主机名来通信。

2.解决方案:

使用–link来通信。

image.png

3.注意点:

–link的原理其实就是在本地添加了对方主机名称和IP地址的映射,但是对端并没有,所以对端依旧无法通过本端的主机名与本端进行通信。容器内映射信息如下:

image.png

6️⃣自定义bridge网络

一、 自定义与默认的bridge的关系图示:

image.png

二、命令:

1.创建bridge网络:

docker network create -d bridge --subnet x.x.x.x/x(子网地址) --gateway x.x.x.x bridge-net1,创建一个名为bridge-net1的网络。

image.png

2.将容器连接到自定义bridge网络:

容器RUN时连接:

docker run -it --name docker-net1 --network bridge-net1(网络名称) prin/centos-vim-ifconfig /bin/bash
 docker run -it --name docker-net2 --network bridge-net1(网络名称) prin/centos-vim-ifconfig /bin/bash 

容器已经RUN后连接:

docker network connect bridge-net1(网络名称)  docker-net1(容器名称)

3.查看自定义网络的相关信息:

1.可以使用命令docker inspect bridge-net1查看详细信息:

image.png

2.在宿主机上使用ifconfig,可以看到产生了如下的接口:

其中br-xxxxx相当于默认bridge的docker0接口。veth接口则是bridge-net1上连接到容器的虚拟接口。image.png

三、特点:

1.在自定义bridge上连接的容器,默认就可以用对方名称进行通信:

image.png

2.不同bridge之间能够互相通信的原因是使用了Docker Engine上的DNS Resolver,直接对IP地址进行解析:

image.png

3.不同bridge上的容器天生隔离:

image.png

4.同一个容器可以接入到多个bridge上,例如经典三件套:Nginx-django-psql

image.png

7️⃣Host网络

一、概述:

Host网络是默认存在的网络,借用了宿主机的网络。

二、命令:

将容器连接到host网络:

docker run -it --name centos_host --network=host prin/centos-vim-ifconfig /bin/bash

查看接口信息:

ifconfig:可以看到和宿主机的一样。

image.png

三、注意:

如果在host的容器和宿主上同时开放一个端口,会报错。

None网络:

一、概述:

none网络是默认存在的网络,默认只有一个回环接口,无法与外界通信。

二、命令:

将容器设置为none网络:

docker run -it --name centos_none --network=none prin/centos-vim-ifconfig /bin/bash

查看容器接口信息:

ifconfig:可以看到只有lo接口。

image.png

8️⃣Vxlan网络

一、目的:

连接不同宿主机上的容器,创建集群。

二、原理:

图示:

image.png

在不同宿主机的容器上创建eth1接口,在同一网段,建立overlay的隧道。同时eth0作为underlay的接口,保证底层能够通信。

当Host1和Host2上容器通信时,首先进行overlay的封装,然后再进行underlay的封装,然后将数据发送到对端,对端再进行解封装。

三、纯手工方式:

注意:此方式不推荐,了解即可;后续笔记中记录自动化的方式。

步骤:

1.准备两个虚拟机Docker_docker1(10.1.1.1),Docker_docker2(10.1.1.2),并修改主机名称:

image.png

2.分别在两台设备上设置变量:

image.png

3.在两台设备上下载并解压分布式存储文件。资源可以在网上搜索etcd-v(版本号) -linux-amd64进行下载:

image.png

4.使用脚本在两台设备上激活服务:

Docker_docker1:

image.png

Docker_docker2:同理

5.在两台设备上分布查看集群状况:

image.png

6.停止docker服务,并使用etcd集群重新启动docker:

image.png

7.在一台设备上创建Overlay网络,默认会同步到集群中:

image.png

8.分布在宿主机上创建容器,连接到overlay网络中:

image.png

9.测试网络通信状况(在容器里面互相ping对端名称)和查看网络信息(dockek network ls/docker network inspect qyt_overlay )。

9️⃣物理VLAN网络(MAC VLAN)

一、概念:

在宿主机上使用子接口的方式,将容器接入到vlan中,以保证通信,其应用场景少。

二、图示:

同一个宿主机中:类似于单臂路由。

image.png

不同主机中的容器通信:两个物理主机连接到同一个VLAN,IP在同一网段进行通信。

image.png

📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!

📢未来很长,值得我们全力奔赴更美好的生活✨

相关文章
|
6天前
|
运维 安全 Linux
深入理解Docker自定义网络:构建高效的容器网络环境
深入理解Docker自定义网络:构建高效的容器网络环境
|
6天前
|
运维 Linux 虚拟化
Docker详解(十四)——Docker网络类型详解
Docker详解(十四)——Docker网络类型详解
17 0
|
7天前
|
Kubernetes Docker 容器
【Docker专栏】Docker网络配置详解:从Bridge到Overlay
【5月更文挑战第7天】本文介绍了Docker的四种网络类型:Bridge(默认,每个容器连接虚拟桥)、Host(容器共享宿主机网络命名空间)、Overlay(跨宿主机通信,适合集群环境)和Macvlan(容器直接连接物理网络)。Bridge网络适用于同主机通信,而Overlay适合多主机集群。Host网络缺乏隔离,Macvlan则让容器直接连到外部网络。理解这些网络类型有助于优化Docker容器的网络配置。
【Docker专栏】Docker网络配置详解:从Bridge到Overlay
|
14天前
|
存储 网络协议 算法
|
14天前
|
Kubernetes API 调度
|
14天前
|
存储 安全 算法
|
14天前
|
运维 监控 安全
【亮剑】为网络工程师总结了Juniper设备的配置、监控和故障排除命令
【4月更文挑战第30天】本文为网络工程师总结了Juniper设备的配置、监控和故障排除命令。配置命令包括基础设置、路由协议、安全和系统服务;监控命令涉及系统状态、接口、流量及路由表;故障排除命令涵盖日志、接口、路由协议和安全方面的排查工具。掌握这些基本命令将提升网络运维效率。
|
15天前
|
网络协议 算法 网络虚拟化
|
16天前
|
安全 网络安全 网络虚拟化
【专栏】子网划分是网络管理关键,涉及子网定义、子网掩码作用及意义
【4月更文挑战第28天】子网划分是网络管理关键,涉及子网定义、子网掩码作用及意义。方法包括确定子网数和主机数、选择子网掩码、计算地址范围和分配地址。网络工程师应合理规划、考虑扩展性,避免子网重叠,结合VLAN技术,定期评估优化。实际应用广泛,如企业、数据中心和校园网络。掌握子网划分技巧,能提升网络性能、安全性和管理效率。
|
16天前
|
运维 网络协议 安全
【专栏】30个必备的思科设备巡检命令,涵盖设备基本信息、性能、网络连接、安全及其它重要方面
【4月更文挑战第28天】本文列举了30个必备的思科设备巡检命令,涵盖设备基本信息、性能、网络连接、安全及其它重要方面。这些命令包括`show version`、`show running-config`、`show ip route`、`show access-lists`等,对监控设备状态、排查故障及优化性能至关重要。熟悉并运用这些命令能提升网络工程师的工作效率,确保网络稳定运行。不断学习新命令以适应网络技术发展是网络工程师的必修课。