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

使用 Docker(Podman) 部署 MongoDB 数据库及使用详解

在现代开发环境中,容器化技术(如 Docker 和 Podman)已成为部署和管理应用程序的标准方式。本文将详细介绍如何使用 Podman/Docker 部署 MongoDB 数据库,并确保其他应用程序容器能够通过 Docker 网络成功连接到 MongoDB。我们将逐步解决常见的问题,如权限配置和认证设置,应用容器如何连接和使用容器中的MongoDB 数据库等。

选择 Podman 而不是 Docker

为什么选择 Podman?

  • 无守护进程:Podman 不需要守护进程(daemon)即可运行容器,这使得它更安全和易于管理。
  • 根权限不是必须:Podman 允许非特权用户运行容器,而 Docker 需要 root 权限或通过 docker 组来管理容器。
  • 兼容性:Podman 可以与 Docker 镜像和容器无缝兼容,这意味着你可以使用现有的 Dockerfile 和配置文件。
  • 资源效率:Podman 更加轻量级,对资源的需求较低,适合在资源受限的环境中运行。

1. 安装 Podman

首先,确保你已经安装了 Podman。如果尚未安装,可以按照以下步骤进行安装:

在 Ubuntu 上安装 Podman

  1. 更新包列表

    sudo apt-get update
    
  2. 安装 Podman

    sudo apt-get install -y podman
    
  3. 验证安装

    podman run hello-world
    

    这将检验 Podman 是否安装成功。

2. 创建并运行 MongoDB 容器

2.1 创建目录并调整权限

确保数据目录和日志目录存在并且权限正确。MongoDB 容器内的 mongodb 用户(UID 999 和 GID 999)需要对这些目录有读写权限。

mkdir -p ~/mongodb/data
mkdir -p ~/mongodb/logs
sudo chown -R 999:999 ~/mongodb/data
sudo chown -R 999:999 ~/mongodb/logs

2.2 创建配置文件 mongod.conf

创建一个 MongoDB 配置文件 mongod.conf,内容如下:

systemLog:destination: filepath: "/var/log/mongodb/mongod.log"logAppend: true
storage:dbPath: "/data/db"
net:bindIp: "0.0.0.0"port: 27017
security:authorization: "disabled"

2.3 创建自定义 Docker 网络

创建一个自定义的 Docker 网络,以便其他容器可以连接到 MongoDB 容器。

podman network create dco-net

2.4 运行 MongoDB 容器

使用以下命令运行 MongoDB 容器,并确保配置文件正确挂载:

podman run -d \--name mongodb \-v ~/mongodb/data:/data/db \-v ~/mongodb/logs:/var/log/mongodb \-v ~/mongodb/mongod.conf:/etc/mongod.conf \--network dco-net \docker.io/library/mongo:latest \-f /etc/mongod.conf
  • -d:后台运行容器。
  • -v ~/mongodb/data:/data/db:将主机上的数据目录挂载到容器内的 /data/db 目录,实现数据持久化。
  • -v ~/mongodb/logs:/var/log/mongodb:将主机上的日志目录挂载到容器内的 /var/log/mongodb 目录,实现日志持久化。
  • -v ~/mongodb/mongod.conf:/etc/mongod.conf:将主机上的配置文件挂载到容器内的 /etc/mongod.conf 目录,确保 MongoDB 使用指定的配置文件。
  • --network dco-net:将容器连接到自定义的 dco-net 网络。
  • --name mongodb:为容器指定名称。
  • docker.io/library/mongo:latest:使用的 Docker 镜像名称,从官方 Docker Hub 拉取。
  • -f /etc/mongod.conf:指定使用 /etc/mongod.conf 配置文件。

3. 创建 MongoDB 用户和权限

3.1 进入 MongoDB 容器并启动 MongoDB Shell

podman exec -it mongodb /bin/bash
mongo

3.2 创建 admin 用户和权限

在 MongoDB Shell 中,创建 admin 数据库的用户并分配权限。例如:

use admin
db.createUser({user: "admin",pwd: "admin123",roles: [{ role: "root", db: "admin" }]
})
exit
exit

3.3 创建 atomdco 用户和权限

在 MongoDB Shell 中,创建 atomdco 数据库的用户并分配权限。例如:

podman exec -it mongodb /bin/bash
mongo -u admin -p admin123 --authenticationDatabase admin
use atomdco
db.createUser({user: "test1",pwd: "111111",roles: [{ role: "readWrite", db: "atomdco" }]
})
exit
exit

4. 启用 MongoDB 认证

4.1 停止并删除 MongoDB 容器

首先,停止并删除现有的 MongoDB 容器,以确保新的容器能够正确加载配置文件。

podman stop mongodb
podman rm mongodb

