当前位置: 首页 > news >正文

【Docker】Docker网络及容器间通信详解

目录

背景

默认网络

1、bridge 网络模式

2、host 网络模式

3、none 网络模式

4、container 网络模式

自定义网络

容器间网络通信

IP通信

Docker DNS server

Joined容器


前言

本实验通过docker DNS server和joined 容器两种方法实现Docker容器间的通信。Docker容器间通信可用于监控其他容器的网络流量、不同容器中程序如web server和app server的高效通信等场景。通过实验进一步熟悉Docker的架构和基本操作,了解Docker容器间通信的方式。

背景

当项目大规模使用 Docker 时,容器通信的问题也就产生了。要解决容器通信问题,必须先了解很多关于网络的知识。Docker 作为目前最火的轻量级容器技术,有很多令人称道的功能,也有着很多不完善的地方,网络方面就是 Docker 比较薄弱的部分。因此,我们有必要深入了解 Docker 的网络知识,以满足更高的网络需求。

默认网络

安装 Docker 以后,会默认创建三种网络,可以通过 docker network ls 查看。

image.png

我们有必要先来了解一下这几种网络模式都是什么意思。

网络模式参数说明
host模式-net=host容器和宿主机共享 Network namespace。
container模式–net=container:NAME_or_ID容器和另外一个容器共享 Network namespace。 kubernetes 中的pod就是多个容器共享一个 Network namespace。
none模式–net=none容器有独立的Network namespace,但并没有对其进行任何网络设置,如分配 veth pair 和网桥连接,配置IP等。
bridge模式–net=bridge默认为该模式,通过 -p 指定端口映射。

1、bridge 网络模式

在该模式中,Docker 守护进程创建了一个虚拟以太网桥 docker0,新建的容器会自动桥接到这个接口,附加在其上的任何网卡之间都能自动转发数据包。

默认情况下,守护进程会创建一对对等虚拟设备接口 veth pair,将其中一个接口设置为容器的 eth0 接口(容器的网卡),另一个接口放置在宿主机的命名空间中,以类似 vethxxx 这样的名字命名,从而将宿主机上的所有容器都连接到这个内部网络上。

比如运行一个基于 busybox 镜像构建的容器 bbox01,查看 ip addr:

busybox是一个软件工具箱,集成了linux中几百个常用的linux命令以及工具。

docker run -it --name bbox01 busybox

其中:

-i:以交互模式运行容器,通常与 -t 同时使用,表示开启了input功能

-t:为容器重新分配一个伪输入终端,通常与-i同时使用,表示开启了连接容器里的terminal(终端)

-d:指定容器在后台运行

image.png

然后宿主机通过 ip addr 可以发现:守护进程会创建一对对等虚拟设备接口 veth pair,将其中一个接口设置为容器的 eth0 接口(容器的网卡),另一个接口放置在宿主机的命名空间中,以类似 vethxxx 这样的名字命名。

image.png

同时,守护进程还会从网桥 docker0 的私有地址空间中分配一个 IP 地址和子网给该容器,并设置 docker0 的 IP 地址为容器的默认网关。也可以安装 yum install -y bridge-utils 以后,通过 brctl show 命令查看网桥信息。

yum install -y bridge-utils

image.png

对于每个容器的 IP 地址和 Gateway 信息,我们可以通过 docker inspect 容器名称|ID 进行查看,在 NetworkSettings 节点中可以看到详细信息。

image.png

我们可以通过 docker network inspect bridge 查看所有 bridge 网络模式下的容器,在 Containers 节点中可以看到容器名称。

docker network inspect bridge

image.png

关于 bridge 网络模式的使用,只需要在创建容器时通过参数 --net bridge 或者 --network bridge 指定即可,当然这也是创建容器默认使用的网络模式,也就是说这个参数是可以省略的。

image.png

