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

Docker网络,网络工程师还不赶紧收藏!学习Docker网络前建议清空所有环境dockerrmi-f$(dockerimages-aq)每启动一个docker容器,docker就会给docker容器分配一个ip。只要安装了docker,就会有一个网卡docker0(桥接模式,使用的是evth-pair技术)什么是Evth-pairEvth-pair就是一对的虚拟设备接口,他们都是成对出现的,一段连着协议,一段彼此相连.正因为这个特性,evth-pair充当一个桥梁,连接各种虚拟网络设备。OpenStac,Dock

大家好,又见面了,我是你们的朋友全栈君。

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

docker rmi -f $(docker images -aq )

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

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

在这里插入图片描述

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

1️⃣什么是Evth-pair

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

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

2️⃣容器与容器的连通

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

在这里插入图片描述

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

在这里插入图片描述

3️⃣结论

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

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

 docker exec -it tomect01 ip addr

在这里插入图片描述
删除tomec01
在这里插入图片描述

查看Evth-pair消失
在这里插入图片描述

4️⃣概述

在这里插入图片描述

容器的接口与连接到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口。
在这里插入图片描述
ens和lo接口:可以理解为宿主机的物理接口。
在这里插入图片描述

veth-pair接口:Bridge上连接容器的接口。
在这里插入图片描述

容器中:
通过docker exec -it xxx(容器名称)ifconfig进行查看:
可以看到容器的’物理接口’和回还口信息。

2.查看Bridge上接口信息:
CentOS8为例,命令为bridge link,结果为如下:
在这里插入图片描述

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

3.查看容器与Bridge上的veth接口的对应关系:
方法1:使用脚本,查看容器ID和veth的对应关系。具体方法请参考:https://blog.csdn.net/tushanpeipei/article/details/116077454,执行结果如下:
在这里插入图片描述

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

4.docker inspect network命令:
命令如下:
在这里插入图片描述

其中,使用jq查看IPAM.Config的信息和此网络的IP、网关信息:
在这里插入图片描述

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

三、使用主机名进行通信
1.问题:
连接到默认的Bridge的容器,互相可以使用IP地址来通信,但是无法使用主机名来通信。

2.解决方案:
使用–link来通信。
在这里插入图片描述

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

在这里插入图片描述

6️⃣自定义bridge网络

一、 自定义与默认的bridge的关系图示:
在这里插入图片描述

二、命令:
1.创建bridge网络:
docker network create -d bridge --subnet x.x.x.x/x(子网地址) --gateway x.x.x.x bridge-net1,创建一个名为bridge-net1的网络。
在这里插入图片描述

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查看详细信息:
在这里插入图片描述

2.在宿主机上使用ifconfig,可以看到产生了如下的接口:
其中br-xxxxx相当于默认bridge的docker0接口。veth接口则是bridge-net1上连接到容器的虚拟接口。
在这里插入图片描述
在这里插入图片描述

三、特点:
1.在自定义bridge上连接的容器,默认就可以用对方名称进行通信:
在这里插入图片描述

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

3.不同bridge上的容器天生隔离:
在这里插入图片描述

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

在这里插入图片描述

7️⃣Host网络

一、概述:
Host网络是默认存在的网络,借用了宿主机的网络。

二、命令:
将容器连接到host网络:

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

查看接口信息:
ifconfig:可以看到和宿主机的一样。
在这里插入图片描述

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

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

二、命令:
将容器设置为none网络:

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

查看容器接口信息:
ifconfig:可以看到只有lo接口。
在这里插入图片描述

8️⃣Vxlan网络

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

二、原理:
图示:
在这里插入图片描述

在不同宿主机的容器上创建eth1接口,在同一网段,建立overlay的隧道。同时eth0作为underlay的接口,保证底层能够通信。
当Host1和Host2上容器通信时,首先进行overlay的封装,然后再进行underlay的封装,然后将数据发送到对端,对端再进行解封装。

三、纯手工方式:
注意:此方式不推荐,了解即可;后续笔记中记录自动化的方式。
步骤:
1.准备两个虚拟机Docker_docker1(10.1.1.1),Docker_docker2(10.1.1.2),并修改主机名称:
在这里插入图片描述
2.分别在两台设备上设置变量:
在这里插入图片描述

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

4.使用脚本在两台设备上激活服务:
Docker_docker1:
在这里插入图片描述
Docker_docker2:同理

