玩转Docker(五):网络

文章目录

  • 〇、关于linux系统网络
  • 一、none网络
  • 二、host网络
  • 三、bridge网络
  • 四、user-defined网络

Docker安装时会自动在host上创建三个网络,我们可用docker network ls命令查看:

docker network ls

在这里插入图片描述

那么这几种网络分别有什么含义呢?在回答这个问题之前我们先来看一下操作系统的网络,我以centos为例。

〇、关于linux系统网络

试着在命令行执行ifconfig命令,将会得到以下内容:

docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.17.0.1  netmask 255.255.0.0  broadcast 172.17.255.255
        inet6 fe80::42:21ff:fefb:4431  prefixlen 64  scopeid 0x20<link>
        ether 02:42:21:fb:44:31  txqueuelen 0  (Ethernet)
        RX packets 53849  bytes 3534921 (3.3 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 63701  bytes 184086739 (175.5 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

enp1s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.16.49.247  netmask 255.255.252.0  broadcast 172.16.51.255
        inet6 fe80::aa51:27e1:5169:a261  prefixlen 64  scopeid 0x20<link>
        ether 64:4e:d7:6c:24:96  txqueuelen 1000  (Ethernet)
        RX packets 1044081  bytes 409992381 (390.9 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1037423  bytes 347334338 (331.2 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 166076  bytes 120668074 (115.0 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 166076  bytes 120668074 (115.0 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

veth3b12615: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet6 fe80::4c73:e7ff:fea1:c72b  prefixlen 64  scopeid 0x20<link>
        ether 4e:73:e7:a1:c7:2b  txqueuelen 0  (Ethernet)
        RX packets 3610  bytes 252701 (246.7 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 6240  bytes 87300874 (83.2 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

virbr0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 192.168.122.1  netmask 255.255.255.0  broadcast 192.168.122.255
        ether 52:54:00:19:28:58  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

这些信息描述了各个网络接口的配置和统计信息,包括接口类型、标志、IP地址、子网掩码、广播地址、物理地址以及数据包的接收和发送情况。

1. docker0:
   - flags=4163<UP,BROADCAST,RUNNING,MULTICAST>:这些是网络接口的标志,表明该接口是启用的(UP)、支持广播(BROADCAST)、正在运行(RUNNING)和支持多播(MULTICAST)。
   - inet 172.17.0.1:这是接口的IPv4地址。
   - netmask 255.255.0.0:这是接口的子网掩码。
   - broadcast 172.17.255.255:这是接口的广播地址。
   - ether 02:42:21:fb:44:31:这是接口的物理地址(MAC地址)。
   - RX packets 53849 / bytes 3534921:这是接收数据包的统计信息。
   - TX packets 63701 / bytes 184086739:这是发送数据包的统计信息。

2. enp1s0:
   - flags=4163<UP,BROADCAST,RUNNING,MULTICAST>:同样是网络接口的标志。
   - inet 172.16.49.247:IPv4地址。
   - netmask 255.255.252.0:子网掩码。
   - broadcast 172.16.51.255:广播地址。
   - ether 64:4e:d7:6c:24:96:物理地址(MAC地址)。
   - RX packets 1044081 / bytes 409992381:接收数据包的统计信息。
   - TX packets 1037423 / bytes 347334338:发送数据包的统计信息。

3. lo:
   - flags=73<UP,LOOPBACK,RUNNING>:同样是网络接口的标志。
   - inet 127.0.0.1:这是本地回环接口的IPv4地址。
   - netmask 255.0.0.0:子网掩码。
   - inet6 ::1:这是本地回环接口的IPv6地址。
   - RX packets 166076 / bytes 120668074:接收数据包的统计信息。
   - TX packets 166076 / bytes 120668074:发送数据包的统计信息。

4. veth3b12615:
   - flags=4163<UP,BROADCAST,RUNNING,MULTICAST>:同样是网络接口的标志。
   - inet6 fe80::4c73:e7ff:fea1:c72b:这是接口的IPv6地址。
   - ether 4e:73:e7:a1:c7:2b:物理地址(MAC地址)。
   - RX packets 3610 / bytes 252701:接收数据包的统计信息。
   - TX packets 6240 / bytes 87300874:发送数据包的统计信息。

5. virbr0:
   - flags=4099<UP,BROADCAST,MULTICAST>:同样是网络接口的标志。
   - inet 192.168.122.1:IPv4地址。
   - netmask 255.255.255.0:子网掩码。
   - broadcast 192.168.122.255:广播地址。
   - ether 52:54:00:19:28:58:物理地址(MAC地址)。
   - RX packets 0 / bytes 0:接收数据包的统计信息。
   - TX packets 0 / bytes 0:发送数据包的统计信息。

这几个网络接口在系统中有不同的作用:

  1. docker0:这是Docker容器的默认网桥接口,用于连接Docker容器和宿主机的网络。Docker容器可以通过这个接口与外部网络通信。

  2. enp1s0:这是一个物理网卡接口,通常用于连接宿主机到局域网或互联网。这个接口可能连接到路由器、交换机或者其他网络设备,用于宿主机的外部通信。

  3. lo:这是本地回环接口,用于本地主机内部的通信。它通常用于本地主机上的进程之间的通信,例如用于访问本地主机上的服务或应用程序。

  4. veth3b12615:这是一个虚拟以太网接口,通常与容器相关联,用于容器内部的通信和与宿主机的通信。

  5. virbr0:这是用于虚拟化的桥接接口,通常与虚拟机相关联,用于虚拟机与宿主机的通信以及虚拟机之间的通信。

每个接口都有其特定的作用和用途,用于支持不同类型的网络通信需求,包括容器通信、物理网络通信、本地主机通信以及虚拟化环境中的通信。


开篇说了,docker自带none、host、bridge这三种网络,下面就来看看每种网络的具体含义。

一、none网络

Docker的"none"网络是一种特殊的网络模式,它允许容器在一个完全隔离的网络环境中运行,即容器内部没有网络连接。在"none"网络模式下,容器内部的网络栈被禁用,这意味着容器内部无法进行网络通信,也无法访问外部网络或被外部网络访问。

"none"网络模式通常用于那些不需要网络连接的容器,例如一些系统级的容器或者一些特殊用途的容器。在这种模式下,容器内部的进程只能与宿主机进行通信,无法直接与外部网络通信。

使用"none"网络模式可以提供更高的安全性,因为容器内部无法直接访问外部网络,从而减少了潜在的安全风险。同时,这也使得"none"网络模式适用于一些特殊的网络测试场景,或者需要完全隔离的应用场景。

总的来说,"none"网络模式提供了一种高度隔离的网络环境,适用于一些特殊的容器使用场景,但需要注意的是,在这种模式下容器内部的网络通信能力会受到限制。

二、host网络

连接到host网络的容器共享Docker host的网络栈,容器的网络配置与host完全一样。可以通过 --network=host指定使用host网络。

在这里插入图片描述
在容器中可以看到host的所有网卡,并且连hostname也是host的。

直接使用Docker host的网络最大的好处就是性能,如果容器对网络传输效率有较高要求,则可以选择host网络。当然不便之处就是牺牲一些灵活性,比如要考虑端口冲突问题,Docker host上已经使用的端口就不能再用了。

三、bridge网络

Docker安装时会创建一个命名为docker0的Linux bridge。如果不指定–network,创建的容器默认都会挂到docker0上。

在这里插入图片描述

Docker的"bridge"网络是一种默认的网络模式,它允许容器在一个虚拟的桥接网络上进行通信。当Docker引擎启动时,默认会创建一个名为"docker0"的虚拟网桥,这个网桥充当了容器连接到宿主机物理网络的桥梁。

在"bridge"网络模式下,每个容器都会被分配一个唯一的IP地址,并且可以通过"docker0"网桥与其他容器或者宿主机进行通信。此外,Docker还会为每个容器创建一个虚拟的以太网接口(veth pair),其中一个端口连接到容器内部的网络命名空间,另一个端口连接到"docker0"网桥上。

"bridge"网络模式的特点包括:

  1. 默认网络模式:当用户不指定网络模式时,Docker容器会默认采用"bridge"网络模式。

  2. 容器间通信:在同一个"bridge"网络中的容器可以通过其分配的IP地址相互通信,就像在同一个局域网中的设备一样。

  3. 与宿主机通信:容器可以与宿主机进行通信,宿主机可以通过容器的IP地址访问容器内的服务。

  4. 网络地址转换(NAT):"docker0"网桥会对容器的出站流量进行网络地址转换,使得容器可以通过宿主机的IP地址访问外部网络。

  5. 连接外部网络:"bridge"网络模式允许容器连接到宿主机所在的物理网络,从而可以与外部网络通信。

"bridge"网络模式是最常用的Docker网络模式之一,它提供了良好的隔离性和灵活性,使得容器可以方便地进行网络通信,并且可以连接到外部网络。这使得"bridge"网络模式适用于大多数应用场景,特别是那些需要容器之间通信或者容器与外部网络通信的场景。

四、user-defined网络

Docker的用户自定义(user-defined)网络是一种高度灵活的网络模式,允许用户创建自己定义的网络,以满足特定的应用需求。用户自定义网络提供了更多的控制权和定制化选项,使得容器可以在一个独立的、自定义的网络环境中进行通信。

以下是用户自定义网络的一些关键特点:

  1. 自定义网络名称:用户可以为自定义网络指定一个名称,以便更好地识别和管理网络。

  2. 隔离性:每个用户自定义网络都是独立的,容器只能在同一个自定义网络中进行通信,无法直接与其他网络中的容器通信,从而提供了更好的隔离性。

  3. 自定义子网:用户可以为自定义网络指定自己的子网,从而更好地控制IP地址的分配和管理。

  4. 自定义网关:用户可以为自定义网络指定网关地址,使得容器可以通过网关进行通信,同时也可以连接到外部网络。

  5. 连接到多个网络:容器可以连接到多个用户自定义网络,从而实现不同网络环境中的通信。

  6. 跨主机通信:用户自定义网络可以跨多个Docker主机进行通信,这使得容器可以在分布式环境中进行跨主机的通信。

用户自定义网络适用于复杂的应用场景,特别是那些需要更高度定制化网络环境的场景。例如,当需要将多个容器组织成一个应用服务,并且这些容器需要在一个独立的网络环境中进行通信时,用户自定义网络就显得非常有用。

总的来说,用户自定义网络提供了更多的网络定制选项和更好的隔禽性,使得容器可以在更灵活和定制化的网络环境中进行通信,从而满足了更多复杂应用场景下的网络需求。

一般来说掌握前三种就能应付一般使用场景了,因此user-defined网络具体怎么配置请自行上网学习。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何使用自动化工具编写测试用例?

以下为作者观点&#xff0c;仅供参考&#xff1a; 在快速变化的软件开发领域&#xff0c;保证应用程序的可靠性和质量至关重要。随着应用程序复杂性和规模的不断增加&#xff0c;仅手动测试无法满足行业需求。 这就是测试自动化发挥作用的地方&#xff0c;它使软件测试人员能…

机器学习:自督导式学习模型

outline 自督导式模型有跨语言的能力 中文&#xff1a;DRCD的数据集英文&#xff1a;SQuAD的数据集 在104种语言上进行学习&#xff0c;并在英文上进行微调&#xff0c;结果在中文上效果也比较好。 XTREME Benchmark 只用英文进行微调&#xff0c;在其他剩下的语言中进行测试。…

关于#c语言#的问题:设计函数minArr(),传入一个行n列4的二维整型数组,求该数组的最小值

设计函数minArr()&#xff0c;传入一个行n列4的二维整型数组&#xff0c;求该数组的最小值 #include <stdio.h> int minArr(int(*p)[4], int n) {int min p[0][0];for (int i 0; i < n; i) {for (int j 0; j < 4; j) {if (p[i][j] < min) {min p[i][j];}}}r…

PyTorch官网demo解读——第一个神经网络(2)

上一篇&#xff1a;PyTorch官网demo解读——第一个神经网络&#xff08;1&#xff09; 继上一篇文章我们展示了第一个神经网络的完整代码&#xff0c;今天我们来聊聊这个神经网络的模型设计。 这个demo实际上只使用了一个简单的线性模型&#xff1a;y wx b&#xff1b; 手写…

NAS搭建WebDAV服务同步Zotero科研文献

文章目录 一、Zotero安装教程二、群晖NAS WebDAV设置三、Zotero设置四、使用公网地址同步Zotero文献库五、使用永久固定公网地址同步Zotero文献库 Zotero 是一款全能型 文献管理器,可以 存储、管理和引用文献&#xff0c;不但免费&#xff0c;功能还很强大实用。 ​ Zotero 支…

Ps:形状工具 - 描边选项

在形状工具的工具选项栏或“属性”面板中&#xff0c;单击“设置形状描边类型” Set shape stroke type菜单图标可打开“描边选项” Stroke Options面板。 描边预设 Stroke Type 默认列出了实线、虚线和点线三种类型的描边&#xff0c;单击可应用。 自己创建并存储的描边类型&a…

解析神器Xpath详解+实战

解析神器Xpath详解实战 有同学说&#xff0c;我正则用的不好&#xff0c;处理HTML文档很累&#xff0c;有没有其他的方法&#xff1f; 有&#xff01;那就是XPath&#xff0c;我们可以先将 HTML文件 转换成 XML文档&#xff0c;然后用 XPath 查找 HTML 节点或元素。 目标&am…

智能优化算法应用:基于动物迁徙算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于动物迁徙算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于动物迁徙算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.动物迁徙算法4.实验参数设定5.算法结果6.…

Text2SQL学习整理(一) 综述

数据库由一张或多张表格构成&#xff0c;表格之间的关系通过共同的列&#xff08;外键&#xff09;关联&#xff0c;人们使用数据库来方便的记录和存储信息。SQL是广泛应用的关系型数据库查询语言&#xff0c;但是对于普通用户而言&#xff0c;编写SQL语句有一定的难度。 Text…

python蓝桥杯的回形取数

#来源于蓝桥杯的训练 题号是用户登录https://www.lanqiao.cn/problems/1517/learning/?page1&first_category_id1&problem_id1517 根据题目描述可以知道&#xff0c;我们传入的是一个矩阵。 在这里我们使用列表来实现矩阵。 那么&#xff0c;我们直接看代码 dir …

基于Springboot的高校教学评价系统的设计与实现(源码+调试)

项目描述 临近学期结束&#xff0c;还是毕业设计&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。今天给大家介绍一篇基于Springboot的高校教…

Intellij IDEA 运行maven报错误“CreateProcess error=2, 系统找不到指定的文件“的完美解决方案

一、问题背景 博主正常使用着Intellij IDEA&#xff0c;不知道为什么突然Intellij IDEA报错&#xff0c;错误提示如下&#xff1a; Error:Cannot run program "C:\Program Files\Java\jdk1.8.0_351" 观察Intellij IDEA报错的原因&#xff0c;我们可以知道&#xff1…

语音指令控制坦克大战

前言 本文将介绍一个可以通过语音指令来控制坦克大战游戏的程序&#xff0c;用户只需要添加几个疾病区然后控制坦克进行向上、向下、向左、向右、开火、停止等操作。同时还支持指令微调、提高指令的准确率。 安装项目环境 本项目开发换为&#xff1a; Anaconda 3Windows 11…

[LeetCode周赛复盘] 第 376 场周赛20231217

[LeetCode周赛复盘] 第 376 场周赛20231217 一、本周周赛总结100149. 找出缺失和重复的数字![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/347f99d7222f4b8a9c9b14fdff240e4d.png)2. 思路分析3. 代码实现 100161. 划分数组并满足最大差限制1. 题目描述2. 思路分析…

会 C# 应该怎么学习 C++?

会 C# 应该怎么学习 C&#xff1f; 在开始前我有一些资料&#xff0c;是我根据自己从业十年经验&#xff0c;熬夜搞了几个通宵&#xff0c;精心整理了一份「C的资料从专业入门到高级教程工具包」&#xff0c;点个关注&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&a…

Linux高级系统编程-MySQL数据库基本使用语法

DDL:数据定义语言 作用 : 用于完成对数据库对象&#xff08;数据库、数据表、视图、索引等&#xff09;的创建、删除、修改 数据库操作 查询数据库 - > 显示当前 mysql 中的数据库列表 > show databases; - > 显示指定名称的数据的创建的 SQL 指令 > show c…

微信 小程序 在电脑PC端无法加载的解决办法。电脑微信小程序打不开是怎么回事?电脑微信小程序不能打开解决方法教学

一、电脑微信小程序打不开或者一直在加载的原因&#xff1f; 1、电脑端微信版本未更新 微信版本未及时更新&#xff0c;也会影响小程序的正常打开&#xff0c;可以尝试更新版本。 2、缓存过多 如果电脑缓存文件过多&#xff0c;内存少&#xff0c;也可能导致小程序无法流畅…

探秘 AJAX:让网页变得更智能的异步技术(上)

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

1241. 外卖店优先级(蓝桥杯/暴力/优化--暴力遍历 VS 根据输入遍历)

题目&#xff1a; 1241. 外卖店优先级 - AcWing题库 数据范围 1≤N,M,T≤1051≤&#xfffd;,&#xfffd;,&#xfffd;≤105, 1≤ts≤T1≤&#xfffd;&#xfffd;≤&#xfffd;, 1≤id≤N1≤&#xfffd;&#xfffd;≤&#xfffd; 输入样例&#xff1a; 2 6 6 1 1 5…

低代码是什么?可能取代人工吗?

低代码开发是近年来迅速崛起的软件开发方法&#xff0c;让编写应用程序变得更快、更简单。有人说它是美味的膳食&#xff0c;让开发过程高效而满足&#xff0c;但也有人质疑它是垃圾食品&#xff0c;缺乏定制性与深度。你认为低代码到底是美味的膳食还是垃圾食品呢&#xff0c;…