Bridge 桥接模式的实现步骤主要如下:

  • Docker Daemon 利用 veth pair 技术,在宿主机上创建一对对等虚拟网络接口设备,假设为 veth0 和 veth1。而veth pair 技术的特性可以保证无论哪一个 veth 接收到网络报文,都会将报文传输给另一方。

  • Docker Daemon 将 veth0 附加到 Docker Daemon 创建的 docker0 网桥上。保证宿主机的网络报文可以发往 veth0;

  • Docker Daemon 将 veth1 添加到 Docker Container 所属的 namespace 下,并被改名为 eth0。如此一来,宿主机的网络报文若发往 veth0,则立即会被 Container 的 eth0 接收,实现宿主机到 Docker Container 网络的联通性;同时,也保证 Docker Container 单独使用 eth0,实现容器网络环境的隔离性。

2、host 网络模式

  • host 网络模式需要在创建容器时通过参数 --net host 或者 --network host 指定;

  • 采用 host 网络模式的 Docker Container,可以直接使用宿主机的 IP 地址与外界进行通信,若宿主机的 eth0 是一个公有 IP,那么容器也拥有这个公有 IP。同时容器内服务的端口也可以使用宿主机的端口,无需额外进行 NAT 转换;

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

比如我基于 host 网络模式创建了一个基于 busybox 镜像构建的容器 bbox02,查看 ip addr:

docker run -it --name bbox02 --net host busybox

image.png

然后宿主机通过 ip addr 查看信息如下:

image.png

返回信息一模一样,我们可以通过 docker network inspect host 查看所有 host 网络模式下的容器,在 Containers 节点中可以看到容器名称。

docker network inspect host

3、none 网络模式

none 网络模式是指禁用网络功能,只有 lo 接口 local 的简写,代表 127.0.0.1,即 localhost 本地环回接口。在创建容器时通过参数 --net none 或者 --network none 指定;

none 网络模式即不为 Docker Container 创建任何的网络环境,容器内部就只能使用 loopback 网络设备,不会再有其他的网络资源。可以说 none 模式为 Docke Container 做了极少的网络设定,但是俗话说得好“少即是多”,在没有网络配置的情况下,作为 Docker 开发者,才能在这基础做其他无限多可能的网络定制开发。这也恰巧体现了 Docker 设计理念的开放。

比如基于 none 网络模式创建了一个基于 busybox 镜像构建的容器 bbox03,查看 ip addr:

docker run -it --name bbox03 --net none busybox

image.png

我们可以通过 docker network inspect none 查看所有 none 网络模式下的容器,在 Containers 节点中可以看到容器名称。

docker network inspect none

4、container 网络模式

Container 网络模式是 Docker 中一种较为特别的网络的模式。在创建容器时通过参数 --net container:已运行的容器名称|ID 或者 --network container:已运行的容器名称|ID 指定;

处于这个模式下的 Docker 容器会共享一个网络栈,这样两个容器之间可以使用 localhost 高效快速通信。

Container 网络模式即新创建的容器不会创建自己的网卡,配置自己的 IP,而是和一个指定的容器共享 IP、端口范围等。同样两个容器除了网络方面相同之外,其他的如文件系统、进程列表等还是隔离的。

基于容器 bbox01 创建了 container 网络模式的容器 bbox04,查看 ip addr:

docker run -it --name bbox04 --net container:bbox01 busybox

image.png

容器 bbox01 的 ip addr 信息如下:

image.png

宿主机的 ip addr 信息如下:

image.png

通过以上测试可以发现,Docker 守护进程只创建了一对对等虚拟设备接口用于连接 bbox01 容器和宿主机,而 bbox04 容器则直接使用了 bbox01 容器的网卡信息。

这个时候如果将 bbox01 容器停止,会发现 bbox04 容器就只剩下 lo 接口了。

image.png

然后 bbox01 容器重启以后,bbox04 容器也重启一下,就又可以获取到网卡信息了。

image.png

自定义网络

虽然 Docker 提供的默认网络使用比较简单,但是为了保证各容器中应用的安全性,在实际开发中更推荐使用自定义的网络进行容器管理,以及启用容器名称到 IP 地址的自动 DNS 解析。

从 Docker 1.10 版本开始,docker daemon 实现了一个内嵌的 DNS server,使容器可以直接通过容器名称通信。方法很简单,只要在创建容器时使用 --name 为容器命名即可。

【说明】 Docker DNS 限制:只能在 user-defined 网络中使用。也就是说,默认的 bridge 网络是无法使用 DNS 的,所以我们就需要自定义网络。