5.在两台设备上分布查看集群状况:
在这里插入图片描述

6.停止docker服务,并使用etcd集群重新启动docker:
在这里插入图片描述

7.在一台设备上创建Overlay网络,默认会同步到集群中:
在这里插入图片描述

8.分布在宿主机上创建容器,连接到overlay网络中:
在这里插入图片描述

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

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

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

二、图示:
同一个宿主机中:类似于单臂路由。
在这里插入图片描述
不同主机中的容器通信:两个物理主机连接到同一个VLAN,IP在同一网段进行通信。

在这里插入图片描述

?欢迎点赞 ? 收藏 ⭐留言 ? 如有错误敬请指正!
?未来很长,值得我们全力奔赴更美好的生活✨

网络工程师福利“知识星球”

在这里插入图片描述仅限CSDN粉丝的福利!

兄弟们福利来啦? !
需要Docker学习视频的同学关注微信公众号免费领取哦?

欢迎关注微信公众号:新网工李白
“免费获取华为认证资料培训机构视频、软考资料和求职简历模板。”需要华为、H3C全方向认证资料(知名培训机构IA、IP、IE视频),还有各种认证资料和视频的同学欢迎加入”知识星球”获取!!!
在这里插入图片描述在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/161669.html原文链接:https://javaforall.net

(0)
上一篇 2022年7月19日 下午12:46
下一篇 2022年7月19日 下午12:46


相关推荐

  • docker打包镜像到本地_如何从虚拟机导出镜像

    docker打包镜像到本地_如何从虚拟机导出镜像引言当我们在测试环境(本文特指docker容器)部署好自己得服务得时候,想在生产环境上部署我们得服务,又害怕环境不一样导致服务不能运行,那么这个时候就可以把我们得容器导出为镜像,然后再把镜像导出为压缩包,接下来把压缩包复制到我们的生产环境,然后在生产环境把压缩包导入为镜像,最后使用此镜像开一个容器,然后在容器内打开我们的服务,那么我们的服务就可以正常运行啦!环境简介系统环境:ubuntu18.04如果要在新的服务器使用我们的镜像,那么需要新的服务器和你测试环境的服务器的底层系统一致,即如果你测试环

    2025年9月21日
    9
  • docker访问宿主机_docker容器获取宿主机ip

    docker访问宿主机_docker容器获取宿主机ip前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程我们需要让宿主机的mysql允许远程接入。需要授权,不同版本的mysql授权语句不一样,这个在之前讲过。如下是mysql8.0之前版本的授权语句:GRANTALLPRIVILEGESON*.*TO’root’@’%’IDENTIFIEDBY’root’WITHGRANTOPTION;docker安装的mysql走网桥网络,这样docker容器的mysql就能跟宿主机同一个网络

    2022年8月21日
    13
  • docker dockerfile详解_docker运行命令

    docker dockerfile详解_docker运行命令前言Dockerfile是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。Dockerfile简介Dockerfile是用来构建Docker镜像的构建文件,是由一系列

    2022年7月31日
    7
  • docker安装informix

    docker安装informix1 通过 docker 下载镜像 dockerpullib informix developer database2 启动容器 sudodockerru itnameinform p19088 9088 p19089 9089 p27017 27017 p27018 27018 p27883 27883 eLICENSE acceptibmcom informix developer database latest

    2026年3月26日
    2
  • docker(1)下载安装for mac

    docker(1)下载安装for mac前言Docker提供轻量的虚拟化,你能够从Docker获得一个额外抽象层,你能够在单台机器上运行多个Docker微容器,而每个微容器里都有一个微服务或独立应用,例如你可以将Tomcat运行在一个D

    2022年7月29日
    7
  • docker 离线安装及命令整理[通俗易懂]

    docker 离线安装及命令整理[通俗易懂]1、保存镜像<fontface=’微软雅黑’size=3>将我们的镜像保存为tar压缩文件这样方便镜像转移和保存,然后可以在任何一台安装了docker的服务器上加载这个镜像。(主要考虑到liunx离线部署问题)</font>dockersave镜像名/镜像ID-o镜像保存在哪个位置与名字示例dockersaveoffline-map-o/offlinemap.tar2、加载镜像任何装docker的地方加载镜像保存文件,使其恢复为一

    2026年4月13日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号