Docker 网络详解

news2024/9/27 19:18:18

前置网络知识

OSI七层网络模型

从下到上依次为:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。

交换机:处在第二次,也就是数据链路层。作用:通过一个或者多个设备将不同子网连接在一起,相互通信;
路由器:处在网络层,实现信息的传送(简单描述:首先通过IP的网络地址定位到某个网络,期间可能经过多个网络,到达最终的网络后,再通过IP + 子网掩码 得到主机地址,用主机地址和PC的MAC地址映射关系找到最终的机器,再通过port定位到那个程序,对应的程序就能收到数据啦~)。每个路由器都有一张路由表,根据这张表寻找最终地址或者下一个转发的地址。

交换机

交换机工作于OSI参考模型的第二层,即数据链路层。交换机内部的CPU会在每个端口成功连接时,通过将MAC地址和端口对应,形成一张MAC表。在今后的通讯中,发往该MAC地址的数据包将仅送往其对应的端口,而不是所有的端口。

每个物理网卡对应一个唯一的MAC的地址(物理地址),这个地址是网卡在出场的时候就固定了的,保证不会重复。

交换机在同一时刻可进行多个端口对之间的数据传输。每一端口都可视为独立的物理网段(注:非IP网段),连接在其上的网络设备独自享有全部的带宽,无须同其他设备竞争使用。当节点A向节点D发送数据时,节点B可同时向节点C发送数据,而且这两个传输都享有网络的全部带宽,都有着自己的虚拟连接。假使这里使用的是10Mbps的以太网交换机,那么该交换机这时的总流通量就等于2×10Mbps=20Mbps。

总之,交换机是一种基于MAC地址识别,能完成封装转发数据帧功能的网络设备。

NAT(Network Address Translation)

NAT是指网络地址转换,1994年提出的。

当在专用网内部的一些主机本来已经分配到了本地IP地址(即仅在本专用网内使用的专用地址),但又想和因特网上的主机通信(并不需要加密)时,可使用NAT方法。这种通过使用少量的全球IP地址(公网IP地址)代表较多的私有IP地址的方式,将有助于减缓可用的IP地址空间的枯竭。

私有网络ip块

A 类:10.0.0.0~10.255.255.255
B 类:172.16.0.0~172.31.255.255
C 类:192.168.0.0~192.168.255.255

一、Docker网络命令

1.1 创建网络

docker network create net_name

1.2 删除网络

docker network rm net_name

1.3 查看网络列表

docker network ls

1.4 查看指定网络信息

docker network inspect net_name

1.5 连接一个容器到执行网络

docker network connect net_name container

1.6 将容器从指定网络断开

docker network disconnect

二、Docker网络连接

Docker默认提供了3种网络模式,生成容器时不指定网络模式下默认使用bridge桥接模式。
使用命令查看当前Docker所有的网络模式。

[root@VM-24-12-centos panda]# docker network ls
NETWORK ID     NAME         DRIVER    SCOPE
1837a1f4b464   bridge       bridge    local
b0363838038c   host         host      local
02040f0017d5   none         null      local
[root@VM-24-12-centos panda]#

2.1 bridge桥接

Docker默认的网络模式就是桥接,如果在启动容器时不使用–network 显式指定网络类型就会使用桥接模式。桥接,也叫网桥,指的是把物理网卡(eth0)当作交换机来用。

当Docker进程启动的时候,会在宿主机上创建一个docker0的虚拟网桥。每个启动的容器都会连接到这个网桥上。具体流程如下:容器在启动的时候,会从docker0子网中分配一个IP给容器(注意:该IP和物理网卡eth0不在同一个网段),同时将docker0的IP设置为容器的网关。接着,Docker会为该容器创建一对虚拟网卡设备veth pair,一个连接宿主机的docker0网桥,另一个连接该容器(veth0xxx)。

docker run -dit --name mynginx nginx
docker inspect mynginx

可以看到容器的IP地址为:172.17.0.3,网关:172.17.0.1(docker0的IP地址)

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

在这里插入图片描述