4.2 修改配置文件 mongod.conf 以启用认证

编辑 mongod.conf 文件,启用 authorization

systemLog:destination: filepath: "/var/log/mongodb/mongod.log"logAppend: true
storage:dbPath: "/data/db"
net:bindIp: "0.0.0.0"port: 27017
security:authorization: "enabled"

4.3 重新运行 MongoDB 容器

使用修改后的配置文件重新运行 MongoDB 容器:

podman run -d \--name mongodb \-v ~/mongodb/data:/data/db \-v ~/mongodb/logs:/var/log/mongodb \-v ~/mongodb/mongod.conf:/etc/mongod.conf \--network dco-net \docker.io/library/mongo:latest \-f /etc/mongod.conf

5. 验证 MongoDB 容器是否正确运行

5.1 查看容器状态

podman ps -a

你应该能看到类似以下的输出:

CONTAINER ID  IMAGE                           COMMAND     CREATED        STATUS        PORTS       NAMES
cd25ac473660  docker.io/library/mongo:latest  mongod      6 minutes ago  Up 6 minutes              mongodb

5.2 查看日志文件

确保 MongoDB 容器正确加载了配置文件并启动了日志记录。

podman logs mongodb

或者实时查看日志文件:

podman logs -f mongodb

你应该能看到类似以下的日志信息,确认 MongoDB 正确加载了配置文件并监听了所有网络接口:

{"t":{"$date":"2025-02-01T08:59:09.471Z"},"s":"I",  "c":"CONTROL",  "id":20568,   "ctx":"main","msg":"Waiting for connections","attr":{"port":27017,"ssl":"disabled"}}

5.3 验证端口监听

进入 MongoDB 容器并查看端口是否正确监听。

podman exec -it mongodb /bin/bash
ss -tuln

你应该能看到类似以下的输出:

Netid  State   Recv-Q  Send-Q  Local Address:Port               Peer Address:Port
tcp    LISTEN  0       0       0.0.0.0:27017                 0.0.0.0:*

6. 应用所在的容器如何连接到mongodb容器

假设有一godco的应用,有配置文件etc/godco-api.yaml,演示下该应用,如何使用上述创建好的mongodb数据库。

修改 etc/godco-api.yaml 中的 MongoDB 连接字符串。

由于 godco 容器和 mongodb 容器在同一个自定义网络中,可以使用 mongodb 作为主机名。修改 etc/godco-api.yaml 文件中的 MongoDB 连接字符串如下:

MonDB:Url: "mongodb://test1:111111@mongodb:27017/?tls=false&authSource=atomdco"DbName: "atomdco"

在这个配置中:

  • mongodb 是 MongoDB 容器的名称。
  • test1 是 MongoDB 用户名。
  • 111111 是 MongoDB 密码。
  • authSource=atomdco 指定认证数据库为 atomdco

7. 运行 godco 容器并连接到自定义网络

使用以下命令运行 godco 容器,并将其连接到自定义网络:

podman run -d \-p 8080:8080 \-v /path/to/your/etc:/app/etc \-v /path/to/your/static:/app/static \--network dco-net \--name dco-verification-app \godco:latest
  • -d:后台运行容器。
  • -p 8080:8080:将容器的 8080 端口映射到主机的 8080 端口。
  • -v /path/to/your/etc:/app/etc:将主机上的配置文件目录挂载到容器内的 /app/etc 目录。
  • -v /path/to/your/static:/app/static:将主机上的静态文件目录挂载到容器内的 /app/static 目录。
  • --network dco-net:将容器连接到自定义的 dco-net 网络。
  • --name dco-verification-app:为容器指定名称。
  • godco:latest:使用的 Docker 镜像名称。

8. 验证 godco 容器是否成功连接到 MongoDB

查看 godco 容器的日志文件,以确认它是否成功连接到 MongoDB 容器。

podman logs dco-verification-app

或者实时查看日志文件:

podman logs -f dco-verification-app

你应该能看到类似以下的日志信息,确认 godco 成功连接到 MongoDB:

[info] Connected to MongoDB server at mongodb:27017
[info] MongoDB database atomdco is ready

9. 使用 mongosh 连接到 MongoDB 并提供认证信息

9.1 获取 MongoDB 容器的 IP 地址

如果你的 MongoDB 容器已经映射了宿主机的端口(例如,使用 -p 27017:27017 参数),您可以直接使用宿主机的 IP 地址和映射的端口来连接。

mongosh "mongodb://username:password@localhost:27017/?authSource=atomdco"

由于上述我的测试没有启用该端口映射,所以需要以下方式连接:

使用 podman inspect 命令获取 MongoDB 容器的 IP 地址:

podman inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' mongodb

假设输出的 IP 地址为 10.89.0.5

9.2 连接到 MongoDB 并提供认证信息

