Docker网络原理及案例详解

文章目录

      • 简介
      • 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和域名都能通)

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

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

相关文章

详细了解G1、了解G1、G1垃圾收集器详解、G1垃圾回收器简单调优

4.详细了解G1&#xff1a; 4.1.一&#xff1a;什么是垃圾回收 4.2.了解G1 4.3.G1 Yong GC 4.4.G1 Mix GC 4.5.三色标记算法 4.6.调优实践 5.G1垃圾收集器详解 5.1.G1垃圾收集器 5.2.G1的堆内存划分 5.3.G1的运行过程 5.4.三色标记 5.4.1.漏标问题 5.5.记忆集与卡表 5.6.安全点与…

iconfont 图标在vue里的使用

刚好项目需要使用一个iconfont的图标&#xff0c;所以记录一下这个过程 1、iconfont-阿里巴巴矢量图标库 这个注册一个账号&#xff0c;以便后续使用下载代码时需要 2、寻找自己需要的图标 我主要是找两个图标 &#xff0c;一个加号&#xff0c;一个减号&#xff0c;分别加入到…

Python爬虫实战案例——第二例

某某美剧剧集下载(从搜索片名开始) 本篇文章主要是为大家提供某些电影网站的较常规的下载电影的分析思路与代码思路(通过爬虫下载电影)&#xff0c;我们会从搜索某部影片的关键字开始直到成功下载某一部电影。 地址&#xff1a;aHR0cHM6Ly93d3cuOTltZWlqdXR0LmNvbS9pbmRleC5od…

基于全新电脑环境安装pytorch的GPU版本

前言&#xff1a; 距离第一次安装深度学习的GPU环境已经过去了4年多&#xff08;当时TensorFlow特别麻烦&#xff09;&#xff0c;现在发现安装pytorch的GPU版本还是很简单方便的&#xff0c;流程记录如下。 安装步骤&#xff1a; 步骤一&#xff1a;官网下载Anaconda Free…

局域网中电脑共享文件给手机

学习资源&#xff1a; 局域网共享&#xff1a;这样设置&#xff0c;你可以轻松拷贝任何电脑的文件。_哔哩哔哩_bilibili 可以实现什么效果&#xff1f; 连接同一个WIFI&#xff0c;电脑端为服务端&#xff0c;提供共享文件&#xff0c;手机是客户端&#xff0c;可以读取服务端…

C语言——指针进阶(一)

目录 ​编辑 一.字符指针 1.1 基本概念 1.2 面试题 二.指针数组 三.数组指针 3.1 数组指针的定义 3.2 &数组名VS数组名 3.3 数组指针的使用 四.数组参数、指针参数 4.1 一维数组传参 ​编辑 4.2 二维数组传参 4.3 一级指针传参 4.4 二级指针传参 ​编辑 五.…

windows系统 Fooocus 图片生成模型 ,4-6GB显存即可玩,27S/p

安装步骤: 1.下载程序代码框架,大小2GB ,下载 ​​​​​​https://github.com/lllyasviel/Fooocus/releases/download/1.0.35/Fooocus_win64_1-1-1035.7z 2.下载模型文件sd_xl_base_1.0_0.9vae.safetensors ,大小6GBhttps://huggingface.co/stabilityai/stable-diffusion-x…

软件配置安装(破解)--- maven下载配置

检查环境是否已有 首先检查一下电脑里有无maven环境&#xff0c;有的话就不用安装了 查看path环境中没有maven&#xff0c;开始准备接下来的重头戏 下载maven 下载bin.zip版 解压mavenxxxbin.zip &#xff08;建议把解压的文件放在一个文件夹内&#xff0c;命名英文的env…

利用敏捷开发工具实现敏捷项目管理的实践经验分享

Scrum中非常强调公开、透明、直接有效的沟通&#xff0c;这也是“可视化的管理工具”在敏捷开发中如此重要的原因之一。通过“可视化的管理工具”让所有人直观的看到需求&#xff0c;故事&#xff0c;任务之间的流转状态&#xff0c;可以使团队成员更加快速适应敏捷开发流程。 …

8.缓冲区管理