通过 docker network create 命令可以创建自定义网络模式

进一步查看 docker network create 命令使用详情,发现可以通过 --driver 指定网络模式且默认是 bridge 网络模式,提示如下:

image.png

创建一个基于 bridge 网络模式的自定义网络模式 custom_network,完整命令如下:

docker network create custom_network

image.png

通过 docker network ls 查看网络模式:

docker network ls

image.png

通过自定义网络模式 custom_network 创建容器:

docker run -di --name bbox08 --net custom_network busybox

image.png

通过 docker inspect 容器名称|ID 查看容器的网络信息,在 NetworkSettings 节点中可以看到详细信息。

docker inspect  bbox08

image.png

接下来通过 docker network connect 网络名称 容器名称 为容器连接新的网络模式。

docker network connect bridge bbox08

通过 docker inspect 容器名称|ID 再次查看容器的网络信息,多增加了默认的 bridge。

image.png

通过 docker network disconnect 网络名称 容器名称 命令断开网络。

docker network disconnect custom_network bbox08

image.png

通过 docker inspect 容器名称|ID 再次查看容器的网络信息,发现只剩下默认的 bridge。

image.png

可以通过 docker network rm 网络名称 命令移除自定义网络模式,网络模式移除成功会返回网络模式名称。

docker network rm custom_network

image.png

容器间网络通信



通常,容器间的通信方式有以下三种:

  • IP通信

  • Docker DNS server

  • Joined容器


IP通信

当docker容器启动的时候,docker会默认给当前容器被分配一个随机的ip。需要分别进入两个容器,通过容器的本地host文件,查看两个容器自身的ip,再经过指定后进行互通。采用IP通信的前提是两个容器必须要属于同一个网络的网卡,但是因为部署过后再指定应用的ip很麻烦,所以ip通信方式就不再过多赘述。


Docker DNS server

Docker DNS Server 是 Docker 容器运行时环境中的一种内置 DNS 服务器。它提供容器间的域名解析服务,使得容器可以通过域名进行网络通信,而无需关注底层的 IP 地址和网络配置。

Docker DNS Server 的主要特点和工作原理如下:

(1)内置 DNS 服务器:Docker 在创建容器时会在每个容器上运行一个内置的 DNS 服务器,该服务器负责处理容器内部的域名解析请求。DNS 服务器默认监听在容器的 loopback 网络接口上。

(2)自动解析容器名:Docker DNS Server 使用容器名作为域名的一部分,因此容器可以通过使用其他容器的名称来访问对应的服务。例如,一个名为 web 的容器可以通过将其他容器的域名设置为 http://XXXXX.com 来访问该服务。

(3)容器间通信:当一个容器需要与另一个容器进行通信时,它可以使用目标容器的名称作为域名进行解析。Docker DNS Server 会将容器名解析为容器的 IP 地址,并将通信请求转发给目标容器。

(4)自动更新记录:当容器创建、销毁或重新调度时,Docker DNS Server 会自动更新容器名与 IP 地址之间的映射关系。这样可以确保容器名始终能够正确解析到对应的 IP 地址。

(5)自定义网络:Docker 允许创建自定义网络,容器可以加入特定的网络中。在自定义网络中,Docker DNS Server 会为该网络中的所有容器提供域名解析服务,使得容器可以相互之间通过容器名进行通信。


Joined容器

joined 容器可以使两个或多个容器共享一个网络栈,共享网卡和配置信息, joined 容器之间可以通过 127.0.0.1直接通信。当一个容器加入到另一个容器的命名空间中时,它可以访问和共享该容器的网络、文件系统和其他资源。这种容器间的连接方式称为容器的链接(Container Linking)。

下面是 Joined 容器的主要特点和使用方式如下:

(1)共享命名空间:Joined 容器会与目标容器共享相同的网络命名空间,这意味着它们可以直接通过本地的 localhost 地址进行通信。同时,Joined 容器还可以共享其他命名空间,如文件系统、进程等,使得它们能够访问和操作彼此的资源。

(2)便捷的通信机制:通过容器的链接,Joined 容器之间可以通过容器名称进行网络通信。这样可以简化容器间的通信配置,并且无需暴露端口给外部网络。

