windows下docker使用笔记
目录
镜像的配置
镜像的拉取
推荐镜像源列表(截至2025年2月测试有效)
配置方法
修改容器名字
如何使用卷
创建不同的容器,每个容器中有不同的mysql和java版本(不推荐)
1. 安装 Docker Desktop(Windows)
2. 启用 WSL 2(Windows Subsystem for Linux 2)
3. 拉取 MySQL 和 Java 镜像
4. 创建并启动容器
5. 使用 Docker Compose(Windows)
总结
但是上面的做法是不推荐的
docker中MySQL数据库的导出和恢复
导出 MySQL 数据库并发送给别人
在别人容器中恢复数据库
演示
使用卷(volumes)来持久化数据
示例:如何持久化数据库数据
你可以查看这些卷:
如何避免自动卷?
镜像的配置
这是我的
"registry-mirrors": ["https://你的id.mirror.aliyuncs.com","https://mirror.ccs.tencentyun.com","http://hub-mirror.c.163.com","https://registry.docker-cn.com"]
镜像的拉取
根据2025年2月的最新测试结果,以下是国内可用的Docker镜像加速源推荐列表,这些镜像源在速度和稳定性方面表现较好,适合替代默认的Docker Hub以提升镜像拉取效率:
推荐镜像源列表(截至2025年2月测试有效)
-
docker.m.daocloud.io
-
DaoCloud 提供的官方镜像加速服务,覆盖主流镜像,拉取速度快且稳定性高。
-
-
docker-0.unsee.tech
-
社区维护的镜像站,实测拉取时间约8.77秒,适合基础镜像加速。
-
-
docker.1ms.run
-
毫秒级响应,适合对速度要求较高的场景,拉取时间约10.70秒。
-
-
func.ink
-
快速且稳定,拉取时间仅8.32秒,适合高频使用1。
-
-
docker.imgdb.de
-
德国镜像站的中国节点,支持多类镜像,同步速度较快。
-
-
docker.hlmirror.com
-
国内社区维护,实测拉取时间约14.16秒,支持主流镜像。
-
-
docker.zhai.cm
-
个人开发者维护,拉取时间约8.89秒,适合轻量级镜像。
-
-
fast360.xyz
-
企业级镜像加速服务,响应速度快,适合大型镜像。
-
-
lispy.org
-
社区推荐,拉取时间约14.09秒,支持多种公共镜像。
-
-
中国官方镜像:https://registry.docker-cn.com
网易163镜像:http://hub-mirror.c.163.com
中科大镜像:https://docker.mirrors.ustc.edu.cn
阿里云镜像:https://[xxx].mirror.aliyuncs.com
配置方法
-
永久配置(推荐)
修改 Docker 的配置文件daemon.json
,添加多个镜像源以提升容错性:"registry-mirrors": ["https://docker.m.daocloud.io","https://docker-0.unsee.tech","https://docker.1ms.run","https://func.ink","https://docker.imgdb.de"]
-
临时使用
在拉取命令中直接指定镜像源地址(无需https://
前缀):docker pull docker.m.daocloud.io/hello-world:latest
注意事项
-
镜像同步延迟
部分镜像源可能未同步最新镜像(如阿里云镜像站),若拉取失败可切换其他源。 -
地区限制
某些镜像源可能受地区网络影响(如企业内网限制),建议结合本地网络环境测试。 -
服务波动
社区维护的镜像源可能存在不稳定性,推荐配置多个备用地址。 -
验证配置是否生效
执行docker info
,若输出中显示Registry Mirrors
列表,则配置成功。
性能测试建议
-
使用
time
命令对比镜像拉取速度:time docker pull hello-world:latest
-
移除本地缓存后测试,结果更准确。
修改容器名字
Docker Desktop 界面本身没有直接修改容器名字的选项,但你可以通过以下步骤来完成:
步骤:
-
停止容器: 首先,确保容器处于停止状态。在 Docker Desktop 界面,找到
quizzical_brattai
容器,点击右侧的 "Stop" 按钮停止该容器。 -
重命名容器: 打开 Docker Desktop 中的 Terminal 或者使用命令行,输入以下命令来重命名容器,假设你想把
quizzical_brattai
容器改名为new-hello-world
,命令应该是:docker rename quizzical_brattai new-container-name
-
启动容器: 重命名容器后,你可以重新启动它。在 Docker Desktop 界面中,找到该容器,点击 "Start" 按钮。
注意:
- 容器重命名不会改变容器的功能或配置,它只是更改容器的名称。
- 容器的镜像 (
hello-world
) 不会改变,因为镜像和容器是不同的概念。你可以用相同的镜像启动多个容器,只需要不同的容器名称。
如何使用卷
卷(volumes)主要用于数据持久化和容器之间的数据共享。容器在运行时会创建文件系统,但这些文件系统是临时的,容器停止后数据会丢失。而卷提供了一种方式,让你能够在容器和主机之间持久化数据,并且容器之间也可以共享这些数据。
在Docker中,卷可以通过以下几种方式进行使用:
-
命令行创建和使用卷:可以通过
docker volume create
命令创建卷,使用时通过-v
参数将卷挂载到容器中。示例:
docker volume create myvolume docker run -d -v myvolume:/data mycontainer
-
将主机目录挂载为卷:除了使用 Docker 管理的卷,还可以将主机的某个目录直接挂载到容器中,这对于开发和调试非常方便。
示例:
docker run -d -v C:\path\to\host\folder:/data mycontainer
总之,Docker中的卷是一种非常重要的功能,能够保证数据的持久性,并提高容器的可移植性和灵活性。
创建不同的容器,每个容器中有不同的mysql和java版本(不推荐)
要在 Docker 中创建多个容器,每个容器中包含不同版本的 MySQL 和 Java,可以使用 Docker 的 多容器管理。你可以为每个容器选择不同的 MySQL 和 Java 版本,以下是详细的步骤。
1. 安装 Docker Desktop(Windows)
确保你已经在 Windows 上安装并启动了 Docker Desktop。如果没有安装,你可以从 Docker 官网下载并安装:Docker Desktop for Windows。
2. 启用 WSL 2(Windows Subsystem for Linux 2)
在 Windows 上运行 Docker Desktop 时,通常需要启用 WSL 2(Windows Subsystem for Linux 2)作为后端。Docker Desktop 会自动配置 WSL 2。
-
打开 PowerShell 以管理员身份运行,执行以下命令来启用 WSL:
wsl --install
-
如果已安装 WSL,可以通过以下命令升级为 WSL 2:
wsl --set-default-version 2
-
确保你已经安装了合适的 Linux 发行版(例如 Ubuntu)。可以在 Microsoft Store 中找到并安装。
3. 拉取 MySQL 和 Java 镜像
在 Windows 上,你可以使用 Docker Desktop 自带的 PowerShell 或 命令提示符 来运行 Docker 命令。
-
拉取 MySQL 镜像: 打开 PowerShell 或命令提示符,输入以下命令来拉取 MySQL 镜像(例如 MySQL 5.7):
docker pull mysql:5.7
-
拉取 Java 镜像: 同样,拉取 Java 镜像(例如 OpenJDK 8):
docker pull openjdk:8
4. 创建并启动容器
-
你可以使用下面的命令在 Windows 上创建和启动容器。
创建 MySQL 5.7 容器:
docker run --name mysql-java8-container -e MYSQL_ROOT_PASSWORD=rootpassword -d mysql:5.7
进入容器:
docker exec -it mysql-java8-container bash
安装 Java 8: 在容器内使用以下命令安装 Java 8:
apt-get update apt-get install openjdk-8-jdk -y
创建 MySQL 8.0 容器并安装 Java 11:
docker run --name mysql-java11-container -e MYSQL_ROOT_PASSWORD=rootpassword -d mysql:8.0 docker exec -it mysql-java11-container bash apt-get update apt-get install openjdk-11-jdk -y
5. 使用 Docker Compose(Windows)
详细教程:Windows下Docker Compose使用教程-CSDN博客
Docker Desktop 也支持 Docker Compose,在 Windows 上使用与其他操作系统相同。你可以创建一个 docker-compose.yml
文件来定义多个容器服务。
-
创建
docker-compose.yml
文件:使用文本编辑器创建一个名为
docker-compose.yml
的文件,并将以下内容复制到该文件中:version: '3' services:mysql-java8:image: mysql:5.7container_name: mysql-java8-containerenvironment:MYSQL_ROOT_PASSWORD: rootpasswordvolumes:- mysql-data:/var/lib/mysqlports:- "3306:3306"java8:image: openjdk:8container_name: java8-containercommand: ["java", "-version"]mysql-java11:image: mysql:8.0container_name: mysql-java11-containerenvironment:MYSQL_ROOT_PASSWORD: rootpasswordvolumes:- mysql-data:/var/lib/mysqlports:- "3307:3306"java11:image: openjdk:11container_name: java11-containercommand: ["java", "-version"]volumes:mysql-data:
-
启动 Docker Compose 服务:
打开 PowerShell 或命令提示符,导航到
docker-compose.yml
文件所在的目录,然后运行以下命令来启动服务:docker-compose up -d
-
检查容器状态: 运行
docker ps
命令检查容器是否成功启动。
总结
这些步骤是针对 Windows 环境的。如果你在 Windows 下遇到任何问题,确保 Docker Desktop 和 WSL 2 正常运行。如果你已经完成了 Docker Desktop 的安装并启用了 WSL 2,剩下的步骤和 Linux/macOS 环境类似,可以直接使用命令行操作。
通过上述步骤,你可以创建多个 Docker 容器,每个容器中有不同版本的 MySQL 和 Java。使用 Docker Compose 可以简化多个容器的管理,便于同时运行和管理不同版本的服务。这样,你可以根据需要在同一台机器上运行多个环境,每个环境包含不同的 MySQL 和 Java 版本。
但是上面的做法是不推荐的
在 Docker 中,容器是相互隔离的。你可以在同一个容器中运行多个服务或应用程序,但这样做并不推荐,因为这会违背容器化的基本理念:每个容器应该只负责一个服务。这种做法可能会导致管理上的复杂性以及环境冲突。
对于你的情况,如果你将 MySQL 和 JDK 8 放在同一个容器中运行,确实不会直接影响到 Windows 环境中的 Java 设置。然而,这样做并不符合最佳实践,因为它会让你失去容器本来的隔离性和灵活性,且在需要维护时可能更加困难。
更推荐的做法是分别为 MySQL 和 JDK 创建单独的容器,并通过 Docker 的网络功能将它们连接起来,这样可以避免相互干扰并保持每个服务的独立性。你还可以使用 Docker Compose 来管理多个容器。
如果你坚持将它们放入同一个容器,可以在 Dockerfile 中基于某个基础镜像(例如 Ubuntu)安装 JDK 和 MySQL 服务,并确保它们能够正常启动。但我建议你考虑分开部署,以便更容易管理和维护。
在你使用 docker exec
进入容器时,运行 apt-get install openjdk-8-jdk -y
不会从本地已经拉取的 openjdk-8 镜像安装,而是会从 Docker Hub 上下载对应的 OpenJDK 8 镜像。
这是因为你创建的容器基于 MySQL 镜像(mysql:8
),该镜像中并不包含 Java 环境。因此,运行 apt-get install openjdk-8-jdk
会尝试从 Docker Hub 下载并安装 OpenJDK 8。由于 MySQL 镜像并不包含 Java,所以它没有相关的 Java 环境。
要在容器内使用 Java,你有两种选择:
-
直接在容器中安装 OpenJDK: 你可以在容器内运行
apt-get update
和apt-get install openjdk-8-jdk -y
来安装 OpenJDK 8。这会从网络下载并安装 OpenJDK 8。在安装完成后,你就可以在容器中使用 Java 了。 -
基于 OpenJDK 镜像创建容器: 你可以创建一个基于 OpenJDK 镜像的容器。例如,你可以运行以下命令来拉取 OpenJDK 镜像并创建容器:
docker run --name java-container -it openjdk:8 bash
然后,你就可以在这个容器中直接使用 Java,而不需要安装 OpenJDK。
如果你希望在同一个容器中同时运行 MySQL 和 Java,建议使用 Docker Compose 来同时启动多个服务容器。
使用Navicat连接docker中的MySQL8
端口映射:你需要将 MySQL 容器的端口暴露到主机上,这样才能通过 Navicat 连接。默认情况下,MySQL 使用 3306 端口。你需要在运行容器时添加端口映射参数
打开docker的终端输入:
docker run --name mysql8-container -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 -d mysql:8
会出现并运行该容器
打开Navicat新建连接,测试连接,密码就是刚刚设置的123456
(此时本地的MySQL是关闭的,说明连接的就是docker中的MySQL)
docker中MySQL数据库的导出和恢复
如果你想将当前容器中的 MySQL 数据库导出并发送给别人,这两个文件(SQL 文件和配置文件)可以作为导出的结果来复制你的数据库:
-
xx.sql
文件:这个文件包含了数据库的结构(例如表、索引、视图等)和数据(例如INSERT
语句)。它可以用来在其他 MySQL 容器或实例中重建相同的数据库,包括数据表、数据等。 -
xx.cnf
文件:这是 MySQL 的配置文件,包含了 MySQL 服务的运行参数(如端口、字符集等)。如果别人希望使用与你相同的配置,可以将这个文件放到他们的 MySQL 容器中,替换掉现有的配置文件(如果有不同配置需求)。
导出 MySQL 数据库并发送给别人
假设你希望导出 MySQL 数据库,可以使用 mysqldump
命令来进行备份:
-
导出数据库结构和数据: 在 Docker 容器中执行以下命令将数据库导出为 SQL 文件:
docker exec -it mysql-java8-container mysqldump -u root -p123456 --all-databases > /tmp/all_databases.sql
这将导出所有数据库的数据和结构。如果你只想导出特定的数据库,可以使用:
docker exec -it mysql-java8-container mysqldump -u root -p123456 database_name > /tmp/database_name.sql
-
复制导出的 SQL 文件到本地: 使用
docker cp
命令将导出的 SQL 文件从容器复制到本地:docker cp mysql-java8-container:/tmp/all_databases.sql /path/to/local/directory
-
复制配置文件(如果需要): 如果你需要包括配置文件,可以将
hm.cnf
文件从容器复制到本地:docker cp mysql-java8-container:/etc/mysql/my.cnf /path/to/local/directory/hm.cnf
-
发送给别人: 你可以将
all_databases.sql
或单个数据库的 SQL 文件以及hm.cnf
文件发送给别人。别人只需要按照前面的步骤,先将这些文件导入到他们的 MySQL 容器中,然后再根据需要配置hm.cnf
文件即可。
在别人容器中恢复数据库
-
导入数据库结构和数据: 别人可以将
all_databases.sql
或database_name.sql
文件复制到他们的 MySQL 容器中,然后使用以下命令恢复:docker cp /path/to/all_databases.sql mysql-java8-container:/tmp/all_databases.sql docker exec -it mysql-java8-container bash mysql -u root -p123456 < /tmp/all_databases.sql
-
应用配置文件(如果需要): 如果有配置文件需要替换,别人可以将
hm.cnf
文件复制到容器中,并重启 MySQL 服务:docker cp /path/to/hm.cnf mysql-java8-container:/etc/mysql/my.cnf docker restart mysql-java8-container
总结
- SQL 文件 用于导出和导入数据库的结构和数据。
- 配置文件 用于在不同环境中复制相同的 MySQL 配置。
通过这两个文件,别人可以在他们的容器中恢复你的数据库并应用相同的配置。
演示
现在我本地已经有hmall.sql和hm.cnf
有两种方式来恢复该数据库
方式一:在 Docker 中的 MySQL 容器中运行这些文件,hmall.sql和hm.cnf
-
运行 SQL 文件 (
hmall.sql
): 你可以将hmall.sql
文件加载到 MySQL 容器中,步骤如下:-
将 SQL 文件复制到容器中: 使用
docker cp
命令将hmall.sql
文件从本地复制到容器中:docker cp "F:\hmall.sql" mysql8-container:/tmp/hmall.sql
-
进入容器并执行 SQL 文件: 进入容器并使用 MySQL 命令行工具运行该 SQL 文件:
docker exec -it mysql8-container bash mysql -u root -p123456 < /tmp/hmall.sql
这样会执行
hmall.sql
中的所有 SQL 命令,将数据和结构导入到 MySQL 数据库中。
-
-
应用配置文件 (
hm.cnf
): 配置文件通常用于自定义 MySQL 的运行设置。要在 Docker 中使用hm.cnf
文件,你可以将它复制到容器中的 MySQL 配置目录,并重启 MySQL 服务。-
复制配置文件到容器中:
docker cp /path/to/hm.cnf mysql-java8-container:/etc/mysql/my.cnf
-
重启 MySQL 容器: 重启容器使新配置生效:
docker restart mysql-java8-container
-
方式二:运行docker中含有MySQL的容器后,在Navicat中运行hmall.sql
你可以在 Navicat 中直接打开 hmall.sql
文件并执行它。具体操作步骤如下:
- 打开 Navicat,连接到你运行的 MySQL 容器。
- 在 Navicat 中选择你希望导入数据库的 MySQL 实例。
- 使用 Navicat 打开
hmall.sql
文件。 - 点击执行按钮,这样 SQL 文件中的所有命令将会执行,数据库将会根据 SQL 文件中的定义创建并填充数据。
使用卷(volumes)来持久化数据
如果你在容器中创建了数据库和数据表,并且没有使用卷(volumes)来持久化数据,那么当容器停止、删除或重新创建时,这些数据会丢失。因为容器的文件系统是临时的,只存在于容器的生命周期内。
为了防止数据丢失,你需要使用卷来持久化数据库的数据。你可以将容器中的数据库文件目录映射到宿主机上的目录,或者使用Docker卷来存储数据库数据,这样即使容器停止或删除,数据仍然会保存在宿主机或卷中。
示例:如何持久化数据库数据
假设你使用的是MySQL数据库,可以通过如下方式将数据库的数据保存在卷中:
docker run -d \-v mysql_data:/var/lib/mysql \--name mysql_container \-e MYSQL_ROOT_PASSWORD=my-secret-pw \mysql:latest
在上面的命令中:
-v mysql_data:/var/lib/mysql
:这将创建一个名为mysql_data
的卷,并将其挂载到容器的/var/lib/mysql
目录,这个目录是MySQL存储数据的默认路径。- 这样即使容器停止或删除,数据库的数据也会被保存在
mysql_data
卷中,下一次启动容器时可以恢复这些数据。
如果你使用的是本地目录作为数据存储位置,可以这样做:
docker run -d \-v C:\path\to\host\mysql_data:/var/lib/mysql \--name mysql_container \-e MYSQL_ROOT_PASSWORD=my-secret-pw \mysql:latest
这样,即使容器被删除或停止,C:\path\to\host\mysql_data
目录中的数据仍然会被保留在主机上。
如果你没有手动挂载卷,但是docker在没有明确指定使用volumes
的情况下,仍然会自动为某些容器创建一个卷,尤其是像MySQL这样的数据库容器。即使你没有显式地为容器创建卷,Docker会在容器启动时自动为MySQL等服务创建一个名为<容器ID>_data
的匿名卷,用来持久化数据库的文件。例如下:
这个自动创建的卷通常位于Docker的内部管理目录(通常是Docker的默认数据目录),它会存储MySQL的数据库文件,即使你没有使用-v
选项来指定一个挂载卷。这个匿名卷的作用是确保数据库在容器重启、停止或删除后仍能保留数据。
你可以查看这些卷:
-
列出所有卷: 你可以通过
docker volume ls
命令查看所有卷,包括自动生成的匿名卷。docker volume ls
-
查看卷的详细信息: 可以通过
docker volume inspect <卷名>
来查看卷的详细信息,包括它的存储路径。docker volume inspect <卷名>
如何避免自动卷?
如果你想要管理卷并显式地指定数据存储位置,最好是在启动容器时使用 -v
参数来挂载自定义的卷或主机目录。例如:
docker run -d -v /path/to/host/mysql_data:/var/lib/mysql --name mysql_container -e MYSQL_ROOT_PASSWORD=my-secret-pw mysql:latest
这样,你就可以明确控制数据库数据的位置,而不是依赖Docker自动创建的匿名卷。
相关文章:
windows下docker使用笔记
目录 镜像的配置 镜像的拉取 推荐镜像源列表(截至2025年2月测试有效) 配置方法 修改容器名字 如何使用卷 创建不同的容器,每个容器中有不同的mysql和java版本(不推荐) 1. 安装 Docker Desktop(Win…...
SQLMesh 系列教程6- 详解 Python 模型
本文将介绍 SQLMesh 的 Python 模型,探讨其定义、优势及在企业业务场景中的应用。SQLMesh 不仅支持 SQL 模型,还允许通过 Python 编写数据模型,提供更高的灵活性和可编程性。我们将通过一个电商平台的实例,展示如何使用 Python 模…...
【时时三省】(C语言基础)用N-S流程图表示算法
山不在高,有仙则名。水不在深,有龙则灵。 ----CSDN 时时三省 N-S流程图 既然用基本结构的顺序组合可以表示任何复杂的算法结构,那么,基本结构之间的流程线就是多余的了。1973年,美国学者I.Nassi和B .Shneiderman提出…...
【HarmonyOS Next】鸿蒙监听手机按键
【HarmonyOS Next】鸿蒙监听手机按键 一、前言 应用开发中我们会遇到监听用户实体按键,或者扩展按键的需求。亦或者是在某些场景下,禁止用户按下某些按键的业务需求。 这两种需求,鸿蒙都提供了对应的监听事件进行处理。 onKeyEvent 默认的…...
Unreal5从入门到精通之在编辑器中更新 UserWidgets
前言 在虚幻中创建越来越复杂和灵活的 UserWidget 蓝图时,一个问题是它们在编辑器中的外观与它们在游戏中的最终外观可能有很大不同。 库存面板示例 假设你想创建一个通用的库存显示小部件。我们可以在整个 UI 中使用它,无论我们需要在哪里显示某些内容。 标题,描述所显示…...
Django 5实用指南(五)模板系统
Django5的模板系统是其核心功能之一,允许开发者将动态数据嵌入到HTML模板中,并根据不同的业务需求渲染页面。Django模板系统基于 Django模板语言(DTL),它提供了一些强大的功能,如模板标签、过滤器、条件语句…...
游戏引擎学习第114天
打开内容并回顾 目前正在讨论一个非常重要的话题——优化。当代码运行太慢,无法达到所需性能时,我们该怎么办。昨天,我们通过在代码中添加性能计数器,验证了一些性能分析的数据,这些计数器帮助我们了解每个操作需要的…...
Python 赋能 AI:从零实现图像分类
人工智能(AI)热度持续攀升,而 Python 作为 AI 开发的利器,以其简洁易学、生态丰富的特点,成为众多开发者的首选。本文以图像分类为例,带你用 Python 实现一个简单的 AI 模型。 1. 环境准备 首先,我们需要安装一些必要的 Python 库: pip install tensorflow keras nu…...
UE引擎游戏加固方案解析
据VGinsights的报告,近年来UE引擎在过去几年中市场占比显著增长,其中亚洲市场增幅达到了30%,随着UE5的推出和技术的不断进步,UE引擎在独立开发者和移动游戏开发中的应用也在逐步增加。 UE引擎的优势在于强大的画面表现与视觉特效…...
Http升级为Https - 开发/测试服环境
1.应用场景 主要用于开发/测试服环境将http升级为https, 防止前端web(浏览器)出现Mixed Content报错; 2.学习/操作 1.文档阅读 deepseek 问答; 2.整理输出 报错信息: Mixed Content: The page at <URL> was loaded over HTTPS, but requested an insecure XMLHttpRequ…...
SaaS系统租户隔离方案分析:基于域名与请求头的比较
在设计SaaS系统时,租户隔离是非常重要的设计考虑因素。租户隔离的方式决定了系统的可扩展性、安全性和维护性。常见的租户隔离方案包括基于域名和基于**请求头(header)**的隔离方式。每种方式都有其优缺点,具体选择应根据系统的需…...
调用click.getchar()时Windows PyCharm无法模拟键盘输入
文章目录 问题描述解决方案参考文献 问题描述 调用 click.getchar() 时,Windows PyCharm 无法模拟键盘输入 解决方案 Run → Edit Configurations… → Modify options → Emulate terminal in output console 参考文献 Terminal emulator | PyCharm Documentati…...
科普:“docker”与“docker compose”
一、安装Docker Desktop 安装Docker Desktop,则既安装了Docker,也安装了Docker Compose 从Docker Desktop官方下载页面(https://www.docker.com/products/docker-desktop/),选择适合Windows系统的版本进行下载安装。 验证: do…...
Windows 快速搭建C++开发环境,安装C++、CMake、QT、Visual Studio、Setup Factory
安装C 简介 Windows 版的 GCC 有三个选择: CygwinMinGWmingw-w64 Cygwin、MinGW 和 mingw-w64 都是在 Windows 操作系统上运行的工具集,用于在 Windows 环境下进行开发和编译。 Cygwin 是一个在 Windows 上运行的开源项目,旨在提供类Uni…...
【分布式理论12】事务协调者高可用:分布式选举算法
文章目录 一、分布式系统中事务协调的问题二、分布式选举算法1. Bully算法2. Raft算法3. ZAB算法 三、小结与比较 一、分布式系统中事务协调的问题 在分布式系统中,常常有多个节点(应用)共同处理不同的事务和资源。前文 【分布式理论9】分布式…...
GPT2 模型训练
GPT2 预训练模型 基座 专门供给别人使用的。 对中文分词是一个字一个字分,是Bert的分类方法 好处:灵活。 词库可以适应任何文章。 坏处:训练的难度更大。需要增加数据量 中文分词如果按词组分词 好处:需要的数据量小&#…...
蓝桥杯备考:递归初阶
什么是递归? 相信我们已经不陌生了,函数自己调用自己就叫递归 为什么要有递归? 当处理主问题时,遇到子问题,子问题的解决方法和主问题是一样的,这时候我们就要用到递归 解决流程:问题—》相…...
[C语言]指针进阶压轴题
下面代码打印结果是什么? #include<stdio.h> int main() {char* c[] { "ENTER","NEW","POINT","FIRST" };char** cp[] { c 3,c 2,c 1,c };char*** cpp cp;printf("%s\n", **cpp);printf("%s\n…...
YOLOv11-ultralytics-8.3.67部分代码阅读笔记-build.py
build.py ultralytics\data\build.py 目录 build.py 1.所需的库和模块 2.class InfiniteDataLoader(dataloader.DataLoader): 3.class _RepeatSampler: 4.def seed_worker(worker_id): 5.def build_yolo_dataset(cfg, img_path, batch, data, mode"train"…...
智能体(AI Agent、Deepseek、硅基流动)落地实践Demo——借助大模型生成报表,推动AI赋能企业决策
文章目录 一、 引言二、 系统设计与技术细节2.1 系统架构2.2 核心组件说明 三、 Demo 代码推荐博客: 四、输出年度营销报告1. 总销售额 根据提供的数据,年度总销售额为:740.0。2. 各产品销售额3. 各地区销售额4. 各产品在各地区的销售情况 分…...
mac os设置jdk版本
打开环境变量配置文件 sudo vim ~/.bash_profile 设置不同的jdk版本路径 # 设置JAVA_HOME为jdk17路径 export JAVA_HOME$(/usr/libexec/java_home -v 17)# 设置JAVA_HOME为jdk8路径 export JAVA_HOME$(/usr/libexec/java_home -v 1.8) 设置环境变量 # 将jdk加入到环境变量…...
Llama 3.1 本地电脑部署 Linux系统 【轻松简易】
本文分享在自己的本地电脑部署 llama3.1,而且轻松简易,快速上手。 这里借助Ollama工具,在Linux系统中进行大模型部署~ Llama3.1,有三个版本:8B、70B、405B Llama 3.1 405B 是第一个公开可用的模型,在常识…...
计算机网络安全之一:网络安全概述
1.1 网络安全的内涵 随着计算机和网络技术的迅猛发展和广泛普及,越来越多的企业将经营的各种业务建立在Internet/Intranet环境中。于是,支持E-mail、文件共享、即时消息传送的消息和协作服务器成为当今商业社会中的极重要的IT基础设施。然而࿰…...
docker 部署JAR
docker pull openjdk:23 使用Docker运行生成的JAR包是一个将应用程序容器化的好方法,它确保了你的应用可以在任何安装了Docker的环境中以相同的方式运行。以下是创建一个Docker镜像并运行包含你Java应用程序的JAR包的基本步骤。1. 准备 Dockerfile首先,在…...
深研究:与Dify建立研究自动化应用
许多个人和团队面临筛选各种网页或内部文档的挑战,以全面概述一个主题。那么在这里我推荐大家使用Dify,它是一个用于LLM应用程序开发的低代码,开源平台,它通过自动化工作流程的多步搜索和有效汇总来解决此问题,仅需要最小的编码。 在本文中,我们将创建“ Deepresearch”…...
第1章:LangChain4j的聊天与语言模型
LangChain4J官方文档翻译与解析 目标文档路径: https://docs.langchain4j.dev/tutorials/chat-and-language-models/ 语言模型的两种API类型 LangChain4j支持两种语言模型(LLM)的API: LanguageModel:这种API非常简单,…...
IPv6报头40字节具体怎么分配的?
目录 IPv6报头结构 字段详解 示例代码:IPv6报头的Python实现 输出示例 IPv6协议是为了解决IPv4地址耗尽问题而设计的下一代互联网协议。与IPv4相比,IPv6不仅提供了更大的地址空间,还简化了报头结构,提高了网络设备的处理效率。…...
Ubuntu ARM / aarch64 CPU 镜像下载:如何在 ARM 设备上安装和使用 Ubuntu
随着 ARM 架构的逐渐普及,尤其是在移动设备和高效能计算设备中的应用,许多开发者和用户开始关注基于 ARM 架构的操作系统。Ubuntu 作为一款广泛使用的 Linux 发行版,自然也为 ARM 架构提供了优化的版本。本文将详细介绍如何下载适用于 ARM / …...
图论入门算法:拓扑排序(C++)
上文中我们了解了图的遍历(DFS/BFS), 本节我们来学习拓扑排序. 在图论中, 拓扑排序(Topological Sorting)是对一个有向无环图(Directed Acyclic Graph, DAG)的所有顶点进行排序的一种算法, 使得如果存在一条从顶点 u 到顶点 v 的有向边 (u, v) , 那么在排序后的序列中, u 一定…...
MySQL中count(1)和count(*) 的区别
MySQL中count(1)和count(*) 的区别 在 MySQL 中,COUNT(1) 和 COUNT(*) 均用于统计查询结果中的行数,但它们在语义及其背后的机制上有一些区别。 基本功能 COUNT(*):统计表中所有行的数量,无论列是否为 NULL。 COUNT(1)…...
Android 14输入系统架构分析:图解源码从驱动层到应用层的完整传递链路
一、资料快车 1、深入了解Android输入系统:https://blog.csdn.net/innost/article/details/47660387 2、书籍 - Android系统源代码情景分析 二、Perface 1、参考: 2、系统程序分析方法 1)加入log,并跟着log一步步分析 -logc…...
Web入侵实战分析-常见web攻击类应急处置实验2
场景说明 某天运维人员,发现运维的公司站点被黑页,首页标题被篡改,你获得的信息如下: 操作系统:windows server 2008 R2业务:公司官网网站架构:通过phpstudy运行apache mysqlphp开放端口&…...
Jenkins 配置 Credentials 凭证
Jenkins 配置 Credentials 凭证 一、创建凭证 Dashboard -> Manage Jenkins -> Manage Credentials 在 Domain 列随便点击一个 (global) 二、添加 凭证 点击左侧 Add Credentials 四、填写凭证 Kind:凭证类型 Username with password: 配置 用…...
Android Http-server 本地 web 服务
时间:2025年2月16日 地点:深圳.前海湾 需求 我们都知道 webview 可加载 URI,他有自己的协议 scheme: content:// 标识数据由 Content Provider 管理file:// 本地文件 http:// 网络资源 特别的,如果你想直接…...
selenium爬取苏宁易购平台某产品的评论
目录 selenium的介绍 1、 selenium是什么? 2、selenium的工作原理 3、如何使用selenium? webdriver浏览器驱动设置 关键步骤 代码 运行结果 注意事项 selenium的介绍 1、 selenium是什么? 用于Web应用程序测试的工具。可以驱动浏览…...
Linux中POSIX应用场景
Linux 提供了丰富的 POSIX(Portable Operating System Interface)标准接口,这些接口可以帮助开发者编写可移植、高效的应用程序。POSIX 标准定义了一系列系统调用和库函数,涵盖了文件操作、进程管理、线程管理、信号处理、同步机制…...
Boringssl介绍
BoringSSL 是 Google 从 OpenSSL 分支出来的一个开源 TLS/SSL 库,旨在为 Google 的产品和服务提供一个更加轻量、安全和现代化的加密库。它是 OpenSSL 的一个替代品,专注于简化代码、提高安全性和减少潜在的攻击面。 以下是对 BoringSSL 的详细介绍&…...
react实例与总结(二)
目录 一、脚手架基础语法(16~17) 1.1、hello react 1.2、组件样式隔离(样式模块化) 1.3、react插件 二、React Router v5 2.1、react-router-dom相关API 2.1.1、内置组件 2.1.1.1、BrowserRouter 2.1.1.2、HashRouter 2.1.1.3、Route 2.1.1.4、Redirect 2.1.1.5、L…...
僵尸进程、孤儿进程
一、僵尸进程、孤儿进程 僵尸进程、孤儿进程 1、僵尸进程: (1)定义:子进程死了(内存、打开的文件等都释放了),但没有完全死(数据结构<包含进程ID,进程状态、运行时…...
快速入门Springboot+vue——MybatisPlus多表查询及分页查询
学习自哔哩哔哩上的“刘老师教编程”,具体学习的网站为:7.MybatisPlus多表查询及分页查询_哔哩哔哩_bilibili,以下是看课后做的笔记,仅供参考。 多表查询 多表查询[Mybatis中的]:实现复杂关系映射,可以使…...
redis解决高并发看门狗策略
当一个业务执行时间超过自己设定的锁释放时间,那么会导致有其他线程进入,从而抢到同一个票,所有需要使用看门狗策略,其实就是开一个守护线程,让守护线程去监控key,如果到时间了还未结束,就会将这个key重新s…...
深入解析 MySQL 8 C++ 源码:二级索引回表操作
在数据库系统中,索引是优化查询性能的关键技术之一。MySQL 的 InnoDB 存储引擎支持多种索引类型,其中二级索引(非聚簇索引)和聚簇索引(主键索引)是最常见的两种。然而,由于二级索引的叶子节点只…...
MySQL如何解决幻读?
目录 一、什么是幻读? 1.1 幻读的定义 1.2 幻读的示例 1.3 幻读产生的原因? 1.4?读已提交(Read Committed) 1.4.1 确定事务等级 1.4.2 非锁定读取 准备 示例 结论 1.4.3 锁定读取 准备 示例 分析 结论 1.5?可重…...
RabbitMQ的脑裂(网络分区)问题
问题描述: Mnesia reports that this RabbitMQ cluster has experienced a network partition. There is a risk of losing data 一、什么是MQ脑裂? 网络分区 如果另一个节点在一段时间内(默认为 60 秒)无法与其联系࿰…...
【网络安全 | 漏洞挖掘】价值$40000:从路径遍历升级至RCE
未经许可,不得转载。 文章目录 路径遍历RCE路径遍历 在进行目标侦查和端口扫描时,我发现了一个使用 8443 端口的子域名:http://admin.target.com:8443。许多人可能会忽略返回 404 的子域名,但我并没有。 对 http://admin.target.com:8443/FUZZ 进行模糊测试时,我发现了一…...
程函方程的详细推导
以下是基于非均匀介质弹性波方程(无纵波假设)推导程函方程的详细过程,完整考虑纵波(P 波)和横波(S 波)的耦合效应:...
AD(Altium Designer)三种方法导入图片
目录 1、脚本方式导入图片 1.1 准备脚本文件和导入图片 1.2 运行脚本 1.3 导入文件 1.4 选中文件 2.5 运行 2.6 导入图片 2.7 选择图片 2.8 转换 2.9 退出 2.10 联合 2.11 确认 2.12 调整大小 2.13 复制 2.14 粘贴 2、图片直接导入图片 2.1点击放置 2.2 图片…...
fpga助教面试题
第一题 module sfp_pwm( input wire clk, //clk is 200M input wire rst_n, input wire clk_10M_i, input wire PPS_i, output reg pwm ) reg [6:0] cunt ;always (posedge clk ) beginif(!rst_n)cunt<0;else if(cunt19) //200M是10M的20倍cunt<0;elsecunt<cunt1;…...
问题记录汇总
记录一些问题 如何分析错误帧问题-CSDN博客...
安全问答—安全的基本架构
前言 将一些安全相关的问答进行整理汇总和陈述,形成一些以问答呈现的东西,加入一些自己的理解,欢迎路过的各位大佬进行讨论和论述。很多内容都会从甲方的安全认知去进行阐述。 1.安全存在的目的? 为了支持组织的目标、使命和宗…...