Docker网络原理及案例详解

news2024/11/24 14:00:57

文章目录

      • 简介
      • Docker网络产生的过程
      • Docker network的作用
      • 网络模式
        • 网络模式---bridge
        • 网络模式---host
        • 网络模式---none
      • 自定义网络

简介

Docker网络实现容器之间通信和连接外部网络的功能,主要的网络连接方式有桥接网络(Bridge Network、主机网络(Host Network)、none网络。

Docker网络产生的过程

1.首先我们查看docker不启动的时候 宿主机默认网络情况
在这里插入图片描述
网卡详解:
在安装 Linux 操作系统时,常见的网络接口命名可能包括 ens33、lo 和 virbr0。以下是每个网络接口的简要介绍:

ens33:ens33 是一种命名约定,用于表示以太网接口的网络接口。在不同的系统和配置中,以太网接口的名称可能会有所不同。ens33
通常是物理网卡(例如以太网卡)的默认命名方式,如第三个以太网接口。它用于连接网络,并提供通过以太网进行通信的功能。

lo:lo 是一个特殊的网络接口,代表本地回环接口(Loopback
Interface)。本地回环接口是一个虚拟接口,用于在计算机内部进行数据通信,实现网络上的通信循环。通过 lo
接口发送的数据将在计算机内部回环,不会实际通过网络传输。

virbr0:virbr0 是一种虚拟桥接接口,通常与虚拟化技术(如KVM、VirtualBox等)相关。它是为虚拟机提供网络连接而创建的虚拟网桥。虚拟机可以通过该接口与宿主机和其他虚拟机进行网络通信。virbr0 接口是由主机上的虚拟化软件自动创建和配置的。 这些网络接口在 Linux 操作系统中具有不同的作用,ens33 用于物理网络连接和通信,lo 用于本地回环通信,而 virbr0 是与虚拟机相关的虚拟桥接接口。如安装图形化桌面就会出现virbr0,可以通过yum removelibvirt-libs.x86_64 将其卸载。

  1. Docker启动后,网络情况
    命令:systemctl start docker
    docker启动会产生一个名为docker0的虚拟网桥
    在这里插入图片描述

Docker0的原理和作用如下:

  1. 虚拟网络桥接器:docker0是一个虚拟网络桥接器,它充当主机和Docker容器之间的通信桥梁。它通过将主机上的物理网络接口(如eth0)与容器中的虚拟以太网桥接在一起,使得容器能够通过主机进行网络连接,以及容器之间的网络通信。

  2. IP地址分配:docker0接口将分配给它一个IP地址,通常是172.17.0.1。这个IP地址是用作docker0接口所在的子网网关,容器将通过这个网关访问主机和外部网络。

  3. 默认桥接网络:docker0接口是Docker默认桥接网络的一部分。当你创建一个新的桥接网络时,Docker会自动在主机上创建一个虚拟以太网桥,并将其与docker0接口连接起来。这允许容器通过docker0和其他容器进行通信。

  4. 容器互联:docker0接口还充当了容器互联的中介。容器通过与docker0接口连接,可以实现容器之间的通信。Docker在创建容器时会为每个容器分配一个独立的IP地址,并将其添加到docker0接口中。

总而言之,docker0是一个虚拟网络桥接器,在Docker中起到了连接主机和容器、实现容器间通信的关键作用。通过docker0接口,容器能够访问主机和外部网络,并且容器之间可以通过docker0接口进行通信。

Docker network的作用

  1. 容器间通信:Docker网络允许在同一宿主机上的不同容器之间建立网络连接,容器可以通过网络进行通信和交互。这种容器间的通信可以通过容器名称或IP地址进行。

  2. 与其他服务通信:Docker容器可以与主机上的其他服务(如数据库、缓存等)以及外部网络中的服务进行通信。通过使用Docker网络,容器可以通过网络连接到外部服务,实现与其他服务的交互。

  3. 网络隔离:Docker网络提供了隔离和分割容器的网络环境的机制。每个网络由一个独立的网桥或虚拟网络设备管理,使得容器之间的网络通信与主机或其他容器的网络隔离开来,提供更安全的环境。

说明:
· 容器间的互联和通信以及端口映射
· 容器IP变动时候可以通过服务名直接网络通信而不受到影响
当微服务容器需要访问Mysql容器的时候,如果写死IP访问会有可能会导致微服务连不上数据库因为容器重启、宕机有可能IP会发生变化
在这里插入图片描述

网络模式

常用命令

  1. docker network create:创建一个新的Docker网络。可以指定网络驱动程序、子网、网关等选项进行自定义网络配置。

  2. docker network ls:列出已创建的Docker网络。它将显示网络的ID、名称、驱动程序和作用域。

  3. docker network inspect:检查特定Docker网络的详细信息。可以提供网络的名称或ID作为参数,返回与网络相关的配置和连接信息。

  4. docker network connect:将容器连接到现有的Docker网络。需要指定容器和网络的名称或ID。连接后,容器可以通过网络与其他容器进行通信。

  5. docker network disconnect:断开容器与特定Docker网络的连接。需要指定容器和网络的名称或ID。断开连接后,容器将无法通过该网络与其他容器通信。

  6. docker network rm:删除不再使用的Docker网络。需要指定网络的名称或ID。删除网络前,必须确保没有容器连接到该网络。

  7. docker network prune:清理没有容器连接的所有未使用的Docker网络。可以一次性删除所有未被使用的网络,注意此操作是不可恢复的。

也可以通过docker network --help进行查看
在这里插入图片描述

默认3大网络模式
命令
docker network ls
在这里插入图片描述
Docker网络在容器之间实现通信和连接外部网络的功能。下面是一些常见的Docker网络概念和驱动程序:

  1. 桥接网络(Bridge Network):这是Docker默认的网络模式。每创建一个容器,Docker会在主机上创建一个虚拟网络接口,并为容器分配一个独立的IP地址。
    桥接网络使得容器之间可以通过IP地址进行通信,将容器连接到一个docker0

  2. 主机网络(Host Network):在主机网络模式下,容器与主机共享同一个网络接口。容器可以直接使用主机的IP地址和端口,使得容器的网络性能更高,但也失去了网络隔离的优势。

  3. 没有网络(none):容器独立的Network namespace空间,没有对网络进行设置,如分配veth pair和网络桥接、IP等。容器在此网络中没有网络连接,与宿主机和其他容器完全隔离。它通常用于一些特殊的场景和需求,不适合需要进行网络通信的应用程序。

使用说明

  • bridge模式:使用–network bridge指定,默认使用docker0 ·
  • host模式:使用–networkhost指定 ·
  • none模式:使用–network none指定 · container模式:使用–network
    container:NAME或者容器ID指定

网络模式—bridge

查看 bridge 网络的详细信息,并通过 grep 获取名称项
docker network inspect bridge | grep name
在这里插入图片描述
ifconfig
在这里插入图片描述

Bridge网络原理解析:

  1. Docker使用Linux桥接,在宿主机虚拟一个Docker容器网桥(docker0),Docker启动一个容器时会根据Docker网桥的网段分配给容器一个IP地址,称为Container-IP,同时Docker网桥是每个容器的默认网关。
    因为在同一宿主机内的容器都接入同一个网桥,这样容器之间就能够通过容器的Container-IP直接通信。

  2. docker run 的时候,没有指定network的话默认使用的网桥模式就是bridge,使用的就是docker0。

  3. 网桥docker0创建一对对等虚拟设备接口一个叫veth,另一个叫eth0,成对匹配。

3.1 整个宿主机的网桥模式都是docker0,类似一个交换机有一堆接口,每个接口叫veth,在本地主机和容器内分别创建一个虚拟接口,并让他们彼此联通(这样一对接口叫veth
pair);
3.2 每个容器实例内部也有一块网卡,每个接口叫eth0;
3.3 docker0上面的每个veth匹配某个容器实例内部的eth0,两两配对,一一匹配。 通过上述,将宿主机上的所有容器都连接到这个内部网络上,两个容器在同一个网络下,会从这个网关下各自拿到分配的ip,此时两个容器的网络是互通的。

在这里插入图片描述

两两匹配验证及容器实例内默认网络IP生产规则
案例:启动两个centos实例centos1 centos2
命令

docker run -it -d --name centos1 centos bash
docker run -it -d --name centos2 centos bash

在这里插入图片描述

两两匹配验证
查看宿主机的网卡信息
ip a |tail -n 8
在这里插入图片描述

进入centos1容器查看网络信息
在这里插入图片描述

进入centos2容器查看网络信息
在这里插入图片描述
结论:docker0上面的每个veth匹配某个容器实例内部的eth0,两两配对,一 一匹配。

容器实例内默认网络IP生产规则:
通过docker inspect进行查看centos1、centos2
命令

docker inspect centos1 |grep -A 20 "Networks" 
docker inspect centos2 |grep -A 20 "Networks"

centos1 容器网络信息
网络模式:bridge
Ip:172.17.0.3
在这里插入图片描述
centos12 容器网络信息
网络模式:bridge
Ip:172.17.04
在这里插入图片描述
结论:容器创建时,不指定参数,默认使用bridge网络模式、IP会按顺序分配一个。

网络模式—host

它与默认的桥接(bridge)模式不同,在主机模式下,容器使用与宿主机相同的网络接口和IP地址,因此它们可以直接访问宿主机的网络。

说明
容器将不会获得一个独立的Network Namespace, 而是和宿主机共用一个Network Namespace。容器将不会虚拟出自己的网卡而是使用宿主机的IP和端口。
在这里插入图片描述

案例
运行一个centos容器命名为centos2.1
docker run -d --network host --name centis:2.1 centos

看容器实例内部

docker inspect centos:2.1|tail -n 20

在这里插入图片描述
查看宿主机的网卡信息
在这里插入图片描述
查看centos2.1容器的网络信息
在这里插入图片描述
结论:容器使用与宿主机相同的网络接口和IP地址。

网络模式—none

在 Docker 中,None 网络是一种特殊类型的网络,它表示一个容器没有与其他容器或主机进行网络连接。容器可以通过 None 网络与外部环境通信,但不能与其他容器进行通信。

当使用 None 网络时,容器将完全隔离于网络,并没有网络接口。这意味着容器无法通过网络访问其他容器或外部网络。

使用 None 网络可以实现一些特定的需求,例如:

  1. 隔离容器:如果你希望某个容器与其他容器完全隔离,不涉及任何网络通信,你可以将它连接到 None 网络。

  2. 简化网络配置:当你只需要容器与宿主机进行通信,而无需与其他容器互联时,None 网络是一种简单的方式。容器与宿主机之间的通信在网络层面上正常进行,而容器之间的网络通信则被隔离。

要创建一个使用 None 网络的容器,可以在创建容器时使用 --network=none 参数,示例如下:

docker run --network=none

这将创建一个网络隔离的容器,它没有与其他容器或主机连接的网络接口。

自定义网络

自定义桥接网络,自定义网络默认使用的是桥接网络bridge

创建步骤

1.查看当前的网络模式信息

> docker network ls

2.创建自定义网络:使用 docker network create 命令创建一个自定义网络。

docker network create <network_name>

3.运行容器并连接到自定义网络:在创建容器时,使用 --network 参数将容器连接到自定义网络。

docker run --network=<network_name>

示例:
创建一个网络名为bridge-test的网络 并指定bridge-test参数运行两个容器分别是centos1 centos2。

docker network create bridge-test
在这里插入图片描述

查看是否创建成功
在这里插入图片描述

创建容器centos1 、centos2 并指定网络 bridge-test运行

docker run -d -it --network bridge-test --name centos1 centos docker
run -d -it --network bridge-test --name centos2 centos

在这里插入图片描述
测试:
两个容器之间网络是否能够通信

分别进入容器互相ping
在这里插入图片描述
结论:自定义网络本身就维护好了主机名和ip的对应关系(ip和域名都能通)

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

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

相关文章

【LeetCode75】第三十九题 二叉树的右视图

目录 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 代码&#xff1a; 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 题目给我们一棵二叉树&#xff0c;让我们返回站在二叉树右边从上到下看到的节点。 那实际上就是要我们对二叉树进行层序遍历&#xff0c…

CS144(2023 Spring)Lab 0:networking warmup(环境搭建 webget bytestream)

文章目录 前言其他笔记相关链接 1. Set up GNU/Linux on your computer2. Networking by hand3. Writing a network program using an OS stream socket3.1 Linux配置3.2 C规范3.3 Writing webget3.3.1 实现3.3.2 测试 4. An in-memory reliable byte stream4.1 思路分析4.2 代…

《C和指针》笔记14: 作用域和存储类型总结(例子说明)

文章目录 题目答案解释总结 本文是作用域和存储类型的总结&#xff0c;以一个例子来说明&#xff0c;如果不看解释可以很直接地回答每一条语句的作用域和存储类型&#xff0c;那么说明已经很熟练地掌握这个知识点了。 关于作用域和存储类型可以参考我前面的博客&#xff1a; …

LeetCode-56-合并区间

题目描述&#xff1a; 以数组 intervals 表示若干个区间的集合&#xff0c;其中单个区间为 intervals[i] [starti, endi] 。请你合并所有重叠的区间&#xff0c;并返回 一个不重叠的区间数组&#xff0c;该数组需恰好覆盖输入中的所有区间 。 可以使用 LinkedList&#xff0c;…

Cadence+硬件每日学习十个知识点(46)23.8.26 (运算放大器)

文章目录 1.电压跟随器的输入和输出是一样的&#xff0c;但是输入的是电压带有高阻抗&#xff0c;输出的电压带有低阻抗。2.比较器的迟滞&#xff08;这个电阻&#xff09;3.运放的压摆率4.运放-轨到轨5.输入失调电压Vos&#xff08;选一个低的器件就行&#xff0c;对于5V&…

Batbot电力云平台在智能配电室中的应用

智能配电室管理系统是物联网应用中的底层应用场景&#xff0c;无论是新基建下的智能升级&#xff0c;还是双碳目标下的能源管理&#xff0c;都离不开智能配电运维对传统配电室的智慧改造。Batbot智慧电力&#xff08;运维&#xff09;云平台通过对配电室关键电力设备部署传感器…

【学习笔记】求解线性方程组的G-S迭代法

求解线性方程组的G-S迭代法 // 运行不成功啊function [x,k,index] Gau_Seid(A,b,ep,it_max) % 求解线性方程组的G-S迭代法&#xff0c;其中 % A为方程组的系数矩阵 % b为方程组的右端项 % ep为精度要求&#xff0c;省缺为1e-5 % it_max为最大迭代次数&#xff0c;省缺为100 % …

1. 深度学习介绍

1.1 AI地图 ① 如下图所示&#xff0c;X轴是不同的模式&#xff0c;最早的是符号学&#xff0c;然后概率模型、机器学习。Y轴是我们想做什么东西&#xff0c;感知是我了解这是什么东西&#xff0c;推理形成自己的知识&#xff0c;然后做规划。 ② 感知类似我能看到前面有个屏…

微前端开发

微前端介绍 微前端的概念是由ThoughtWorks在2016年提出的&#xff0c;它借鉴了微服务的架构理念&#xff0c;核心在于将一个庞大的前端应用拆分成多个独立灵活的小型应用&#xff0c;每个应用都可以独立开发、独立运行、独立部署&#xff0c;再将这些小型应用融合为一个完整的…

【大数据】Linkis:打通上层应用与底层计算引擎的数据中间件

Linkis&#xff1a;打通上层应用与底层计算引擎的数据中间件 1.引言2.背景3.设计初衷4.技术架构5.业务架构6.处理流程7.如何支撑高并发8.用户级隔离度和调度时效性9.总结 Linkis 是微众银行开源的一款 数据中间件&#xff0c;用于解决前台各种工具、应用&#xff0c;和后台各种…

【git进阶使用】 告别只会git clone 学会版本控制 ignore筛选 merge冲突等进阶操作

git使用大全 基本介绍git 快速上手一 环境安装&#xff08;默认已安装&#xff09;二 远程仓库克隆到本地1 进入rep文件夹目录2 复制远程仓库地址3 git clone克隆仓库内容到本地4 修改后版本控制4.1 修改文件4.2 git status查看版本库文件状态4.3 git add将文件加入版本库暂存区…

NEOVIM学习笔记

GitHub - blogercn/nvim-config: A pretty epic NeoVim setup 一直使用vim&#xff0c;每次到了新公司都要配置半天&#xff0c;而且常常配置失败&#xff0c;很多插件过期不好用。偶然看到别人的NEO VIM&#xff0c;就试着用了一下&#xff0c;感觉还不错。 用来开发和阅读C代…

使用树莓派Pico、DHT11和SSD1306搭建一个温度湿度计(只使用官方库,以及官方案例代码的错误之处和解决方案)

最近想树莓派 Pico、DHT11 温湿度传感器和 SSD1306 OLED 屏幕做一个温度湿度计&#xff0c;树莓派官方案例也分别有这两个设备的案例&#xff0c;我就想做个简单的温度湿度计作为学习微控制器的开始&#xff0c;结果遇到了一个大坑&#xff0c;所以写本文记录一下整个过程。 本…

[完美解决]Vue项目运行时出现this[kHandle] = new _Hash(algorithm, xofLen)

vue项目运行bug解决办法 一、问题内容二、问题出现的原因三、解决方法1、方法一(推荐)2、方法二(可以解决&#xff0c;但不太推荐) 一、问题内容 在github寻找一些vue项目clone到本地时候&#xff0c;npm i没有问题&#xff0c;但是npm run serve 或者npm run dev的时候会出现…

计算机毕设 基于机器学习的餐厅销量预测 -大数据 python

文章目录 0 前言餐厅销量预测模型简介2.ARIMA模型介绍2.1自回归模型AR2.2移动平均模型MA2.3自回归移动平均模型ARMA 三、模型识别四、模型检验4.1半稳性检验(1)用途(1)什么是平稳序列?(2)检验平稳性 ◆白噪声检验(纯随机性检验)(1)用途(1)什么是纯随机序列?(2)检验纯随机性 五…

LLM本地知识库问答系统(一):使用LangChain和LlamaIndex从零构建PDF聊天机器人指南

随着大型语言模型&#xff08;LLM&#xff09;&#xff08;如ChatGPT和GPT-4&#xff09;的兴起&#xff0c;现在比以往任何时候都更容易构建比普通熊更智能的智能聊天机器人&#xff0c;并且可以浏览堆积如山的文档&#xff0c;为您的输入提供准确的响应。 在本系列中&#xf…

基于微信小程序的汽车租赁系统的设计与实现ljx7y

汽车租赁系统&#xff0c;主要包括管理员、用户二个权限角色&#xff0c;对于用户角色不同&#xff0c;所使用的功能模块相应不同。本文从管理员、用户的功能要求出发&#xff0c;汽车租赁系统系统中的功能模块主要是实现管理员后端&#xff1b;首页、个人中心、汽车品牌管理、…

LAMP介绍与配置

一.LAMP 1.1.LAMP架构的组成 CGI&#xff08;通用网关接口&#xff09;和FastCGI&#xff08;快速公共网关接口&#xff09;都是用于将Web服务器与后端应用程序&#xff08;如PHP、Python等&#xff09;进行交互的协议/接口。 特点 CGI FastCGI 运行方式 每个请求启动…

【C语言】2023.8.27C语言入学考试复盘总结

前言 本篇文章记录的是对于2023年8月27日的 C语言 的入学考试的整理总结 成绩&#xff1a;220/240 题目&#xff1a;9/12 错题整理 首先先对于我没做出来的三道题做一个整理 错题1&#xff1a;7-4 分段函数PLUS 题干 以下是一个二元分段函数&#xff0c;请你根据所给的函…

列式存储引擎-内核机制-Parquet格式

列式存储引擎-内核机制-Parquet格式 Parquet是一种开源的列式存储结构&#xff0c;广泛应用于大数据领域。 1、数据模型和schema Parquet继承了Protocol Buffer的数据模型。每个记录由一个或多个字段组成。每个字段可以是atomic字段或者group字段。Group字段包含嵌套的字段&…