(3)灵活的应用部署:将容器加入到另一个容器中,可以方便地将多个容器组合成一个应用程序的部署单元。这种方式允许开发者以模块化的方式构建和管理复杂的应用程序。

看完这些介绍,接下来我们首先明确一点,容器之间要互相通信,必须要有属于同一个网络的网卡。

我们先创建两个基于默认的 bridge 网络模式的容器。

docker run -di --name default_bbox01 busybox
docker run -di --name default_bbox02 busybox

image.png

通过 docker network inspect bridge 查看两容器的具体 IP 信息。

docker network inspect bridge

image.png

然后测试两容器间是否可以进行网络通信。

docker exec -it default_bbox01 ping 172.17.0.3

image.png

经过测试,从结果得知两个属于同一个网络的容器是可以进行网络通信的,但是 IP 地址可能是不固定的,有被更改的情况发生,这时就需要用到DNS server了。

从 Docker 1.10 版本开始,docker daemon 实现了一个内嵌的 DNS server,使容器可以直接通过容器名称通信。方法很简单,只要在创建容器时使用 --name 为容器命名即可。

但是使用 Docker DNS 有个限制:只能在 user-defined 网络中使用。也就是说,默认的 bridge 网络是无法使用 DNS 的,所以我们就需要自定义网络。

先创建自定义网络。

docker network create custom_network

然后创建两个基于自定义网络模式的容器。

docker run -di --name custom_bbox02 --net custom_network busybox
docker run -di --name custom_bbox03 --net custom_network busybox

通过 docker network inspect custom_network 查看两容器的具体 IP 信息。

image.png

然后测试两容器间是否可以进行网络通信,分别使用具体 IP 和容器名称进行网络通信。

docker exec -it custom_bbox02 ping 172.19.0.3

image.png

docker exec -it custom_bbox02 ping custom_bbox03

image.png

经过测试,从结果得知两个属于同一个自定义网络的容器是可以进行网络通信的,并且可以使用容器名称进行网络通信。

那如果此时希望 bridge 网络下的容器可以和 custom_network 网络下的容器进行网络又该如何操作?那就让 bridge 网络下的容器连接至新的 custom_network 网络即可。

docker network connect custom_network default_bbox01

至于最后提到的通过joined 容器通信就是一种基于容器网络(Container Network)实现的方式。通过加入容器的方式,我们可以轻松地实现容器间的通信,而无需依赖外部的网络设备或服务。这种方式适用于需要实现容器间紧密耦合的应用场景,例如一个容器用作数据库服务,另一个容器用作应用程序服务,它们之间需要进行数据交互和通信。

joined 容器可以使两个或多个容器共享一个网络栈,共享网卡和配置信息,joined容器之间可以通过 127.0.0.1直接通信。

创建一个 httpd 容器,名字为 web1

docker run -d -it --name=web1  httpd

image.png

创建一个busybox 容器并通过--network=container:web1指定joined 容器为web1。

docker run -it  --network=container:web1 busybox

image.png

在busybox容器中用 ip a命令查看网络配置信息,然后用命令exit退出。

image.png

进入web1容器:

docker exec -it web1 /bin/bash

image.png

查看web1的网络配置信息,可以看到这里web1容器 和busybox容器的网卡 mac 地址、IP 完全一样,它们共享了相同的网络栈。

image.png

相关文章:

【Docker】Docker网络及容器间通信详解

目录 背景 默认网络 1、bridge 网络模式 2、host 网络模式 3、none 网络模式 4、container 网络模式 自定义网络 容器间网络通信 IP通信 Docker DNS server Joined容器 前言 本实验通过docker DNS server和joined 容器两种方法实现Docker容器间的通信。Docker容器间…...

TikTok国际版 使用特网科技Bluestacks模拟器安装方法

特网科技Bluestacks模拟器主机 桌面自带Bluestacks模拟器 TikTok国际版Bluestacks模拟器搜索tiktot 登录google应用商店-安装TikTok 安装过程可能需要3-5分钟不等-配置过低可能会导致安装失败,建议升级更高内存。 安装完成-打开 安装成功APP-我的游戏查看 打开国际版…...