使用 mongosh 连接到 MongoDB 并提供认证信息。例如:

mongosh "mongodb://test1:111111@10.89.0.5:27017/?authSource=atomdco"

9.3 验证数据库

mongosh 中,你可以使用 show databases 命令来查看数据库。

show databases

你应该能看到类似以下的输出:

admin   0.000GB
config  0.000GB
local   0.000GB
atomdco 0.000GB

10. 常见问题及解决方法

10.1 配置文件路径错误

确保配置文件路径正确,并且文件存在。

10.2 配置文件语法错误

检查 mongod.conf 文件是否有语法错误。可以使用 mongod --config /etc/mongod.conf 在主机上测试配置文件。

10.3 权限问题

确保数据目录和日志目录对 MongoDB 容器有正确的读写权限。使用 chown 命令调整权限。

10.4 镜像版本问题

确保你使用的 MongoDB 镜像版本正确,并且配置文件与该版本兼容。

11. 总结

通过上述步骤,你可以成功地使用 Podman 部署 MongoDB 数据库,并确保其他应用程序容器能够通过 Docker 网络成功连接到 MongoDB。以下是完整的步骤总结:

11.1 创建目录并调整权限

mkdir -p ~/mongodb/data
mkdir -p ~/mongodb/logs
sudo chown -R 999:999 ~/mongodb/data
sudo chown -R 999:999 ~/mongodb/logs

11.2 创建配置文件 mongod.conf(禁用认证)

systemLog:destination: filepath: "/var/log/mongodb/mongod.log"logAppend: true
storage:dbPath: "/data/db"
net:bindIp: "0.0.0.0"port: 27017
security:authorization: "disabled"

11.3 创建自定义 Docker 网络

podman network create dco-net

11.4 运行 MongoDB 容器(禁用认证)

podman run -d \--name mongodb \-v ~/mongodb/data:/data/db \-v ~/mongodb/logs:/var/log/mongodb \-v ~/mongodb/mongod.conf:/etc/mongod.conf \--network dco-net \docker.io/library/mongo:latest \-f /etc/mongod.conf

11.5 创建 admin 用户和权限

podman exec -it mongodb /bin/bash
mongo
use admin
db.createUser({user: "admin",pwd: "admin123",roles: [{ role: "root", db: "admin" }]
})
exit
exit

11.6 创建 atomdco 用户和权限

podman exec -it mongodb /bin/bash
mongo -u admin -p admin123 --authenticationDatabase admin
use atomdco
db.createUser({user: "test1",pwd: "111111",roles: [{ role: "readWrite", db: "atomdco" }]
})
exit
exit

11.7 停止并删除 MongoDB 容器

podman stop mongodb
podman rm mongodb

11.8 修改配置文件 mongod.conf 以启用认证

编辑 mongod.conf 文件,启用 authorization

systemLog:destination: filepath: "/var/log/mongodb/mongod.log"logAppend: true
storage:dbPath: "/data/db"
net:bindIp: "0.0.0.0"port: 27017
security:authorization: "enabled"

11.9 重新运行 MongoDB 容器(启用认证)

podman run -d \--name mongodb \-v ~/mongodb/data:/data/db \-v ~/mongodb/logs:/var/log/mongodb \-v ~/mongodb/mongod.conf:/etc/mongod.conf \--network dco-net \docker.io/library/mongo:latest \-f /etc/mongod.conf

11.10 验证 MongoDB 容器是否正确运行

podman ps -a

11.11 验证日志文件

ls -l ~/mongodb/logs

11.12 验证端口监听

podman exec -it mongodb /bin/bash
ss -tuln

11.13 修改 etc/godco-api.yaml 中的 MongoDB 连接字符串

MonDB:Url: "mongodb://test1:111111@mongodb:27017/?tls=false&authSource=atomdco"DbName: "atomdco"

11.14 运行 godco 容器

podman run -d \-p 8080:8080 \-v /path/to/your/etc:/app/etc \-v /path/to/your/static:/app/static \--network dco-net \--name dco-verification-app \godco:latest

11.15 验证 godco 容器的日志

podman logs dco-verification-app

或者实时查看日志文件:

podman logs -f dco-verification-app

11.16 使用 mongosh 连接到 MongoDB 并提供认证信息

  1. 获取 MongoDB 容器的 IP 地址

    podman inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' mongodb
    

    假设输出的 IP 地址为 10.89.0.5

  2. 连接到 MongoDB 并提供认证信息

    mongosh "mongodb://test1:111111@10.89.0.5:27017/?authSource=atomdco"
    
  3. 验证数据库

    show databases
    

    你应该能看到类似以下的输出:

    admin   0.000GB
    config  0.000GB
    local   0.000GB
    atomdco 0.000GB
    

