玩转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 1500inet 172.17.0.1  netmask 255.255.0.0  broadcast 172.17.255.255inet6 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 0TX packets 63701  bytes 184086739 (175.5 MiB)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0enp1s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500inet 172.16.49.247  netmask 255.255.252.0  broadcast 172.16.51.255inet6 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 0TX packets 1037423  bytes 347334338 (331.2 MiB)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536inet 127.0.0.1  netmask 255.0.0.0inet6 ::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 0TX packets 166076  bytes 120668074 (115.0 MiB)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0veth3b12615: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500inet6 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 0TX packets 6240  bytes 87300874 (83.2 MiB)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0virbr0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500inet 192.168.122.1  netmask 255.255.255.0  broadcast 192.168.122.255ether 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 0TX 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网络具体怎么配置请自行上网学习。

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

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

相关文章

机器视觉技术与应用实战(Chapter Two-03)

2.5 图像滤波和增强 滤波的作用是&#xff1a;图像中包含需要的信息&#xff0c;也包含我们不感兴趣或需要屏蔽的干扰&#xff0c;去掉这些干扰需要使用滤波。 增强的作用是&#xff1a;通过突出或者抑制图像中某些细节&#xff0c;减少图像的噪声&#xff0c;增强图像的视觉效…

Jenkins----基于 CentOS 或 Docker 安装部署Jenkins并完成基础配置

查看原文 文章目录 基于 CentOS7 系统部署 Jenkins 环境基于 Docker 安装部署 Jenkins环境配置 Jenkins 中文模式配置用户名密码形式的 Jenkins 凭据配置 ssh 私钥形式的 Jenkins 凭据配置 Jenkins 执行任务的节点 基于 CentOS7 系统部署 Jenkins 环境 &#xff08;1&#xff…

使用Nginx实现负载均衡的实践指南

目录 前言1 负载均衡简介2 需要实现的效果3 准备2个tomcat服务器4 配置Nginx实现负载均衡5 Nginx的服务器策略5.1 轮询&#xff08;默认&#xff09;5.2 权重&#xff08;weight&#xff09;5.3 IP哈希&#xff08;ip_hash&#xff09;5.4 响应时间公平分配&#xff08;fair&am…

C# DotNetCore AOP简单实现

背景 实际开发中业务和日志尽量不要相互干扰嵌套&#xff0c;否则很难维护和调试。 示例 using System.Reflection;namespace CSharpLearn {internal class Program{static void Main(){int age 25;string name "bingling";Person person new(age, name);Conso…

Day63力扣打卡

打卡记录 寻找最近的回文数&#xff08;模拟&#xff09; 链接 class Solution:def nearestPalindromic(self, n: str) -> str:m len(n)candidates [10 ** (m - 1) - 1, 10 ** m 1]selfPrefix int(n[:(m 1) // 2])for x in range(selfPrefix - 1, selfPrefix 2):y …

[强网杯 2019]Upload

[强网杯 2019]Upload 开放注册直接注册一个账号然后登录进去 先对页面进行简单文件上传测试发现都不存在漏洞对网站进行目录扫描 发现www.tar.gz 打开发现是tp5框架发现源码 这里如果前面信息收集的完整会发现存在反序列化 对注册&#xff0c;登录&#xff0c;上传文件页面分…

STM32F103RCT6开发板M3单片机教程06--定时器中断

前言 除非特别说明&#xff0c;本章节描述的模块应用于整个STM32F103xx微控制器系列&#xff0c;因为我们使用是STM32F103RCT6开发板是mini最小系统板。本教程使用是&#xff08;光明谷SUN_STM32mini开发板&#xff09; STM32F10X定时器(Timer)基础 首先了解一下是STM32F10X…

时序预测 | Python实现GRU-XGBoost组合模型电力需求预测

时序预测 | Python实现GRU-XGBoost组合模型电力需求预测 目录 时序预测 | Python实现GRU-XGBoost组合模型电力需求预测预测效果基本描述程序设计参考资料预测效果 基本描述 该数据集因其每小时的用电量数据以及 TSO 对消耗和定价的相应预测而值得注意,从而可以将预期预测与当前…

Linux:超级管理员(root用户)创建用户、用户组

root用户&#xff1a; 拥有最大的系统操作权限,而普通用户在许多地方的权限是受限的。 演示&#xff1a; 1、使用普通用户在根目录下创建文件夹&#xff08;失败&#xff09; 2、切换到root用户后&#xff0c;继续尝试&#xff08;成功&#xff09; 3、普通用户的权限&#…

TCP/IP详解——DNS 流量分析