第五章 I/O管理 缓冲区管理 双缓冲区&#xff1a;T<CM 假设初始状态缓冲区1满&#xff0c;缓冲区2空&#xff0c;工作区为空。 刚开始缓冲区2为空&#xff0c;所以设备可以向缓冲区2中冲入数据耗时T&#xff0c;另一方面刚开始缓冲区1中是满的&#xff0c;所以刚开始就可…

前端vue3+typescript架构

1、vue creat 项目名称 选择自定义 选择需要的依赖 选择vue3 一路enter&#xff0c;选择eslistprettier 继续enter&#xff0c;等待安装 按步骤操作&#xff0c;项目启动成功 2、vscode安装5款插件 2、代码保存自动格式化&#xff0c;保证每个开发人员代码一致&#xff0c;根目…

LeetCode 周赛上分之旅 #42 当 LeetCode 考树上倍增,出题的趋势在变化吗

⭐️ 本文已收录到 AndroidFamily&#xff0c;技术和职场问题&#xff0c;请关注公众号 [彭旭锐] 和 BaguTree Pro 知识星球提问。 学习数据结构与算法的关键在于掌握问题背后的算法思维框架&#xff0c;你的思考越抽象&#xff0c;它能覆盖的问题域就越广&#xff0c;理解难度…

DevOps系列文章 之 Python基础

字符串 定义字符串 1.python中字符串被定义为引号之间的字符集合 2.python支持使用成对的单引号或双引号 3.无论单引号&#xff0c;还是双引号&#xff0c;表示的意义相同 4.python还支持三引号&#xff08;三个连续的单引号或者双引号&#xff09;&#xff0c;可以用来包含特…

【Linux】深入理解文件操作

文章目录 初次谈论文件重温C语言文件操作系统文件操作接口openwriteread 再次谈论文件文件描述符文件描述符的分配规则 重定向什么是重定向重定向的本质系统调用接口实现重定向<、>、>> 初次谈论文件 开始之前先谈论一下关于文件的一些共识性问题。 一个文件可以…

http协议与apache

http概念&#xff1a; 互联网&#xff1a;是网络的网络&#xff0c;是所有类型网络的母集 因特网&#xff1a;世界上最大的互联网网络。即因特网概念从属于互联网概念 万维网&#xff1a;万维网并非某种特殊的计算机网络&#xff0c;是一个大规模的、联机式的信息贮藏库&…

SpringCloud Alibaba实战和源码(7)Skywalking

什么是SkyWalking Skywalking是由国内开源爱好者吴晟开源并提交到Apache孵化器的产品&#xff0c;它同时吸收了Zipkin /Pinpoint /CAT 的设计思路。特点是&#xff1a;支持多种插件&#xff0c;UI功能较强&#xff0c;支持非侵入式埋点。目前使用厂商最多&#xff0c;版本更新较…

keepalived+lvs+nginx高并发集群

keepalivedlvsnginx高并发集群 简介&#xff1a; keepalivedlvsnginx高并发集群&#xff0c;是通过LVS将请求流量均匀分发给nginx集群&#xff0c;而当单机nginx出现状态异常或宕机时&#xff0c;keepalived会主动切换并将不健康nginx下线&#xff0c;维持集群稳定高可用 1.L…

【Java】Java基础

环境准备 安装JDK和JRE 下载JDK&#xff0c;可以在官网Java Downloads | Oracle 中国下载&#xff0c;但是这里需要注册才能够下载。在Index of java-local/jdk (huaweicloud.com)也可以下载到&#xff0c;但是版本比较老&#xff0c;关系不大&#xff0c;直接下载&#xff0…

node-red - 读写操作redis

node-red - 读写操作redis 一、前期准备二、node-red安装redis节点三、node-red操作使用redis节点3.1 redis-out节点 - 存储数据到redis3.2 redis-in节点 - 查询redis数据 附录附录1&#xff1a;redis -out节点示例代码附录2&#xff1a;redis -in节点示例代码 一、前期准备 安…

On-Manifold Optimization: Local Parameterization

Overview Manifold Space vs Tangent Space Jacobian w.r.t Error State Jacobian w.r.t Error State vs True State According 1 2.4, The idea is that for a x ∈ N x \in N x∈N the function g ( δ ) : f ( x ⊞ δ ) g(\delta) : f (x \boxplus \delta) g(δ):f(x…