Docker 学习笔记(六):挑战容器数据卷技术一文通,实战多个 MySQL 数据同步,能懂会用,初学必备
一、前言
记录时间 [2024-4-11]
系列文章简摘:
Docker学习笔记(二):在Linux中部署Docker(Centos7下安装docker、环境配置,以及镜像简单使用)
Docker 学习笔记(三):Centos7 中 Docker 使用,镜像、容器,以及操作等常用命令小结
Docker 学习笔记(五):梳理 Docker 镜像知识,附带 Commit 方式提交镜像副本,安装可视化面板 portainer
更多 Docker 相关文章请参考上面专栏哦,入门篇 1~5 已完结,接下来是精髓篇:容器数据卷、Dockerfile、Docker 网络。
学习工具包:
- Docker 学习视频
- Docker 官方文档
- Docker 远程仓库
- Linux 云服务器/虚拟机
- FinalShell 远程连接工具
文章内容速览:
本文主要介绍容器数据卷技术,介绍数据卷的两种挂载方式,体验匿名挂载与具名挂载的区别之处,不仅实现了容器与宿主机的数据同步,还实现了多个容器之间的数据同步,具体有:
- 数据卷的两种挂载方式:1. 使用
-v
命令来挂载;2. 使用Dockerfile
构建。 - 如何区分:具名挂载 / 匿名挂载 / 指定路径挂载?
- 数据卷容器(父容器)介绍;
- 容器数据卷实战:MySQL 的安装和数据同步。
关于数据卷技术的小结论:
-
数据卷技术并不是简单的共享,而是拷贝。
-
容器 – 容器:容器之间配置信息的传递,数据卷容器的生命周期一直持续到没有容器使用为止。
-
容器 – 宿主机:一旦数据持久化到了本地,本地的数据是不会删除的。
二、容器数据卷技术介绍
在之前的 Docker 学习中,我们了解到:
- Docker 将应用和环境打包成一个镜像
- Docker 在容器中运行镜像
- Docker 容器之间是互相隔离的
由此引发一个问题:如果容器被删除了,容器中的数据会随之一起丢失怎么办?
数据卷技术恰能解决此问题,实现数据持久化。
通过将容器内的目录挂载到 Linux 上,实现 Docker 容器中产生的数据同步到本地;通过将容器挂载到父容器,实现容器之间的数据共享。
以后修改容器内的配置文件在本地就可以完成,不需要特地进入容器了。
三、命令挂载 / Dockerfile 挂载
数据卷的两种挂载方式:1. 使用
-v
命令来挂载;2. 使用Dockerfile
构建。Dockerfile 方式使用较多,因为经常需要自己构建镜像;若构建镜像时没有挂载卷,则需要手动命令挂载。
1. 使用命令挂载
操作步骤
docker run -it -v 主机目录:容器内目录
测试一下,将 centos
容器的 /home
目录挂载到宿主机的 /home/ceshi
目录
docker run -it -v /home/ceshi:/home centos /bin/bash
启动后通过 inspect
查看详细信息
docker inspect 容器id
查看结果,Mounts
下面就是 -v
命令挂载信息
"Mounts": [{"Type": "bind","Source": "/home/ceshi", # Source 主机内地址"Destination": "/home", # Destination docker 内容器地址"Mode": "","RW": true,"Propagation": "rprivate"}...
]
测试数据卷文件同步
- 容器同步到宿主机;2. 宿主机同步到容器
测试一:容器同步到宿主机
在容器的 /home
文件夹下新建一个测试文件
touch test.java
然后查看宿主机的 /home/ceshi
文件夹
cd /home/ceshi
查看文件目录发现,宿主机的文件夹中同时拷贝了这个测试文件,结果如图所示:
测试二:宿主机同步到容器
停止该容器:
exit
在宿主机上修改这个文件内容,先打开文件,按住 i
键进入修改
# 先打开文件
vim test.java# 按住 i 键进入修改,写入内容
Hello, Linux updated!# 按下 ESC 键,保存文件并退出
:wq
查看之前运行过的容器,获取容器 id
docker ps -a
启动并进入容器:
# 启动容器
docker start 容器id# 进入容器
docker attach 容器id
查看文件内容,发现容器内的数据依旧是同步的。
cat /home/test.java
2. 使用 Dockerfile 构建
Dockerfile 是一个命令脚本,用于构建 Docker 镜像文件。
通过这个脚本可以生成镜像。镜像是一层一层的,脚本是一个一个的命令,所以每个命令都是一层。
在创建镜像之时,就完成了数据卷挂载。
创建 Dockerfile 文件
Dockerfile 文件名可以随意,但是,建议使用 Dockerfile
在 /home
目录下新建 docker-test-volume
文件夹,Dockerfile 在这个文件夹下构建镜像。
新建目录:
mkdir docker-test-volume
cd
进入目录,创建 dockerfile1
文件
vim dockerfile1
写入内容并保存退出
# 文件的内容 指令(大写)+ 参数
# 这里的每个命令,就是镜像的一层# 基于镜像 centos
FROM centos# 数据卷挂载目录,可以写多个
# 这里是匿名挂载
VOLUME ["volume01","volume02"]# 完成后 输出信息
CMD echo "--------end----------"# 进入容器控制台的方式
CMD /bin/bash
查看下文件内容,确定下有没有问题
cat dockerfile1
构建 Docker 镜像
基于 dockerfile1,在当前目录下,生成 1.0 版本的 yuanyuan/centos 镜像。
# 最后的 . 表示 当前目录
docker build -f dockerfile1 -t yuanyuan/centos:1.0 .
构建过程如下:
不难发现,它没有输出完整的构建过程信息,比如 VOLUME,比如 echo,难道是构建有问题?
笔者通过查看镜像,以及镜像元数据发现,数据卷挂载目录写入成功,镜像也完成了创建,构建没有问题。
查看一下刚刚构建的镜像吧
[root@localhost docker-test-volume]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
yuanyuan/centos 1.0 b19d22d998db 2 years ago 231MB
详细构建过程查看
所以是它省略了步骤,那如果要看详细的构建过程,应该如何操作呢?当然是添加参数啦。
- 方法一:
DOCKER_BUILDKIT=0
- 方法二:
--progress=plain
拿上面的构建命令举例,大家可以自行尝试一下。
# 方法一
DOCKER_BUILDKIT=0 docker build -f dockerfile1 -t yuanyuan/centos:1.0 .# 方法二
docker build -f dockerfile1 -t yuanyuan/centos:1.0 --progress=plain .
启动容器并查看
启动容器,并进入到容器中:
docker run -it b19d22d998db /bin/bash
进入目录查看,如图,可以看到挂载的两个数据卷目录已经生成了。这两个数据卷目录在容器外部一定有同步的目录。
查看宿主机同步情况
查找同步目录
在容器内,进入 volume01 目录,并创建测试文件:
[root@e773f0b76b59 /]# cd volume01
[root@e773f0b76b59 volume01]# touch container.txt
然后 exit 退出容器,查看该容器的信息:
docker inspect 容器id
在 Mounts 中找到如下信息:
- Source 为外部宿主机的同步目录
- Destination 为容器中的同步目录
"Mounts": [{"Type": "volume","Name": "20bef5da955e65c8ea65ded49b3baf14e5c92b5a02856c4c91a4cb6a98972556","Source": "/var/lib/docker/volumes/20bef5da955e65c8ea65ded49b3baf14e5c92b5a02856c4c91a4cb6a98972556/_data",// Source 中即为外部宿主机的同步目录"Destination": "volume01","Driver": "local","Mode": "","RW": true,"Propagation": ""},// ......volume02 省略],
在容器外部(宿主机)查看同步情况
进入 volume01 的 Source 目录,查看情况:同步成功了
[root@localhost docker-test-volume]# cd /var/lib/docker/volumes/20bef5da955e65c8ea65ded49b3baf14e5c92b5a02856c4c91a4cb6a98972556/_data
[root@localhost _data]# ls
container.txt
四、匿名挂载 / 具名挂载
1. 匿名挂载
匿名挂载的配置方式为:-v 容器内路径
运行一个 nginx 试试:
# -P 表示随机映射端口
docker run -d -P --name nginx01 -v /etc/nginx nginx
学习下 volume 如何使用:
docker volume --help
volume 使用方式如下:
[root@localhost ~]# docker volume --help
Usage: docker volume COMMAND
Manage volumes
Commands:create Create a volumeinspect Display detailed information on one or more volumesls List volumesprune Remove unused local volumesrm Remove one or more volumes
Run 'docker volume COMMAND --help' for more information on a command.
查看本地所有 volume 的情况:
docker volume ls
查看发现,匿名挂载是很长一串。
因为 -v
只写了容器内的路径,没有写容器外的路径。
[root@localhost ~]# docker volume ls
DRIVER VOLUME NAME
local 70addcda47d2d792fce62f674394a8a3df02042fbf5a8e05ed8462e8065d89d2
2. 具名挂载
通过具名挂载可以方便地找到卷,大多数情况使用具名挂载
具名挂载的配置方式为:-v 卷名:容器内路径
运行一个 nginx 试试:
docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx nginx
查看本地 volume 的情况,可以看到具名挂载卷的名字是刚刚设置的 juming-nginx
[root@localhost ~]# docker volume ls
DRIVER VOLUME NAME
local juming-nginx
查看一下这个卷:
docker volume inspect juming-nginx
结果如下,可以发现,Docker 容器内的卷在没有指定路径情况下,默认会在 /var/lib/docker/volumes/xxx/_data
[root@localhost ~]# docker volume inspect juming-nginx
[{"CreatedAt": "2024-04-10T20:54:37+08:00","Driver": "local","Labels": null,"Mountpoint": "/var/lib/docker/volumes/juming-nginx/_data","Name": "juming-nginx","Options": null,"Scope": "local"}
]
进入目录查看一下,我们成功拿到了 nginx 的配置文件 nginx.conf
[root@localhost _data]# ls
conf.d fastcgi_params mime.types modules nginx.conf scgi_params uwsgi_params
3. 如何区分
如何区分:具名挂载 / 匿名挂载 / 指定路径挂载?
-v 容器内路径 # 匿名挂载
-v 卷名:容器内路径 # 具名挂载
-v /宿主机路径:容器内路径 # 指定路径挂载
4. 拓展:读写权限
改变读写权限
# 通过 -v 容器内路径:ro rw 改变读写权限
ro read-only # 只读
rw read-write # 可读可写# 举个例子
docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx:ro nginx
docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx:rw nginx
一旦设置了容器权限,容器对挂载出来的内容就会有限定。
/etc/nginx:ro
表示容器内的 /etc/nginx
会被挂载为只读模式,意味着不能在容器内部对这个目录进行写操作。
五、数据卷容器(父容器)
1. 原理介绍
数据卷技术不仅可以完成容器和宿主机之间的同步,也可以完成两个/多个容器之间的同步。
使用方式,将一个容器挂载到另一个容器上,被挂载的容器,我们称之为父容器,或数据卷容器。
2. 启动容器测试
通过上面 Dockerfile 制作的 yuanyuan 镜像,我们启动 3 个容器,来测试多个容器之间数据同步。
启动并进入容器 docker01
docker run -it --name docker01 yuanyuan/centos:1.0
查看详细目录,可以看到数据卷目录:
[root@b3824bd95c81 /]# ls -l
total 56
drwxr-xr-x 2 root root 4096 Apr 11 05:49 volume01
drwxr-xr-x 2 root root 4096 Apr 11 05:49 volume02
启动并进入容器 docker02
为了方便测试,我们可以使用 FinalShell 创建多个 SSH 连接,3 个都连接我们的 Linux,第 1 个进入 docker01 容器,第 2 个进入 docker02 容器。
我们把 docker01 作为数据卷容器,docker02 挂载到 docker01 上。
# 挂载参数 --volumes-from
docker run -it --name docker02 --volumes-from docker01 yuanyuan/centos:1.0
查看详细目录,可以看到数据卷目录:
[root@6ff9c85ebd26 /]# ls -l
total 56
drwxr-xr-x 2 root root 4096 Apr 11 05:49 volume01
drwxr-xr-x 2 root root 4096 Apr 11 05:49 volume02
启动并进入容器 docker03
docker03 也挂载到 docker01 上
# 挂载参数 --volumes-from
docker run -it --name docker03 --volumes-from docker01 yuanyuan/centos:1.0
查看详细目录,可以看到数据卷目录:
[root@2f1eead0d71f /]# ls -l
total 56
drwxr-xr-x 2 root root 4096 Apr 11 06:08 volume01
drwxr-xr-x 2 root root 4096 Apr 11 05:49 volume02
3. 测试容器间的数据同步
通过
--volumes-from
,可实现容器间的数据同步。数据同步是双向的。
测试 docker01 ==> docker02
在 docker01 容器的 volume01 卷中创建文件
[root@b3824bd95c81 /]# cd volume01
[root@b3824bd95c81 volume01]# touch docker01
在 docker02 容器的 volume01 卷中查看
可以看到,docker01 中创建的内容同步到了 docker02 上。
[root@6ff9c85ebd26 /]# cd volume01
[root@6ff9c85ebd26 volume01]# ls
docker01
测试 docker02 ==> docker01
在 docker02 容器的卷中创建文件
[root@6ff9c85ebd26 volume01]# touch docker02
在 docker01 容器的卷中查看
可以看到,docker02 中创建的内容同步到了 docker01 上。
[root@b3824bd95c81 volume01]# ls
docker01 docker02
测试 docker03 ==> docker01 / 02
在 docker03 容器的卷 volume01 中创建文件
touch docker03
分别在 docker01 和 docker02 容器的 volume01 卷中查看
可以看到,docker03 中创建的内容同步到了 docker01 和 docker02 容器上。
4. 删除父容器
删除 docker01 容器:
[root@localhost ~]# docker rm -f docker01
在 docker02 / docker03 容器中查看数据卷,发现文件依然存在,它们依然可以访问这个数据卷。
[root@6ff9c85ebd26 volume01]# ls
docker01 docker02 docker03
这说明:数据卷技术并不是简单的共享,而是拷贝。
docker02 和 docker03 是把 docker01 中的数据卷拷贝了一份到自己那里。
注意:就算此时父容器 docker01 被删除了,docker02 和 docker03 依然能够实现数据同步!
容器 – 容器:容器之间配置信息的传递,数据卷容器的生命周期一直持续到没有容器使用为止。
容器 – 宿主机:一旦数据持久化到了本地,本地的数据是不会删除的。
六、MySQL 实战
实战:MySQL 的安装和数据同步;思考:MySQL 的数据持久化问题。
1. 安装 MySQL
获取镜像
获取镜像,下载 MySQL:
docker pull mysql:5.7
运行容器
在 docker hub
上查看如何使用 mysql
:参考这里
docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
运行容器,需要做数据挂载,注意安装启动 mysql 需要配置密码
-d
:后台运行-p
:端口映射-v
:卷挂载-e
:环境配置--name
:容器名字
注意:命令中的斜杠 \
是在一条命令没写完但是要进行换行情况下使用,如果命令写在同一行就不需要斜杠。
docker run -d -p 3346:3306 \
-v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7
测试连接
测试一下自己电脑上能不能连接成功
使用数据库工具,比如 Navicat、WorkBench 之类的测试一下
输入宿主机的 ip
,还有映射的端口号 3346
,以及用户名和密码
在本地创建一个数据库 test
Linux 中查看容器挂载目录 /home/mysql/data
,发现数据库 test
完成了同步
说明映射路径是正确的
删除容器
删除 mysql01
容器
docker rm -f mysql01
然后查看 /home/mysql/data
目录,发现挂载的数据卷依然存在,不会和容器一起删除。
实现了数据持久化功能!
2. 多个 MySQL 实现数据同步
启动两个 mysql 容器,让他们实现数据同步
先启动容器 mysql01,配置一下容器内数据卷路径
docker run -d -p 3346:3306 -v /etc/mysql/conf.d -v /var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7
再启动 mysql02,把 mysql02 挂载到 mysql01 上
docker run -d -p 3346:3306 \
-e MYSQL_ROOT_PASSWORD=123456 --name mysql02 --volumes-from mysql01 mysql:5.7
注意:
端口设置一样的话,相当于两个容器共用一个数据库。无论是在本地连接还是各自容器内查看,它们的内容都保持一致。
但不能同时启动,因为端口同一时刻只能分配给一个容器。
七、总结
本文主要介绍了容器数据卷技术,介绍了数据卷的两种挂载方式,体验了匿名挂载与具名挂载的区别之处,不仅实现了容器与宿主机的数据同步,还实现了多个容器之间的数据同步。初学入门,挑战容器数据卷技术一文通。
一些参考资料
狂神说系列 Docker 教程:https://www.bilibili.com/video/BV1og4y1q7M4/
Docker 官方文档:https://docs.docker.com/engine/install/centos/
Docker 远程仓库:https://hub.docker.com/
FinalShell 下载:http://www.hostbuf.com/t/988.html
相关文章:

Docker 学习笔记(六):挑战容器数据卷技术一文通,实战多个 MySQL 数据同步,能懂会用,初学必备
一、前言 记录时间 [2024-4-11] 系列文章简摘: Docker学习笔记(二):在Linux中部署Docker(Centos7下安装docker、环境配置,以及镜像简单使用) Docker 学习笔记(三)&#x…...
csdn怎么变得这么恶心,自动把一些好的文章分享改成了vip可见
刚刚发现以前发的一些文章未经过我同意,被csdn自动改成了VIP可见,这也太恶心了,第一你没分钱给我,第二我记录下一些问题也不是为了赚钱,而是为了提升自己和帮助别人,这样搞是想逼更多人走是吗?...

自然语言处理NLP:文本预处理Text Pre-Processing
大家好,自然语言处理(NLP)是计算机科学领域与人工智能领域中的一个重要方向,其研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法。本文将介绍文本预处理的本质、原理、应用等内容,助力自然语言处理和模型的生成使用。 1.文本…...

家庭网络防御系统搭建-虚拟机安装siem/securityonion网络连接问题汇总
由于我是在虚拟机中安装的security onion,在此过程中,遇到很多的网络访问不通的问题,通过该文章把网络连接问题做一下梳理。如果直接把securityonion 安装在物理机上,网络问题则会少很多。 NAT无法访问虚拟机 security onion虚拟…...

2024年外贸行业营销神器推荐
2024年外贸行业营销神器推荐:外贸人每天面对的不是国内客户,而是全球客户,相对于国内来说,会更加麻烦和繁琐,今天就码一篇2024年外贸行业营销神器的推荐文章,希望可以减轻各位外贸人的负担! 1、…...

k8s高可用集群部署介绍 -- 理论
部署官网参考文档 负载均衡参考 官网两种部署模式拓扑图和介绍 介绍两种高可用模式 堆叠 拓扑图如下(图片来自k8s官网): 特点:将etcd数据库作为控制平台的一员,由于etcd的共识算法,所以集群最少为3个&…...
【GDAL-Python】1-在Python中使用GDAL读写栅格文件
文章目录 1-概要2.代码实现 1-概要 提示:本教程介绍如何使用 Python 中的 GDAL 库将栅格数据读取为数组并将数组另存为GeoTiff 文件 视频地址:B站对应教程 目标: (1)读写GeoTiff影像; (2&…...

【C++】explicit关键字详解(explicit关键字是什么? 为什么需要explicit关键字? 如何使用explicit 关键字)
目录 一、前言 二、explicit关键字是什么? 三、构造函数还具有类型转换的作用 🍎单参构造函数 ✨引出 explicit 关键字 🍍多参构造函数 ✨为什么需要explicit关键字? ✨怎么使用explicit关键字? 四、总结 五…...

maven引入外部jar包
将jar包放入文件夹lib包中 pom文件 <dependency><groupId>com.jyx</groupId><artifactId>Spring-xxl</artifactId><version>1.0-SNAPSHOT</version><scope>system</scope><systemPath>${project.basedir}/lib/Spr…...

李沐37_微调——自学笔记
标注数据集很贵 网络架构 1.一般神经网络分为两块,一是特征抽取原始像素变成容易线性分割的特征,二是线性分类器来做分类 微调 1.原数据集不能直接使用,因为标号发生改变,通过微调可以仍然对我数据集做特征提取 2.pre-train源…...

【小程序】生成短信中可点击的链接
文章目录 前言一、如何生成链接二、仔细拜读小程序开发文档文档说明1文档说明2 总结 前言 由于线上运营需求,需要给用户发送炮轰短信,用户通过短信点击链接直接跳转进入小程序 一、如何生成链接 先是找了一些三方的,生成的倒是快速…...

欧拉函数(模板题)
给定 n 个正整数 ai,请你求出每个数的欧拉函数。 欧拉函数的定义 输入格式 第一行包含整数 n。 接下来 n 行,每行包含一个正整数 ai。 输出格式 输出共 n 行,每行输出一个正整数 ai 的欧拉函数。 数据范围 1≤n≤100, 1≤ai≤2109 输…...

Thingsboard PE 白标的使用
只有专业版支持白标功能。 使用 ThingsBoard Cloud 或安装您自己的平台实例。 一、介绍 ThingsBoard Web 界面提供了简便的操作,让您能够轻松配置您的公司或产品标识和配色方案,无需进行编码工作或重新启动服务。 系统管理员、租户和客户管理员可以根据需要自定义配色方案、…...

智能物联网远传冷水表管理系统
智能物联网远传冷水表管理系统是一种基于物联网技术的先进系统,旨在实现对冷水表的远程监测、数据传输和智能化管理。本文将从系统特点、构成以及带来的效益三个方面展开介绍。 系统特点 1.远程监测:系统可以实现对冷水表数据的远程监测,无…...

Qt教程3-Ubuntu(x86_64)上配置arm64(aarch64)交叉编译环境及QT编译arm64架构工程
汇创慧玩 写在前面1. 查看系统架构相关指令2. ARM64交叉编译器环境搭建3. Qt编译arm64环境搭建4. 配置 Qt的本地aarch64交叉编译器5. 工程建立及编译验证 写在前面 苦辣酸甜时光八载,春夏秋冬志此一生 Qt简介: Qt(官方发音 [kju:t]ÿ…...
2024年华为OD机试真题-最长子字符串的长度(二)-Python-OD统一考试(C卷)
题目描述: 给你一个字符串 s,字符串s首尾相连成一个环形 ,请你在环中找出l、o、x 字符都恰好出现了偶数次最长子字符串的长度。 输入描述: 输入是一串小写的字母组成的字符串。 输出描述: 输出是一个整数 补充说明: 1 <= s.length <= 5 x 10^5 s 只包含小写英文字母…...
【24届数字IC秋招总结】正式批面试经验汇总5——蔚来、tp-link
文章目录 一、蔚来-数字芯片验证工程师1.1 一面面试问题1.2 二面面试问题二、tp-link-数字IC验证工程师2.1 面试问题一、蔚来-数字芯片验证工程师 面试时间:9.6 10.6 1.1 一面面试问题 1、 讲下项目结构 2、 scoreboard如何进行数据对比的 3、 golden 数据怎么产生的 4、 在…...

【JAVA基础篇教学】第八篇:Java中List详解说明
博主打算从0-1讲解下java基础教学,今天教学第八篇:Java中List详解说明。 在 Java 编程中,List 接口是一个非常常用的集合接口,它代表了一个有序的集合,可以包含重复的元素。List 接口提供了一系列操作方法,…...

RN向上向下滑动组件封装(带有渐变色)
这段组件代码逻辑是出事有一个View和下面的块,下面的块也就是红色区域可以按住向上向下滑动,当滑动到屏幕最上面则停止滑动,再向上滑动的过程中,上方的View的背景色也会有个渐变效果,大概逻辑就是这样 代码如下 import React, {useEffect, useRef, useState} from react; impo…...
27、Lua 学习笔记之五(Lua中的数学库)
Lua中的数学库 Lua5.1中数学库的所有函数如下表: math.pi 为圆周率常量 3.14159265358979323846 数学库说明例子方法abs取绝对值math.abs(-15)15acos反余弦函数math.acos(0.5)1.04719755asin反正弦函数math.asin(0.5)0.52359877atan2x / y的反正切值math.atan2(9…...
Spring Boot 实现流式响应(兼容 2.7.x)
在实际开发中,我们可能会遇到一些流式数据处理的场景,比如接收来自上游接口的 Server-Sent Events(SSE) 或 流式 JSON 内容,并将其原样中转给前端页面或客户端。这种情况下,传统的 RestTemplate 缓存机制会…...
在rocky linux 9.5上在线安装 docker
前面是指南,后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...
C# SqlSugar:依赖注入与仓储模式实践
C# SqlSugar:依赖注入与仓储模式实践 在 C# 的应用开发中,数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护,许多开发者会选择成熟的 ORM(对象关系映射)框架,SqlSugar 就是其中备受…...

RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文全面剖析RNN核心原理,深入讲解梯度消失/爆炸问题,并通过LSTM/GRU结构实现解决方案,提供时间序列预测和文本生成…...

学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2
每日一言 今天的每一份坚持,都是在为未来积攒底气。 案例:OLED显示一个A 这边观察到一个点,怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 : 如果代码里信号切换太快(比如 SDA 刚变,SCL 立刻变&#…...

短视频矩阵系统文案创作功能开发实践,定制化开发
在短视频行业迅猛发展的当下,企业和个人创作者为了扩大影响力、提升传播效果,纷纷采用短视频矩阵运营策略,同时管理多个平台、多个账号的内容发布。然而,频繁的文案创作需求让运营者疲于应对,如何高效产出高质量文案成…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...
探索Selenium:自动化测试的神奇钥匙
目录 一、Selenium 是什么1.1 定义与概念1.2 发展历程1.3 功能概述 二、Selenium 工作原理剖析2.1 架构组成2.2 工作流程2.3 通信机制 三、Selenium 的优势3.1 跨浏览器与平台支持3.2 丰富的语言支持3.3 强大的社区支持 四、Selenium 的应用场景4.1 Web 应用自动化测试4.2 数据…...

QT开发技术【ffmpeg + QAudioOutput】音乐播放器
一、 介绍 使用ffmpeg 4.2.2 在数字化浪潮席卷全球的当下,音视频内容犹如璀璨繁星,点亮了人们的生活与工作。从短视频平台上令人捧腹的搞笑视频,到在线课堂中知识渊博的专家授课,再到影视平台上扣人心弦的高清大片,音…...

Qt的学习(一)
1.什么是Qt Qt特指用来进行桌面应用开发(电脑上写的程序)涉及到的一套技术Qt无法开发网页前端,也不能开发移动应用。 客户端开发的重要任务:编写和用户交互的界面。一般来说和用户交互的界面,有两种典型风格&…...