通过这些步骤,确保 MongoDB 容器正确运行并加载配置文件,同时 godco 容器能够通过 Docker 网络成功连接到 MongoDB 容器。

12. 参考资料

  • Podman 官方文档
  • MongoDB 官方文档
  • MongoDB Shell 官方文档

13. 作者信息

Author: csdn猫哥,转载请注明出处
Date: 2025-02-01


通过本文,你将掌握如何使用 Podman 部署 MongoDB 数据库,并配置其他容器通过 Docker 网络连接到 MongoDB。确保在每一阶段都仔细检查配置文件和权限设置,以避免常见的启动问题。


详细步骤和命令总结

以下是完整的步骤和命令总结,确保 MongoDB 容器正确部署并启用认证:

1. 创建目录并调整权限
mkdir -p ~/mongodb/data
mkdir -p ~/mongodb/logs
sudo chown -R 999:999 ~/mongodb/data
sudo chown -R 999:999 ~/mongodb/logs
2. 创建配置文件 mongod.conf(禁用认证)

在主机上创建 mongod.conf 文件,内容如下:

systemLog:destination: filepath: "/var/log/mongodb/mongod.log"logAppend: true
storage:dbPath: "/data/db"
net:bindIp: "0.0.0.0"port: 27017
security:authorization: "disabled"
3. 创建自定义 Docker 网络
podman network create dco-net
4. 运行 MongoDB 容器(禁用认证)
podman run -d \--name mongodb \-v ~/mongodb/data:/data/db \-v ~/mongodb/logs:/var/log/mongodb \-v ~/mongodb/mongod.conf:/etc/mongod.conf \--network dco-net \docker.io/library/mongo:latest \-f /etc/mongod.conf
5. 创建 admin 用户和权限
podman exec -it mongodb /bin/bash
mongo
use admin
db.createUser({user: "admin",pwd: "admin123",roles: [{ role: "root", db: "admin" }]
})
exit
exit
6. 创建 atomdco 用户和权限
podman exec -it mongodb /bin/bash
mongo -u admin -p admin123 --authenticationDatabase admin
use atomdco
db.createUser({user: "test1",pwd: "111111",roles: [{ role: "readWrite", db: "atomdco" }]
})
exit
exit
7. 停止并删除 MongoDB 容器
podman stop mongodb
podman rm mongodb
8. 修改配置文件 mongod.conf 以启用认证

编辑 mongod.conf 文件,启用 authorization

systemLog:destination: filepath: "/var/log/mongodb/mongod.log"logAppend: true
storage:dbPath: "/data/db"
net:bindIp: "0.0.0.0"port: 27017
security:authorization: "enabled"
9. 重新运行 MongoDB 容器(启用认证)
podman run -d \--name mongodb \-v ~/mongodb/data:/data/db \-v ~/mongodb/logs:/var/log/mongodb \-v ~/mongodb/mongod.conf:/etc/mongod.conf \--network dco-net \docker.io/library/mongo:latest \-f /etc/mongod.conf
10. 验证 MongoDB 容器是否正确运行
podman ps -a
11. 验证日志文件
ls -l ~/mongodb/logs
12. 验证端口监听
podman exec -it mongodb /bin/bash
ss -tuln
13. 修改 etc/godco-api.yaml 中的 MongoDB 连接字符串
MonDB:Url: "mongodb://test1:111111@mongodb:27017/?tls=false&authSource=atomdco"DbName: "atomdco"
14. 运行 godco 容器
podman run -d \-p 8080:8080 \-v /path/to/your/etc:/app/etc \-v /path/to/your/static:/app/static \--network dco-net \--name dco-verification-app \godco:latest
15. 验证 godco 容器的日志
podman logs dco-verification-app

或者实时查看日志文件:

podman logs -f dco-verification-app
16. 使用 mongosh 连接到 MongoDB 并提供认证信息
  1. 获取 MongoDB 容器的 IP 地址

    podman inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' mongodb
    

    假设输出的 IP 地址为 10.89.0.5

  2. 连接到 MongoDB 并提供认证信息

    mongosh "mongodb://test1:111111@10.89.0.5:27017/?authSource=atomdco"
    
  3. 验证数据库

    show databases
    

    你应该能看到类似以下的输出:

    admin   0.000GB
    config  0.000GB
    local   0.000GB
    atomdco 0.000GB
    

通过这些步骤,确保 MongoDB 容器正确运行并加载配置文件,同时 godco 容器能够通过 Docker 网络成功连接到 MongoDB 容器。


希望这篇博文能帮助你顺利使用 Docker/Podman 部署 MongoDB 数据库,并解决常见的部署和使用问题。如果你有任何疑问或遇到其他问题,请随时留言提问。

相关文章:

使用 Docker(Podman) 部署 MongoDB 数据库及使用详解

在现代开发环境中,容器化技术(如 Docker 和 Podman)已成为部署和管理应用程序的标准方式。本文将详细介绍如何使用 Podman/Docker 部署 MongoDB 数据库,并确保其他应用程序容器能够通过 Docker 网络成功连接到 MongoDB。我们将逐步…...

npm 和 pip 安装中常见问题总结

安装路径的疑惑:NPM 和 PIP 的安装机制 NPM 安装路径规则: 依赖安装在项目目录下: 当你运行 npm install --save-dev jest,它会在当前目录(例如 F:\)下创建一个 node_modules 文件夹,把 jest 安…...

golang面试题

目录 go版本新增功能 Go 1.11 Go 1.18 Go 1.5 go关键字 : 1. 用于声明的关键字 2. 控制流关键字 3. 包相关关键字 4. 并发相关关键字 5. 异常处理关键字 6. 接口和类型断言关键字 go数据类型: 复合数据类型 引用数据类型 接口类型 GC垃…...

基于UKF-IMM无迹卡尔曼滤波与交互式多模型的轨迹跟踪算法matlab仿真,对比EKF-IMM和UKF

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 基于UKF-IMM无迹卡尔曼滤波与交互式多模型的轨迹跟踪算法matlab仿真,对比EKF-IMM和UKF。 2.测试软件版本以及运行结果展示 MATLAB2022A版本运行 3.核心程序 .…...

Install Python

目录 1.Install Python 1.安装Python 3 2.在Windows上安装Python 3.在Mac上安装Python 4.在Linux上安装Python 5.运行Python 2.Python解释器 1.CPython 2.IPython 3.PyPy 4.Jython 5.IronPython 6.小结 1.Install Python 因为Python是跨平台的,它可以…...

云计算部署模式全面解析

目录 引言公有云私有云混合云三种部署模式的对比选择建议未来趋势结语 1. 引言 随着云计算技术的快速发展,企业在选择云部署模式时面临着多种选择。本文将深入探讨云计算的三种主要部署模式:公有云、私有云和混合云,帮助读者全面了解它们的特点、优势及适用场景。 © iv…...

tomcat核心组件及原理概述

目录 1. tomcat概述 1.1 概念 1.2 官网地址 2. 基本使用 2.1下载 3. 整体架构 3.1 核心组件 3.2 从web.xml配置和模块对应角度 3.3 如何处理请求 4. 配置JVM参数 5. 附录 1. tomcat概述 1.1 概念 什么是tomcat Tomcat是一个开源、免费、轻量级的Web服务器。 Tomca…...

GIS教程:全国数码商城系统

文章目录 注册高德地图API普通网页中测试地图加载地图添加标记地图配置点标记 Marker添加弹框创建vue项目并添加高德地图创建项目加载高德地图项目首页布局封装axios和配置代理服务器获取城市热门信息获取城市区县信息获取区县商城信息获取指定城市区县的经纬度坐标将地图缩放到…...

Level DB --- table.format

table.format是Level DB中table序列化、反序列化重要的辅助类。它用来定义序列化、反序列化的核心结构体和操作实现。 BlockHandle table.format中的BlockHandle类主要用来记录当前block在总的序列化中的offset位置,以及当前block的size,这里面的Block…...

《编写可读代码的艺术》读书笔记

1. 写在前面 借着春节放假的几天, 读了下《编写可读代码的艺术》这本书, 这本书不是很长,主要关注代码的一些编写细节,比如方法命名,函数命名,语句组织,任务分解等, 旨在让写的代码…...

(9)下:学习与验证 linux 里的 epoll 对象里的 EPOLLIN、 EPOLLHUP 与 EPOLLRDHUP 的不同。小例子的实验

(4)本实验代码的蓝本,是伊圣雨老师里的课本里的代码,略加改动而来的。 以下是 服务器端的代码: 每当收到客户端的报文时,就测试一下对应的 epoll 事件里的事件标志,不读取报文内容,…...

MySQL基础-多表查询

多表查询-多表关系 多表查询-概述 例如执行下行sql语句就会出现笛卡尔积: select *from emp,dept; --消除笛卡尔积 select * from emp,dept where emp.dept_id dept.id; 多表查询-查询分类 多表查询-连接查询-内连接 --内连接演示 --1.查询每一个员工的姓名,及关…...

RK3568 opencv播放视频

文章目录 一、opencv相关视频播放类1. `cv::VideoCapture` 类主要构造方法:主要方法:2. 视频播放基本流程代码示例:3. 获取和设置视频属性4. 结合 FFmpeg 使用5. OpenCV 视频播放的局限性6. 结合 Qt 实现更高级的视频播放总结二、QT中的代码实现一、opencv相关视频播放类 在…...