Linux内核支持两种级别的设备模拟(纯软件):(1)链路层(二层)设备:每个网卡是成对出现的。一端在主机,一端在交换机上,linux原生支持模拟二层网桥设备交换机(工具bridge-utils);(2)网络层(三层)设备,OVS(Open VSwith),软件驱动的软硬件集中到一个软件上,统一调度。

安装 bridge-utils 工具
yum install -y bridge-utils

2.2 NAT 网络地址转换协议

在这里插入图片描述

如图,假设同一局域网中的两个容器helloA 和 helloB要通信:helloA的报文会先交给docker0网桥,宿主机判断报文的目标地址不是自己,通过查路由表发现是和机器115的helloB容器通信,就会通过eth0将报文发送到115机器,115再查找自己的路由表找到helloB容器。

但此时110机器是收不到115机器的回复的,为什么呢?因为helloA容器的报文的源IP是172.17.0.2,这个地址是私有的,115机器是看不到的;如果想收到115机器的回复,就需要把报文的源IP地址在出eth0物理网卡时,修改成192.168.10.110。这样115机器的回复报文会找到110机器,再通过查路由表就能知道是helloA容器了。

上面两个容器时彼此看不到对方的,helloA以为在和192.168.10.115通信,helloB以为在和192.168.10.110通信。这样效率不高,但是方便管理。如果不想和桥接一样暴露在外面,又不想藏在宿主机后面,怎么办呢?叠加网络应用而生。

2.3 host 模型

host模式可以让容器共享宿主机网络栈,这样的好处是外部主机与容器直接通信,但是容器的网络缺少隔离性。

2.4 none网络

none模式是指禁用网络功能,只有lo接口,在容器创建时使用 --network none指定

2.5 自定义网络类型

自定义网络模式,docker提供了三种自定义网络驱动: bridge overlay macvlan。建议使用自定义的网络来控制哪些容器可以相互通信。

在微服务部署的场景下,注册中心是使用服务名来唯一识别微服务的,而我们上线部署的时候微服务对应的IP地址可能会改动,所以我们需要使用容器名来配置容器间的网络连接。使用自定义网络创建容器后,相同网络下的容器,不管是通过容器IP还是容器名,都可以进行网络通信:

docker network --help
docker network create --help

2.5.1 创建网络并指定子网

docker network create --subnet=172.28.0.0/16 net_test_2

在这里插入图片描述

2.5.2 创建网络并指定子网、网关及ip范围
docker network create --subnet=172.38.0.0/16 --gateway=172.38.5.254 --ip-range=172.38.5.0/24 net_test_3

在这里插入图片描述
每创建一个网络就会在路由表中添加一条静态路由信息。

route -n 查看路由表

在这里插入图片描述

案例1

以nginx为例,我们启动三个容器,都接入 net_test_2 网络

docker run -d --network net_test_2 nginx
docker run -d --network net_test_2 nginx
docker run -d --network net_test_2 nginx

docker network inspect net_test_2 

可以看到,net_test_2 接了三个容器。
在这里插入图片描述
在这里插入图片描述
将 容器determined_chatelet连接到 net_test_1 网络,在查看determined_chatelet的详细信息,可以看到该容器连接了两个网络。

docker network connect net_test_1 determined_chatelet

docker inspect determined_chatelet

在这里插入图片描述

在这里插入图片描述
断开网路再次查看

docker network disconnect net_test_1 determined_chatelet
docker network disconnect net_test_2 determined_chatelet

在这里插入图片描述

实际案例二

不同网络的容器是无法通信的。需要加入同一个网络才能通信,并且只能访问同一个网络下的那个ip。

在这里插入图片描述
可以看到容器 magical_bartik的网络是net_test_1, IP地址是 172.19.0.2

docker inspect magical_bartik

在这里插入图片描述
可以看到容器 determined_chatelet 的网络是net_test_2, IP地址是 172.28.0.4

docker inspect determined_chatelet

在这里插入图片描述
进入到 determined_chatelet 容器

docker exec -it determined_chatelet bash

curl http://172.28.0.4 
curl http://172.19.0.2 

在这里插入图片描述

将上面两个容器同时连接到net_test_3 网络

docker network connect net_test_3 magical_bartik
docker network connect net_test_3 determined_chatelet 