【Hello Algorithm】暴力递归到动态规划(四)

动态规划的数组压缩技巧 - 机器人走格子问题 题目是leetcode62题目原题 表示如下 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中…...

arm day 8

arm 写一段按键中断代码 main.c #include "uart.h" #include "key_it.h" int main() {char c;char *s;uart4_init();//串口初始化//中断初始化key_it_config();while(1){//保证主程序不结束}return 0; } src/key_it.c #include"key_it.h"voi…...

k8s-14 存储之volumes

Volumes配置管理 容器中的文件在磁盘上是临时存放的,这给容器中运行的特殊应用程序带来一些问题。首先,当容器崩溃时,kubelet 将重新启动容器,容器中的文件将会丢失因为容器会以干净的状态重建。其次,当在一个 Pod 中…...

二分图博弈

一张二分图,Alice和Bob每人走一步,不能重复走,谁不能走谁输 结论:若存在最大匹配不包含初始点,则Bob赢,否则Alice赢 以上图为例,红色为最大匹配。 首先对于Alice第一步只能走黑边。而Alice无论…...

【C++】C++11—— 包装器

​ ​📝个人主页:Sherry的成长之路 🏠学习社区:Sherry的成长之路(个人社区) 📖专栏链接:C学习 🎯长路漫漫浩浩,万事皆有期待 上一篇博客:【C】C11…...

LED显示屏高刷新率和低刷新率有什么区别

LED显示屏的刷新率是指图像在LED显示屏上更新的速度,也即屏幕上的图像每秒钟出现的次数,它的单位是赫兹(Hz)。LED显示屏的刷新率越高,图像闪烁感就越小,稳定性也就越高,换言之对视力的保护也越好…...

国际伦敦银点差费值得吗?

伦敦银是国际轨技术属市场上广受追捧的白银保证金交易品种,具有交易时长、交易制度灵活、资金利用率高等诸多的优点。 国际伦敦银的优势主要来自它所实行的是保证金交易制度。目前香港平台一般执行的保证金比例标准是2%,以目前22美元/盎司左右的白银价格…...

常见的作物模型应用技巧!DSSAT模型、APSIM模型、WOFOST模型与PCSE模型等应用

①最新DSSAT作物模型建模方法及应用 DSSAT模型内核算法是基于Fortran语言开发的,软件界面是基于C进行开发。了解和熟悉DSSAT模型的关键算法和软件的操作是学习DSSAT模型的基础。此外,想要成为一名优秀的作物模型使用者与科研团队不可或缺的人才&#xff…...

2023年中国超硬材料制品分析及超硬刀具市场规模分析[图]