文章目录 1. DNS 流量分析1.1 DNS 基本概念1.2 DNS 系统特性1.3 DNS 效率问题1.4 域名的组成1.5 域名解析系统1.5.1 域名解析过程 1.6 DNS 记录种类1.7 DNS 的报文格式1.7.1 DNS 报文中的基础结构部分1.7.2 DNS 查询报文中的问题部分1.7.3 DNS 响应报文中的资源记录部分1.7.4 示…

【开源项目】WPF 扩展 -- 多画面视频渲染组件

目录 1、项目介绍 2、组件集成 2.1 下载地址 2.2 添加依赖 3、使用示例 3.1 启动动画 3.2 视频渲染 3.3 效果展示 4、项目地址 1、项目介绍 Com.Gitusme.Net.Extensiones.Wpf 是一款 Wpf 扩展组件。基于.Net Core 3.1 开发&#xff0c;当前是第一个发布版本 1.0.0&am…

Java架构师系统架构内部维度分析

目录 1 导语2.1 安全性维度概述2.2 流程安全性2.3 架构安全性2.4 安全维度总结3 伸缩性维度概述和场景思路3.1 无状态应用弹性伸缩3.2 阿里云Knative弹性伸缩3.3 有状态应用弹性伸缩3.4 伸缩性维度总结想学习架构师构建流程请跳转:Java架构师系统架构设计 1 导语

数据仓库与数据挖掘c5-c7基础知识

chapter5 分类 内容 分类的基本概念 分类 数据对象 元组(x,y) X 属性集合 Y 类标签 任务 基于有标签的数据&#xff0c;学习一个分类模型&#xff0c;通过这个分类模型&#xff0c;可以把一组属性x映射到一个特定的类别y上 类别y 提前设定好的--如&#xff1a;学生…

git 切换远程地址分支 推送到指定地址分支 版本回退

切换远程地址 1、切换远程仓库地址&#xff1a; 方式一&#xff1a;修改远程仓库地址 【git remote set-url origin URL】 更换远程仓库地址&#xff0c;URL为新地址。 git remote set-url https://gitee.com/xxss/omj_gateway.git 方式二&#xff1a;先删除远程仓库地址&…

八股文打卡day2——计算机网络(2)

面试题&#xff1a;讲一下三次握手的过程&#xff1f; 我的回答&#xff1a; 1.客户端发送报文段到服务器&#xff0c;主动建立连接。这个报文段中SYN标志位表示&#xff1a;这个报文段是用于连接的&#xff0c;此时SYN标志位设置为1。其中初始序列号字段包含了客户端的初始序…

华为鸿蒙应用--欢迎页SplashPage+倒计时跳过(自适应手机和平板)-ArkTs

鸿蒙ArkTS 开发欢迎页SplashPage倒计时跳过&#xff0c;可自适应平板和手机&#xff1a; 一、SplashPage.ts import { BreakpointSystem, BreakPointType, Logger, PageConstants, StyleConstants } from ohos/common; import router from ohos.router;Entry Component struct…

2023/12/17 初始化

普通变量&#xff08;int,float,double变量&#xff09;初始化&#xff1a; int a0; float b(0); double c0; 数组初始化&#xff1a; int arr[10]{0}; 指针初始化&#xff1a; 空指针 int *pnullptr; 被一个同类型的变量的地址初始化&#xff08;赋值&#xff09; int…

饥荒Mod 开发(十四):制作屏幕弹窗

饥荒Mod 开发(十三)&#xff1a;木牌传送 在上一个文章里面制作了一个传送选择页面&#xff0c;是一个全屏的窗口&#xff0c;那饥荒中如何制作一个全屏的窗口&#xff0c;下面介绍一下如何从零开始制作一个全屏窗口 制作屏幕窗口 饥荒中的全屏窗口都有一个基类 “Screen”,我…

结构型设计模式(一):门面模式 组合模式

门面模式 Facade 1、什么是门面模式 门面模式&#xff08;Facade Pattern&#xff09;是一种结构型设计模式&#xff0c;旨在为系统提供一个统一的接口&#xff0c;以便于访问子系统中的一群接口。它通过定义一个高层接口&#xff0c;简化了客户端与子系统之间的交互&#xf…

优质全套SpringMVC教程

三、SpringMVC 在SSM整合中&#xff0c;MyBatis担任的角色是持久层框架&#xff0c;它能帮我们访问数据库&#xff0c;操作数据库 Spring能利用它的两大核心IOC、AOP整合框架 1、SpringMVC简介 1.1、什么是MVC MVC是一种软件架构的思想&#xff08;不是设计模式-思想就是我们…