C++中的类型转换

文章目录 一、概述二、隐式类型转换(Implicit Conversion)三、显式类型转换(Explicit Conversion)四、C 风格类型转换 一、概述 C 提供了多种类型转换(Type Conversion)方式,以便在不同类型的数…...

day7手机拍照装备

对焦对不上:1、光太暗;2、离太近;3、颜色太单一没有区分点 滤镜可以后期P 渐变灰滤镜:均衡色彩,暗的地方亮一些,亮的地方暗一些 中灰滤镜:减少光差 手机支架:最基本70cm即可 手…...

Joplin 插件在Vscode中无法显示图片

1.问题 在vscode里面装好joplin插件之后,无法显示图片内容。 粘贴的图片可以再vscode中显示,无法再joplin客户端显示 2.解决方法 这种情况是因为和vscode自带的MD编辑器的预览模式有冲突,或者没用通过专用方式上传图片。 方法一&#xff…...

ReentrantReadWriteLock源码分析

文章目录 概述一、状态位设计二、读锁三、锁降级机制四、写锁总结 概述 ReentrantReadWriteLock(读写锁)是对于ReentranLock(可重入锁)的一种改进,在可重入锁的基础上,进行了读写分离。适用于读多写少的场景…...

ChatGPT-4o和ChatGPT-4o mini的差异点

在人工智能领域,OpenAI再次引领创新潮流,近日正式发布了其最新模型——ChatGPT-4o及其经济实惠的小型版本ChatGPT-4o Mini。这两款模型虽同属于ChatGPT系列,但在性能、应用场景及成本上展现出显著的差异。本文将通过图文并茂的方式&#xff0…...

小程序设计和开发:什么是竞品分析,如何进行竞品分析

一、竞品分析的定义 竞品分析是指对竞争对手的产品进行深入研究和比较,以了解市场动态、发现自身产品的优势和不足,并为产品的设计、开发和营销策略提供参考依据。在小程序设计和开发中,竞品分析可以帮助开发者了解同类型小程序的功能、用户体…...

计算机网络之计算机网络的分类

计算机网络可以根据不同的角度进行分类,以下是几种常见的分类方式: 1. 按照规模和范围: 局域网(LAN,Local Area Network):覆盖较小范围(例如一个建筑物或校园)&#xf…...

什么是门控循环单元?

一、概念 门控循环单元(Gated Recurrent Unit,GRU)是一种改进的循环神经网络(RNN),由Cho等人在2014年提出。GRU是LSTM的简化版本,通过减少门的数量和简化结构,保留了LSTM的长时间依赖…...

ESP32-c3实现获取土壤湿度(ADC模拟量)

1硬件实物图 2引脚定义 3使用说明 4实例代码 // 定义土壤湿度传感器连接的模拟输入引脚 const int soilMoisturePin 2; // 假设连接到GPIO2void setup() {// 初始化串口通信Serial.begin(115200); }void loop() {// 读取土壤湿度传感器的模拟值int sensorValue analogRead…...

获取snmp oid的小方法1(随手记)

snmpwalk遍历设备的mib # snmpwalk -v <SNMP version> -c <community-id> <IP> . snmpwalk -v 2c -c test 192.168.100.201 .根据获取的值&#xff0c;找到某一个想要的值的oid # SNMPv2-MIB::sysName.0 STRING: test1 [rootzabbix01 fonts]# snmpwalk -v…...

【C++篇】哈希表

目录 一&#xff0c;哈希概念 1.1&#xff0c;直接定址法 1.2&#xff0c;哈希冲突 1.3&#xff0c;负载因子 二&#xff0c;哈希函数 2.1&#xff0c;除法散列法 /除留余数法 2.2&#xff0c;乘法散列法 2.3&#xff0c;全域散列法 三&#xff0c;处理哈希冲突 3.1&…...

Nginx开发01:基础配置

一、下载和启动 1.下载、使用命令行启动&#xff1a;Web开发&#xff1a;web服务器-Nginx的基础介绍&#xff08;含AI文稿&#xff09;_nginx作为web服务器,可以承担哪些基本任务-CSDN博客 注意&#xff1a;我配置的端口是81 2.测试连接是否正常 访问Welcome to nginx! 如果…...

mysqldump+-binlog增量备份

注意&#xff1a;二进制文件删除必须使用help purge 不可用rm -f 会崩 一、概念 增量备份&#xff1a;仅备份上次备份以后变化的数据 差异备份&#xff1a;仅备份上次完全备份以后变化的数据 完全备份&#xff1a;顾名思义&#xff0c;将数据完全备份 其中&#xff0c;…...

hive:数据导入,数据导出,加载数据到Hive,复制表结构