超硬材料是指硬度特别高的材料,可分为天然以及人造两种,前者主要包括天然的钻石(金刚石)、黑钻石,后者则包括人造金刚石、立方氮化硼。 超硬材料制品分类 资料来源:共研产业咨询(共研网&#x…...

使用React、Express实现一个问卷发布/收集系统

1. 设置项目结构 questionnaire-system/client/ // 前端应用src/components/ // React组件pages/ // 页面App.jsindex.jsserver/ // 后端服务routes/ // 路由models/ // 数据模型app.jspackage.json2. 启动前端应用…...

DDD之上下文映射图(Context Mapping)

领域驱动设计系列文章,点击上方合集↑ 1. 开头 在DDD中,限界上下文与限界上下文之间需要相互集成,这种集成关系在DDD中称为上下文映射(Context Mapping),也就是子域与子域之间的集成关系。 所以首先我们…...

CountDownLatch的原理

使用CountDownLatch可以实现等待多个线程执行完毕的功能,实现线程之间的协调,让它们按照我们期望的顺序执行,从而避免了可能出现的并发问题。 CountDownLatch是如何实现主线程等待子线程全部结束的呢? 代码用例 这里我们使用一段…...

Java新特性Stream流详解

一、概述 Stream流是Java 8 API添加的一个新的抽象,以一种声明性方式处理数据集合(侧重对于源数据计算能力的封装,并且支持序列与并行两种操作方式)。 Stream流是对集合(Collection)对象功能的增强&#xf…...

关于VScode中一些常用的快捷操作!

vscode CTRLO:打开文件夹以开始工作 先CTRLK 再CTRLO:打开文件夹以开始工作 如何选择workspace:file → open folder→选目标文件夹【当前工作区选择会影响代码是否能运行】 如何打开终端:View → terminal debug看不到变化历史&…...

Django 使用Mysql数据库

目录 Django 使用Mysql数据库本地安装Mysql数据服务安装好Pymysql服务Django配置数据库迁移各种报错无法找到mysqlclient数据库拒绝连接 Django 使用Mysql数据库 本地安装Mysql数据服务 安装好Pymysql服务 python3 -m pip install PyMySQL官方文档介绍 Django配置 官网文档 …...

js继承的几种方式(原型链继承、构造函数继承、组合式继承、寄生组合式继承、ES6的Class类继承)

1.原型链继承 实现原理:子类的原型指向父类实例。子类在自身实例上找不到属性和方法时去它父类实例(父类实例和实例的原型对象)上查找,从而实现对父类属性和方法的继承 缺点: 子类创建时不能传参(即没有…...

AnyTransition/过渡动画, MatchedGeometryEffect/匹配几何动画效果 的使用

1. AnyTransition 过渡动画效果 1.1 创建过度动画案例 AnyTransitionBootcamp.swift import SwiftUI/// 旋转修饰 View struct RotateViewModifier :ViewModifier{let rotation: Doublefunc body(content: Content) -> some View {content.rotationEffect(Angle(degrees: r…...

mac版postman升级后数据恢复办法

postman升级了一下,所有的collections都丢失了。 首先在finder里找到这个路径 /Users/{用户名}/Library/Application Support/Postman找到升级之前的的最新的backup.json,然后在postman里import这个文件。 所有升级前的collections都恢复了&#xff0…...

OpenLayers 可视化之热力图

注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 热力图(Heatmap)又叫热点图,是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...

Day131 | 灵神 | 回溯算法 | 子集型 子集

Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣(LeetCode) 思路: 笔者写过很多次这道题了,不想写题解了,大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...

大数据学习(132)-HIve数据分析

​​​​🍋🍋大数据学习🍋🍋 🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言&#x1f4…...

均衡后的SNRSINR

本文主要摘自参考文献中的前两篇,相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程,其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt​ 根发送天线, n r n_r nr​ 根接收天线的 MIMO 系…...

Typeerror: cannot read properties of undefined (reading ‘XXX‘)

最近需要在离线机器上运行软件,所以得把软件用docker打包起来,大部分功能都没问题,出了一个奇怪的事情。同样的代码,在本机上用vscode可以运行起来,但是打包之后在docker里出现了问题。使用的是dialog组件,…...

JAVA后端开发——多租户

数据隔离是多租户系统中的核心概念,确保一个租户(在这个系统中可能是一个公司或一个独立的客户)的数据对其他租户是不可见的。在 RuoYi 框架(您当前项目所使用的基础框架)中,这通常是通过在数据表中增加一个…...

论文笔记——相干体技术在裂缝预测中的应用研究

目录 相关地震知识补充地震数据的认识地震几何属性 相干体算法定义基本原理第一代相干体技术:基于互相关的相干体技术(Correlation)第二代相干体技术:基于相似的相干体技术(Semblance)基于多道相似的相干体…...

基于Java+MySQL实现(GUI)客户管理系统

客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息,对客户进行统一管理,可以把所有客户信息录入系统,进行维护和统计功能。可通过文件的方式保存相关录入数据,对…...

接口自动化测试:HttpRunner基础

相关文档 HttpRunner V3.x中文文档 HttpRunner 用户指南 使用HttpRunner 3.x实现接口自动化测试 HttpRunner介绍 HttpRunner 是一个开源的 API 测试工具,支持 HTTP(S)/HTTP2/WebSocket/RPC 等网络协议,涵盖接口测试、性能测试、数字体验监测等测试类型…...

系统掌握PyTorch:图解张量、Autograd、DataLoader、nn.Module与实战模型

本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文通过代码驱动的方式,系统讲解PyTorch核心概念和实战技巧,涵盖张量操作、自动微分、数据加载、模型构建和训练全流程&#…...