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…...
【杂谈】-递归进化:人工智能的自我改进与监管挑战
递归进化:人工智能的自我改进与监管挑战 文章目录 递归进化:人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管?3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...
突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合
强化学习(Reinforcement Learning, RL)是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程,然后使用强化学习的Actor-Critic机制(中文译作“知行互动”机制),逐步迭代求解…...
Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)
概述 在 Swift 开发语言中,各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过,在涉及到多个子类派生于基类进行多态模拟的场景下,…...
测试markdown--肇兴
day1: 1、去程:7:04 --11:32高铁 高铁右转上售票大厅2楼,穿过候车厅下一楼,上大巴车 ¥10/人 **2、到达:**12点多到达寨子,买门票,美团/抖音:¥78人 3、中饭&a…...
Python爬虫(一):爬虫伪装
一、网站防爬机制概述 在当今互联网环境中,具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类: 身份验证机制:直接将未经授权的爬虫阻挡在外反爬技术体系:通过各种技术手段增加爬虫获取数据的难度…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计
随着大语言模型(LLM)参数规模的增长,推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长,而KV缓存的内存消耗可能高达数十GB(例如Llama2-7B处理100K token时需50GB内存&a…...
Java线上CPU飙高问题排查全指南
一、引言 在Java应用的线上运行环境中,CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时,通常会导致应用响应缓慢,甚至服务不可用,严重影响用户体验和业务运行。因此,掌握一套科学有效的CPU飙高问题排查方法&…...
Yolov8 目标检测蒸馏学习记录
yolov8系列模型蒸馏基本流程,代码下载:这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中,**知识蒸馏(Knowledge Distillation)**被广泛应用,作为提升模型…...
虚拟电厂发展三大趋势:市场化、技术主导、车网互联
市场化:从政策驱动到多元盈利 政策全面赋能 2025年4月,国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》,首次明确虚拟电厂为“独立市场主体”,提出硬性目标:2027年全国调节能力≥2000万千瓦࿰…...