hive不建议用insert,因为Hive是建立在Hadoop之上的数据仓库工具&#xff0c;主要用于批处理和大数据分析&#xff0c;而不是为OLTP&#xff08;在线事务处理&#xff09;操作设计的。INSERT操作会非常慢 数据导入 命令行界面:建一个文件 查询数据>>复制>>粘贴到新…...

【工欲善其事】利用 DeepSeek 实现复杂 Git 操作:从原项目剥离出子版本树并同步到新的代码库中

文章目录 利用 DeepSeek 实现复杂 Git 操作1 背景介绍2 需求描述3 思路分析4 实现过程4.1 第一次需求确认4.2 第二次需求确认4.3 第三次需求确认4.4 V3 模型&#xff1a;中间结果的处理4.5 方案验证&#xff0c;首战告捷 5 总结复盘 利用 DeepSeek 实现复杂 Git 操作 1 背景介绍…...

mac 手工安装OpenSSL 3.4.0

如果你希望继续安装 openssl-3.4.0 而不是降级到 3.1.1&#xff0c;可以尝试以下解决方案。根据你提供的错误信息&#xff0c;问题可能出在测试阶段&#xff08;make test&#xff09;&#xff0c;我们可以尝试跳过测试或修复测试失败的原因。 --- ### **解决方案&#xff1a…...

构建一个数据分析Agent:提升分析效率的实践

在上一篇文章中,我们讨论了如何构建一个智能客服Agent。今天,我想分享另一个实际项目:如何构建一个数据分析Agent。这个项目源于我们一个金融客户的真实需求 - 提升数据分析效率,加快决策速度。 从分析师的痛点说起 记得和分析师团队交流时的场景&#xff1a; 小张&#xff…...

【SRC排名】安全应急响应中心SRC上榜记录

2023年 新氧第三 https://security.soyoung.com/top 合合第四 https://security.intsig.com/index.php?m&chall&aindex 2024年 好未来第一 https://src.100tal.com/index.php?m&chall&aindex&#xff08;官网是总榜&#xff0c;年榜只有海报&#xff09;…...

截止到2025年2月1日,Linux的Wayland还有哪些问题是需要解决的?

截至2025年2月1日,Wayland需要解决的核心问题可按权重从高到低排序如下: 1. 屏幕共享与远程桌面的完整支持(权重:★★★★★) 问题:企业场景(如 腾讯会议)、开发者远程调试依赖稳定的屏幕共享功能。当前Wayland依赖PipeWire和XWayland,存在权限管理复杂、多显示器选择…...

TCP编程

1.socket函数 int socket(int domain, int type, int protocol); 头文件&#xff1a;include<sys/types.h>&#xff0c;include<sys/socket.h> 参数 int domain AF_INET: IPv4 Internet protocols AF_INET6: IPv6 Internet protocols AF_UNIX, AF_LOCAL : Local…...

Java泛型深度解析(JDK23)

第一章 泛型革命 1.1 类型安全的进化史 前泛型时代的类型转换隐患 代码的血泪史&#xff08;Java 1.4版示例&#xff09;&#xff1a; List rawList new ArrayList(); rawList.add("Java"); rawList.add(Integer.valueOf(42)); // 编译通过// 灾难在运行时爆发…...

【JavaEE进阶】图书管理系统 - 壹

目录 &#x1f332;序言 &#x1f334;前端代码的引入 &#x1f38b;约定前后端交互接口 &#x1f6a9;接口定义 &#x1f343;后端服务器代码实现 &#x1f6a9;登录接口 &#x1f6a9;图书列表接口 &#x1f384;前端代码实现 &#x1f6a9;登录页面 &#x1f6a9;…...

搜索旋转排序数组(二分查找)

测试链接&#xff1a;https://leetcode.cn/problems/search-in-rotated-sorted-array/https://leetcode.cn/problems/search-in-rotated-sorted-array/https://leetcode.cn/problems/search-in-rotated-sorted-array/ 问题描述 假设我们有一个旋转排序的数组&#xff0c;这个…...

STM32 TIM定时器配置

TIM简介 TIM&#xff08;Timer&#xff09;定时器 定时器可以对输入的时钟进行计数&#xff0c;并在计数值达到设定值时触发中断 16位计数器、预分频器、自动重装寄存器的时基单元&#xff0c;在72MHz计数时钟下可以实现最大59.65s的定时 不仅具备基本的定时中断功能&#xff…...

AI开发之 ——Anaconda 介绍

Anaconda 是什么&#xff1f; 在这里插入图片描述 一句话&#xff1a;Anaconda 是Python 库和环境便捷管理的平台。 Anaconda 是数据科学和 AI 领域的工具&#xff0c;通过集成常用库和工具&#xff0c;简化了环境管理和包安装&#xff0c;特别适合初学者和需要快速上手的开…...