docker inspect magical_bartik

在这里插入图片描述

再次进入到 determined_chatelet 容器
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/375984.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Ant Design Vue 如何添加时间选择框

第一步引入 组件 import JDate from /components/jeecg/JDate使用 重点代码 <j-date<a-col :span"24/2"><a-form-item :labelCol"labelCol" :wrapperCol"wrapperCol" label"验收日期"><j-date placeholder"…

Lesson9---回归问题

9.1 机器学习基础 课程回顾 Python语言基础Numpy/Matplotlib/Pandas/Pillow应用TensorFlow2.0 低阶API 即将学习 机器学习、人工神经网络、深度学习、卷积神经网络典型模型的TensorFlow2.0实现 9.1.1 机器学习 机器学习&#xff08;Machine Learning&#xff09;&#xf…

2023年湖北七大员证书查询网站是哪里?

一、湖北七大员是哪七大员&#xff1f; 湖北七大员分别是&#xff1a;施工员、质量员、资料员、材料员、标准员、劳务员和机械员。其中施工员和质量员分为&#xff1a;市政、土建、装饰装修和设备安装四个子专业&#xff0c;其他不分。 二、湖北七大员证书查询网站是哪里&#…

Node下载阿里OSS存储文件【不知目录结构】

前言&#xff1a;前端传模型ID&#xff0c;后台根据ID去阿里OSS存储下载对应文件&#xff08;不知文件内部层级结构&#xff0c;且OSS只能单个文件下载&#xff09;&#xff0c;打包成zip字节流形式返回给前端下载。 需求分析&#xff1a; 生成OSS文件关系树Node做文件下载存…

ClickHouse 相关面试题

文章目录什么是 ClickHouse&#xff0c;它的特点是什么&#xff1f;ClickHouse的数据存储方式是什么&#xff0c;它与传统的行式存储有什么区别&#xff1f;ClickHouse 引擎ClickHouse的数据模型是什么&#xff0c;它与传统的关系型数据库的数据模型有什么区别&#xff1f;Clic…

【TVM 学习资料】TensorIR 快速入门

本篇文章译自英文文档 Blitz Course to TensorIR 作者是 Siyuan Feng。更多 TVM 中文文档可访问→TVM 中文站 TensorIR 是深度学习领域的特定语言&#xff0c;主要有两个作用&#xff1a; 在各种硬件后端转换和优化程序。自动 tensorized 程序优化的抽象。 import tvm from…

kafka(一) 的架构,各概念

Kafka架构 Kafak 总体架构图中包含多个概念&#xff1a; &#xff08;1&#xff09;ZooKeeper&#xff1a;Zookeeper负责保存broker集群元数据&#xff0c;并对控制器进行选举等操作。 &#xff08;2&#xff09;Producer&#xff1a; 生产者负责创建消息&#xff0c;将消息发…

Kafka 概述

文章目录Kafka定义消息队列消息队列应用场景缓冲/消峰 场景解耦 场景异步通信 场景消息队列两种模式点对点模式发布/订阅模式 ***kafka基础架构Kafka定义 消息队列 目前企业中比较常见的消息队列产品主要有 Kafka、ActiveMQ 、RabbitMQ 、RocketMQ 等。在大数据场景主要采用 Ka…

I.MX6ULL内核开发11:使用设备树实现RGB灯驱动

目录 一、实验说明 二、硬件原理图分析 2.1 打开原理图&#xff0c;找到rgb部分 2.2 对RGB的R灯进行寄存器设置 2.2.1 时钟配置 2.2.2 引脚复用GPIO 2.2.3 引脚属性设置 2.2.4 输出电平设置 三、实验代码 3.1 编程思路 3.2 代码分析 3.2.1 添加RGB设备节点 3.2.2 编…

openlayers加载离线地图并实现深色地图

问题背景 我们自己一直使用的openlayergeoserver自己发布的地图&#xff0c;使用的是矢量地图。但是由于政府地图大都使用为天地图&#xff0c;所以需要将geoserver的矢量地图更改为天地图&#xff0c;并且依旧是搭配openlayers来使用。 解决步骤 一&#xff1a;加载离线地图&a…