Uber损失(Huber Loss):从均方误差到绝对误差的完美过渡

前言 在机器学习的世界里,损失函数就像是你在迷宫中的导航系统,它决定了你到底能否顺利找到出口,而出口的大小就代表着模型的表现。而在这么多的“导航系统”中,Huber损失(你可以叫它“Uber损失”,我觉得这名字挺有意思的,能不能打车到一个更好的模型呢?)凭借其独特的…...

【Arxiv 大模型最新进展】TOOLGEN:探索Agent工具调用新范式

【Arxiv 大模型最新进展】TOOLGEN&#xff1a;探索Agent工具调用新范式 文章目录 【Arxiv 大模型最新进展】TOOLGEN&#xff1a;探索Agent工具调用新范式研究框图方法详解 作者&#xff1a;Renxi Wang, Xudong Han 等 单位&#xff1a;LibrAI, Mohamed bin Zayed University o…...

41【文件名的编码规则】

我们在学习的过程中&#xff0c;写出数据或读取数据时需要考虑编码类型 火山采用&#xff1a;UTF-16 易语言采用&#xff1a;GBK php采用&#xff1a;UTF-8 那么我们写出的文件名应该是何种编码的&#xff1f;比如火山程序向本地写出一个“测试.txt”&#xff0c;理论上这个“测…...

Linux命令入门

Linux命令入门 ls命令 ls命令的作用是列出目录下的内容&#xff0c;语法细节如下: 1s[-a -l -h] [Linux路径] -a -l -h是可选的选项 Linux路径是此命令可选的参数 当不使用选项和参数,直接使用ls命令本体,表示:以平铺形式,列出当前工作目录下的内容 ls命令的选项 -a -a选项&a…...

如何用函数去计算x年x月x日是(C#)

如何用函数去计算x年x月x日是? 由于现在人工智能的普及,我们往往会用计算机去算,或者去记录事情 1.计算某一年某一个月有多少天 2.计算某年某月某日是周几 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threadin…...

29.Word:公司本财年的年度报告【13】

目录 NO1.2.3.4 NO5.6.7​ NO8.9.10​ NO1.2.3.4 另存为F12&#xff1a;考生文件夹&#xff1a;Word.docx选中绿色标记的标题文本→样式对话框→单击右键→点击样式对话框→单击右键→修改→所有脚本→颜色/字体/名称→边框&#xff1a;0.5磅、黑色、单线条&#xff1a;点…...

Flutter常用Widget小部件

小部件Widget是一个类&#xff0c;按照继承方式&#xff0c;分为无状态的StatelessWidget和有状态的StatefulWidget。 这里先创建一个简单的无状态的Text小部件。 Text文本Widget 文件&#xff1a;lib/app/app.dart。 import package:flutter/material.dart;class App exte…...

高可用 Keepalived 服务部署流程

一、配置文件 vim /etc/keepalived/keepalived.confGLOBAL CONFIGURATION --- 全局配置部分VRRPD CONFIGURATION --- VRRP协议配置部分LVS CONFIGURATION --- LVS服务管理配置部分[rootlb01 ~]# cat /etc/keepalived/keepalived.…...

网站结构优化:加速搜索引擎收录的关键

本文来自&#xff1a;百万收录网 原文链接&#xff1a;https://www.baiwanshoulu.com/9.html 网站结构优化对于加速搜索引擎收录至关重要。以下是一些关键策略&#xff0c;旨在通过优化网站结构来提高搜索引擎的抓取效率和收录速度&#xff1a; 一、合理规划网站架构 采用扁…...

【深度学习】softmax回归的从零开始实现

softmax回归的从零开始实现 (就像我们从零开始实现线性回归一样&#xff0c;)我们认为softmax回归也是重要的基础&#xff0c;因此(应该知道实现softmax回归的细节)。 本节我们将使用Fashion-MNIST数据集&#xff0c;并设置数据迭代器的批量大小为256。 import torch from IP…...

AMS仿真方法

1. 准备好verilog文件。并且准备一份.vc文件&#xff0c;将所有的verilog file的路径全部写在里面。 2. 将verilog顶层导入到virtuoso中&#xff1a; 注意.v只要引入顶层即可。不需要全部引入。实际上顶层里面只要包含端口即可&#xff0c;即便是空的也没事。 引入时会报warni…...

多模态论文笔记——ViViT

大家好&#xff0c;这里是好评笔记&#xff0c;公主号&#xff1a;Goodnote&#xff0c;专栏文章私信限时Free。本文详细解读多模态论文《ViViT: A Video Vision Transformer》&#xff0c;2021由google 提出用于视频处理的视觉 Transformer 模型&#xff0c;在视频多模态领域有…...