ubuntu20.04安装nginx一系列问题

当初做一个项目的时候给linux装nginx遇到了很多问题&#xff0c;当初边搞边记录&#xff0c;这两天翻看项目笔记的时候找出来了&#xff0c;就把这一部分分享出来给大家看看 ubuntu20.04 LTS 安装yum无法定位软件包 备份原来的软件源 sudo cp /etc/apt/sources.list /etc/ap…

目前软搭建测试的行业现状和前景

软件测试的发展前景和行业现状 1. 软件测试的工资情况 软件测试的方向&#xff1a;功能>>>接口>>>性能>>>自动化>>>测开>>>人生巅峰 功能测试:曾经互联网缺口和软件测试缺口非常大&#xff0c;因此功能测试越来越多。可是20…

Linux-编写一个自己的命令

前言&#xff08;1&#xff09;在Linux中&#xff0c;我们对文件路径进行操作都需要输入命令。那么&#xff0c;有人可能就会有疑惑了&#xff0c;命令是什么东西&#xff1f;我们是否也可以创造出自己的命令呢&#xff1f;答案是可以的。命令本身其实就是可执行文件。但是与普…

使用docker pull 跨系统架构拉取镜像

使用docker pull 跨系统架构拉取镜像使用docker pull 跨系统架构拉取镜像docker hub上找到相应的镜像在个人电脑中的执行拉取镜像命令&#xff1a;执行查看镜像命令&#xff1a;执行检查镜像命令&#xff1a;执行保存镜像命令&#xff1a;使用docker pull 跨系统架构拉取镜像 …

【C语言编译器】03 Linux GCC 初探

一、准备工作 简单介绍&#xff0c;马上出 GCC 系列。本文非常浅显。 Linux系统常用来用作服务器&#xff0c;其中最常用的发行版是CentOS、Ubuntu、Debian等。 尽管很多C语言IDE都有Linux版本&#xff0c;比如VS、CLion的Linux版。但作为服务器的Linux通常没有GUI界面&…

腾讯TIM实现即时通信 v3+ts实践

目录 初始化sdk 功能描述 初始化 准备 SDKAppID 调用初始化接口 监听事件 发送消息 创建消息 创建文本消息 登录登出 功能描述 登录 登出 销毁 登录设置 获取会话列表 功能描述 获取会话列表 获取全量的会话列表 历史消息 功能描述 拉取消息列表 分页拉取…

自动驾驶自主避障概况

文章目录前言1. 自主避障在自动驾驶系统架构中的位置2. 自主避障算法分类2.1 人工势场法&#xff08;APF&#xff09;2.1.1引力势场的构建2.1.2斥力势场的构建2.1.3人工势场法的改进2.2 TEB&#xff08;Timed-Eastic-Band, 定时弹性带&#xff09;2.3 栅格法2.4 向量场直方图(V…

Linux 之 大数据定制篇-shell 编程

文章目录1 为什么要学习 Shell 编程2 Shell 是什么&#xff1f;3 Shell 脚本的执行方式3.1 脚本格式要求3.2 编写第一个 Shell 脚本3.3 脚本的常用执行方式4 Shell 的变量4.1 Shell 变量介绍4.2 shell 变量的定义4.3 shell 变量的定义5 设置环境变量5.1 基本语法5.2 快速入门6 …

【AI绘画】秒级出图 快速生成大师级画作

最近闲来无事&#xff0c;在网上体验了一下各种AI绘画工具。 根据输入的描述语快速生成自己想要的图片&#xff0c;听着还是很不错的&#xff01;想要啥图片就可以生成啥图片&#xff1f;于是&#xff0c;期待满满的搞起来了~ 可是真当体验了一下之后… 这生成的啥呢&#xf…

广泛运用在工业、轨道交通、监狱的ip对讲终端

ip网络对讲系统是不同于传统广播、调频寻址广播和数控广播的产品&#xff0c;它是基于IP数据网络&#xff0c;将音频信号经过数字编码以数据包形式按TCP\IP协议在局域网或广域网上传送&#xff0c;再由终端解码的纯数字化单向&#xff0c;双向及多向音频扩声系统。 本产品是新一…