4. docker镜像、Dockerfile
docker镜像、Dockerfile
- 一、docker镜像
- 1、镜像介绍
- 2、镜像核心技术
- 二、Dockerfile定制镜像
- 1、Dockerfile使用流程
- 1.1 编写Dockerfile
- 1.2、构建镜像
- 1.3 创建容器测试镜像定制操作
- 2、Dockerfile常用指令
- 三、部署springcloud微服务架构的商品秒杀项目
- 1、部署项目需要的基础服务
- 1.1 部署redis缓存
- 1.2 部署MySQL数据库
- 1.3 部署rabbitmq消息队列
- 2、部署微服务框架
- 2.1 部署erueka 注册中心
- 2.2 部署config-server 配置中心
- 2.3 部署zuul-server 网关
- 3、部署业务
- 3.1 部署会员服务
- 3.2 部署商品展示业务
- 3.3 部署秒杀业务
- 3.4 部署web前端
- 3.4 部署websocket, 实现http长连接
一、docker镜像
1、镜像介绍
-
分层的文件系统
优势:节省空间、速度快、重用 -
只读
创建容器时,会在镜像上面添加一个可写层

2、镜像核心技术
- COW copy on write 写时复制
- Union fs 联合文件系统
overlay2
device mapper
[root@martin-host ~]# docker info
Client: Docker Engine - CommunityVersion: 26.1.4Context: defaultDebug Mode: falsePlugins:buildx: Docker Buildx (Docker Inc.)Version: v0.14.1Path: /usr/libexec/docker/cli-plugins/docker-buildxcompose: Docker Compose (Docker Inc.)Version: v2.27.1Path: /usr/libexec/docker/cli-plugins/docker-composeServer:Containers: 1Running: 0Paused: 0Stopped: 1Images: 4Server Version: 26.1.4Storage Driver: overlay2
二、Dockerfile定制镜像
1、Dockerfile使用流程
1.1 编写Dockerfile
[root@martin-host testDockerfile]# ls
CentOS-Base.repo Dockerfile
[root@martin-host testDockerfile]# cat Dockerfile
FROM centos:7COPY CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repoRUN yum install -y net-tools
1.2、构建镜像
[root@martin-host testDockerfile]# docker build -t centos:v1 ./
1.3 创建容器测试镜像定制操作
[root@martin-host testDockerfile]# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
centos v1 3e88e2fdb6df 56 seconds ago 461MB
redis latest 7614ae9453d1 2 years ago 113MB
centos 7 eeb6ee3f44bd 2 years ago 204MB
nginx 1.18 c2c45d506085 3 years ago 133MB[root@martin-host testDockerfile]# docker run -tid --name=test1 centos:v1
949b757d2b35b4d115a88f69cc8f1d704b6e6fcd34a64d4ecbfc28422e7530aa[root@martin-host testDockerfile]# docker exec -ti test1 bash
[root@949b757d2b35 /]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1472inet 10.88.7.2 netmask 255.255.255.0 broadcast 10.88.7.255ether 02:42:0a:58:07:02 txqueuelen 0 (Ethernet)RX packets 8 bytes 656 (656.0 B)
2、Dockerfile常用指令
- FROM
指定基础镜像;
镜像不存在,构建镜像时自动下载镜像
建议尽量选择小容量的镜像 / debian/ ubuntu
FROM 镜像名称
- RUN
指定定制命令
RUN 命令 && 命令 && 命令
- CMD
定义容器创建时,自动执行的命令
注意事项:
1、前台启动服务的指令
2、创建容器时,不要自己指定命令,会覆盖CMD
3、一个Dockerfile中只能有一条CMD指令
CMD httpd -D FOREGROUND
CMD ["httpd", "-D", "FOREGROUND"] // 推荐
- ENTRYPOINT
定义容器创建时,自动执行的命令
不会被覆盖
ENTRYPOINT ["httpd", "-D", "FOREGROUND"]
- COPY
复制文件
注意:只能复制本地文件
COPY 源文件 目的文件
- ADD
复制文件
注意:
1、支持本地文件、URL、压缩包会自动解压
ADD 源文件 目的文件
ADD file01 /tmp/file01
ADD http://nginx.org/download/nginx-1.27.0.tar.gz /tmp
ADD jdk-8u91-linux-x64.tar.gz /tmp
- EXPOSE
说明容器服务端口
注意:
1、-P随机发布端口时,Dockerfile中必须有EXPOSE指令
EXPOSE 端口 端口
- VOLUME
定义持久化存储的目录
创建容器时不使用-v明确指定目录,会自动生成匿名卷
VOLUME 目录
- ENV
定义环境变量
ENV 变量名称 值
- WORKDIR
定义当前目录
WORKDIR 目录
- USER
指定容器运行的用户
USER 用户名
三、部署springcloud微服务架构的商品秒杀项目
1、部署项目需要的基础服务
1.1 部署redis缓存
[root@martin-host web]# docker run -tid --name=redis --hostname=redis --restart=always --net=host redis:3.2.10
33ff624e19c309793fdfa23dbd5c0a88490637cd5e0090bfee7dc98c63721732[root@martin-host web]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
33ff624e19c3 redis:3.2.10 "docker-entrypoint.s…" 5 seconds ago Up 4 seconds redis[root@martin-host web]# netstat -tunlp | grep 6379
tcp 0 0 0.0.0.0:6379 0.0.0.0:* LISTEN 2570/redis-server *
tcp6 0 0 :::6379 :::* LISTEN 2570/redis-server *
1.2 部署MySQL数据库
[root@martin-host web]# docker run -tid --name=web_db --hostname=web_db --restart=always --net=host -e MYSQL_ROOT_PASSWORD=admin mysql:5.7
4ba7f19a4e15ef11facd18e329796dc391c0d0ce1a144fe7f67380fad65ab043
[root@martin-host web]#
[root@martin-host web]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4ba7f19a4e15 mysql:5.7 "docker-entrypoint.s…" 4 seconds ago Up 3 seconds web_db
33ff624e19c3 redis:3.2.10 "docker-entrypoint.s…" About a minute ago Up About a minute redis[root@martin-host web]# docker cp shop_goods.sql web_db:/
Successfully copied 3.58kB to web_db:/
[root@martin-host web]# docker cp shop_member.sql web_db:/
Successfully copied 3.58kB to web_db:/
[root@martin-host web]# docker cp shop_seckill.sql web_db:/
Successfully copied 7.68kB to web_db:/
[root@martin-host web]#
[root@martin-host web]# docker exec -ti web_db bash
root@web_db:/#
root@web_db:/# mysql -uroot -padmin < /shop_goods.sql
mysql: [Warning] Using a password on the command line interface can be insecure.
root@web_db:/# mysql -uroot -padmin < /shop_member.sql
mysql: [Warning] Using a password on the command line interface can be insecure.
root@web_db:/# mysql -uroot -padmin < /shop_seckill.sql
mysql: [Warning] Using a password on the command line interface can be insecure.
root@web_db:/#
root@web_db:/# mysql -uroot -padmin
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 5.7.35 MySQL Community Server (GPL)Copyright (c) 2000, 2021, Oracle and/or its affiliates.Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql>
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| shop_goods |
| shop_member |
| shop_seckill |
| sys |
+--------------------+
7 rows in set (0.00 sec)mysql>
mysql> grant all on *.* to 'root'@'%' identified by 'admin';
Query OK, 0 rows affected, 1 warning (0.00 sec)mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)mysql> exit
Bye
root@web_db:/# exit
exit
1.3 部署rabbitmq消息队列
[root@martin-host web]# docker run -tid --name=rabbitmq --hostname=rabbitmq --net=host rabbitmq:3-management
d9e860cf2773cbf4c6462483fb5dabea600b00295f44f55d088f5797de0c8efa
[root@martin-host web]#
[root@martin-host web]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d9e860cf2773 rabbitmq:3-management "docker-entrypoint.s…" 3 seconds ago Up 2 seconds rabbitmq
4ba7f19a4e15 mysql:5.7 "docker-entrypoint.s…" 4 minutes ago Up 4 minutes web_db
33ff624e19c3 redis:3.2.10 "docker-entrypoint.s…" 6 minutes ago Up 6 minutes redis[root@martin-host ~]# docker exec -ti rabbitmq bashroot@rabbitmq:/# rabbitmqctl add_user liushao admin
Adding user "liushao" ...
Done. Don't forget to grant the user permissions to some virtual hosts! See 'rabbitmqctl help set_permissions' to learn more.root@rabbitmq:/# rabbitmqctl set_permissions liushao ".*" ".*" ".*"
Setting permissions for user "liushao" in vhost "/" ...
root@rabbitmq:/#
2、部署微服务框架
2.1 部署erueka 注册中心
负责注册所有服务的通信地址
[root@martin-host web]# cat eurekaDockerfile
FROM adoptopenjdk/openjdk8:latestCOPY eureka-server-1.0-SNAPSHOT.jar /eureka-server.jarCMD ["java", "-jar", "/eureka-server.jar"]
[root@martin-host web]#
[root@martin-host web]# docker build -t eureka-server:1.0 -f eurekaDockerfile ./ root@martin-host web]# docker run -tid --name=eureka-server --hostname=eureka-server --restart=always --net=host eureka-server:1.0
c682585f005c0be0ffae1dba1232410f92045c0763de5393d1efaedd79a0bdb3[root@martin-host web]# docker logs eureka-server
2024-07-19 02:40:53.881 INFO 1 --- [ main] .s.c.n.e.s.EurekaAutoServiceRegistration : Updating port to 8761
2.2 部署config-server 配置中心
负责集中管理所有业务组件的配置文件、从远程的git服务器拉取配置文件
[root@martin-host web]# cat configDockerfile
FROM adoptopenjdk/openjdk8:latestCOPY config-server-1.0-SNAPSHOT.jar /config-server.jarCMD ["java", "-jar", "/config-server.jar"]
[root@martin-host web]#
[root@martin-host web]# docker build -t config-server:1.0 -f configDockerfile ./[root@martin-host web]# docker run -tid --name=config-server --hostname=config-server --net=host --restart=always config-server:1.0 [root@martin-host web]# docker logs config-server
2024-07-19 02:49:37.965 INFO 1 --- [ main] .s.c.n.e.s.EurekaAutoServiceRegistration : Updating port to 9100
2.3 部署zuul-server 网关
负责集中接收处理请求、反向代理 、负载均衡
[root@martin-host web]# cat zuulDockerfile
FROM adoptopenjdk/openjdk8:latestCOPY zuul-server-1.0-SNAPSHOT.jar /zuul-server.jarCMD ["java", "-jar", "/zuul-server.jar"]
[root@martin-host web]#
[root@martin-host web]# docker build -t zuul-server:1.0 -f zuulDockerfile ./[root@martin-host web]# docker run -tid --name=zuul-server --hostname=zuul-server --net=host --restart=always zuul-server:1.0 [root@martin-host web]# docker logs zuul-server
2024-07-19 02:56:57.602 INFO 1 --- [ main] .s.c.n.e.s.EurekaAutoServiceRegistration : Updating port to 9000
3、部署业务
3.1 部署会员服务
[root@martin-host web]# cat memberDockerfile
FROM adoptopenjdk/openjdk8:latestCOPY member-server-1.0-SNAPSHOT.jar /member-server.jar CMD ["java", "-jar", "/member-server.jar"][root@martin-host web]# docker build -t member-server:1.0 -f memberDockerfile ./[root@martin-host web]# docker run -tid --name=member-server --hostname=localhost --net=host --restart=always member-server:1.0 2024-07-19 03:26:42.696 INFO 1 --- [ main] .s.c.n.e.s.EurekaAutoServiceRegistration : Updating port to 8083
3.2 部署商品展示业务
[root@martin-host web]# cat goodDockerfile
FROM adoptopenjdk/openjdk8:latestCOPY good-server-1.0-SNAPSHOT.jar /good-server.jarCMD ["java", "-jar", "/good-server.jar"]
[root@martin-host web]#
[root@martin-host web]# docker build -t good-server:1.0 -f goodDockerfile ./[root@martin-host web]# docker run -tid --name=good-server --hostname=localhost --net=host --restart=always good-server:1.0 2024-07-19 03:29:49.555 INFO 1 --- [ main] .s.c.n.e.s.EurekaAutoServiceRegistration : Updating port to 8084
3.3 部署秒杀业务
[root@martin-host web]# cat seckillDockerfile
FROM adoptopenjdk/openjdk8:latestCOPY seckill-server-1.0-SNAPSHOT.jar /seckill-server.jarCMD ["java", "-jar", "/seckill-server.jar"]
[root@martin-host web]#
[root@martin-host web]# docker build -t seckill-server:1.0 -f seckillDockerfile ./[root@martin-host web]# docker run -tid --name=seckill-server --hostname=localhost --net=host --restart=always seckill-server:1.0 2024-07-19 03:32:56.665 INFO 1 --- [ main] o.s.a.r.c.CachingConnectionFactory : Created new connection: rabbitConnectionFactory#1c6804cd:0/SimpleConnection@4fdfa676 [delegate=amqp://guest@192.168.183.10:5672/, localPort= 34446]
2024-07-19 03:32:56.851 INFO 1 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8085 (http) with context path ''
2024-07-19 03:32:56.853 INFO 1 --- [ main] .s.c.n.e.s.EurekaAutoServiceRegistration : Updating port to 8085
3.4 部署web前端
[root@martin-host web]# cat frontendDockerfile
FROM adoptopenjdk/openjdk8:latestCOPY frontend-server-0.0.1-SNAPSHOT.jar /frontend-server.jarCMD ["java", "-jar", "/frontend-server.jar"]
[root@martin-host web]#
[root@martin-host web]# docker build -t frontend-server:1.0 -f frontendDockerfile ./[root@martin-host web]# docker run -tid --name=frontend-server --hostname=localhost --net=host --restart=always frontend-server:1.0 2024-07-19 03:36:03.029 INFO 1 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path ''
3.4 部署websocket, 实现http长连接
[root@martin-host web]# cat websocketDockerfile
FROM adoptopenjdk/openjdk8:latestCOPY websocket-server-0.0.1-SNAPSHOT.jar /websocket-server.jarCMD ["java", "-jar", "/websocket-server.jar"]
[root@martin-host web]#
[root@martin-host web]# docker build -t websocket-server:1.0 -f websocketDockerfile ./
[+] Building 0.5s (7/7) FINISHED docker:default=> [internal] load build definition from websocketDockerfile 0.0s=> => transferring dockerfile: 193B 0.0s=> [internal] load metadata for docker.io/adoptopenjdk/openjdk8:latest 0.0s=> [internal] load .dockerignore 0.0s=> => transferring context: 2B 0.0s=> [internal] load build context 0.2s=> => transferring context: 21.84MB 0.2s=> CACHED [1/2] FROM docker.io/adoptopenjdk/openjdk8:latest 0.0s=> [2/2] COPY websocket-server-0.0.1-SNAPSHOT.jar /websocket-server.jar 0.2s=> exporting to image 0.1s=> => exporting layers 0.1s=> => writing image sha256:7d681a377f627c30765b92088008d4ac265f182be9ee93efa118400e5667482c 0.0s=> => naming to docker.io/library/websocket-server:1.0 0.0s
[root@martin-host web]#
[root@martin-host web]# docker run -tid --name=websocket-server --hostname=localhost --net=host --restart=always websocket-server:1.0
9fb88729fe38c44841a2691562deb47b428013150fcdc5974d8c06f43630e6792024-07-19 03:39:14.976 INFO 1 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8088 (http) with context path ''相关文章:
4. docker镜像、Dockerfile
docker镜像、Dockerfile 一、docker镜像1、镜像介绍2、镜像核心技术 二、Dockerfile定制镜像1、Dockerfile使用流程1.1 编写Dockerfile1.2、构建镜像1.3 创建容器测试镜像定制操作 2、Dockerfile常用指令 三、部署springcloud微服务架构的商品秒杀项目1、部署项目需要的基础服务…...
智能水果保鲜度检测:基于YOLO和深度学习的完整实现
引言 水果新鲜程度直接影响其口感和营养价值。为了提高水果品质管理的效率和准确性,本文介绍了一种基于深度学习的水果新鲜程度检测系统。该系统包括用户界面,利用YOLO(You Only Look Once)v8/v7/v6/v5模型进行水果新鲜程度检测&…...
C#中implicit 关键字的使用:隐式转换操作符
在 C# 中,implicit 关键字用于定义隐式转换操作符。隐式转换操作符允许自动将一种数据类型转换为另一种类型,而无需显式地调用转换方法或进行类型转换。下面将详细介绍 implicit 关键字的定义和使用。 1. 隐式转换操作符 定义 隐式转换操作符可以定义在一个类或结构体中,…...
Laravel表单验证:自定义规则的艺术
Laravel表单验证:自定义规则的艺术 在Web应用开发中,表单验证是确保数据完整性和安全性的关键步骤。Laravel提供了一个强大且灵活的验证系统,允许开发者定义自定义验证规则,以满足特定的业务需求。本文将详细介绍如何在Laravel中…...
Linux中的环境变量
一、环境变量定义 一般是指在操作系统中用来指定操作系统运行环境的一些参数 如:我们在编写C/C代码的时候,在链接的时候,从来不知道我们的所链接的动态静态库在哪里,但 是照样可以链接成功,生成可执行程序,…...
关于集成网络变压器的RJ45网口
集成网络变压器的RJ45网口是一种将网络变压器与RJ45接口集成在一起的网络连接解决方案。这种集成设计具有多项优势,使其在现代网络设备中得到广泛应用。 优势与特点 1. **空间节省**:集成设计减少了组件数量和连接线缆长度,有助于节省设备内…...
JMX 反序列化漏洞
前言 前段时间看到普元 EOS Platform 爆了这个洞,Apache James,Kafka-UI 都爆了这几个洞,所以决定系统来学习一下这个漏洞点。 JMX 基础 JMX 前置知识 JMX(Java Management Extensions,即 Java 管理扩展࿰…...
【Qt】常用控件 Q widget的enabled属性,geometry属性
Qt是一个实现图形化程序的程序。为了便于我们开发,Qt为我们提供了许多“控件”。我们需要熟悉并掌握这些控件的使用。 一.什么是控件 控件是构成⼀个图形化界⾯的基本要素. 示例一: 像上述⽰例一中的,按钮,列表视图,树形视图,单⾏输⼊框,多⾏输⼊框,滚动…...
Unity3d开发google chrome的dinosaur游戏
游戏效果 游戏中: 游戏中止: 一、制作参考 如何制作游戏?【15分钟】教会你制作Unity小恐龙游戏!新手15分钟内马上学会!_ unity教学 _ 制作游戏 _ 游戏开发_哔哩哔哩_bilibili 二、图片资源 https://download.csdn.…...
【数据分享】2013-2022年我国省市县三级的逐日SO2数据(excel\shp格式\免费获取)
空气质量数据是在我们日常研究中经常使用的数据!之前我们给大家分享了2000——2022年的省市县三级的逐日PM2.5数据和2013-2022年的省市县三级的逐日CO数据(均可查看之前的文章获悉详情)! 本次我们分享的是我国2013——2022年的省…...
【玩转C语言】第五讲--->数组-->一维和多维深度理解
🔥博客主页🔥:【 坊钰_CSDN博客 】 欢迎各位点赞👍评论✍收藏⭐ 引言: 大家好,我是坊钰,为了让大家深入了解C语言,我开创了【玩转C语言系列】,将为大家介绍C语言相关知识…...
Apache Flink 任务提交模式
Flink 任务提交模式 Flink可以基于多种模式部署:基于Standalone 部署模式,基于Yarn部署模式,基于Kubernetes部署模式以上不同集群部署模式下提交Flink任务会涉及申请资源,各角色交互过程,不同模式申请资源涉及到的角色…...
Ubuntu22.04安装OMNeT++
一、官网地址及安装指南 官网地址:OMNeT Discrete Event Simulator 官网安装指南(V6.0.3):https://doc.omnetpp.org/omnetpp/InstallGuide.pdf 官网下载地址:OMNeT Downloads 旧版本下载地址:OMNeT Old…...
Matlab课程设计——手指静脉识别项目
手指静脉识别项目 项目方案设计介绍 本项目实现手指图像的处理和匹配算法,需要处理的数据是本人不同手指的图像,首先经过图像处理,使得指静脉的纹理增强凸显处理,然后将所有的这些图像进行相互间的匹配,检验类内和类…...
centos软件安装
安装方式 一、二进制安装 --解压即用,只针对特殊平台 --jdk tomcat 二、RPM:按照一定规范安装软件,无法安装依赖的文件 --mysql 三、yum:远程安装基于RPM,把依赖的文件安装上去,需要联网 四、源码安装 jdk安…...
力扣 217. 存在重复元素,389. 找不同,705. 设计哈希集合,3. 无重复字符的最长子串,139. 单词拆分
217. 存在重复元素 题目 给你一个整数数组 nums 。如果任一值在数组中出现 至少两次 ,返回 true ;如果数组中每个元素互不相同,返回 false 。 AC代码 class Solution { public:bool containsDuplicate(vector<int>& nums) {// …...
嵌入式软件工作能力
1. 工作能力 技术能力强,并不代表工作能力 2. 流程把控 3. 项目管理 4. “找茬”能力 5. 文档输出能力...
景区导航导览系统:基于AR技术+VR技术的功能效益全面解析
在数字化时代背景下,游客对旅游体验的期望不断提升。游客们更倾向于使用手机作为旅行的贴身助手,不仅因为它能提供实时、精准的导航服务,更在于其融合AR(增强现实)、VR(虚拟现实)等前沿技术&…...
Mybatis-Plus代码生成器配置方法
Mybatis-Plus网址:https://baomidou.com/pages/779a6e/#%E4%BD%BF%E7%94%A8 第一步:引入依赖 <!-- 代码生成器 --> <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId>…...
三主机部署HP Anyware Manager服务
一、序言 在部署拓扑和方案方面,HP Anyware Manager 非常灵活,可以部署在单个主机中,也可以部署在多个主机中,具体取决于组织的网络环境和运营要求。 二、单主机部署 2.1 描述 此部署配置是当 Anyware Manager 和 MongoDB 以及…...
SciencePlots——绘制论文中的图片
文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了:一行…...
Go 语言接口详解
Go 语言接口详解 核心概念 接口定义 在 Go 语言中,接口是一种抽象类型,它定义了一组方法的集合: // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的: // 矩形结构体…...
CocosCreator 之 JavaScript/TypeScript和Java的相互交互
引擎版本: 3.8.1 语言: JavaScript/TypeScript、C、Java 环境:Window 参考:Java原生反射机制 您好,我是鹤九日! 回顾 在上篇文章中:CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...
高危文件识别的常用算法:原理、应用与企业场景
高危文件识别的常用算法:原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件,如包含恶意代码、敏感数据或欺诈内容的文档,在企业协同办公环境中(如Teams、Google Workspace)尤为重要。结合大模型技术&…...
【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)
本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...
LLMs 系列实操科普(1)
写在前面: 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容,原视频时长 ~130 分钟,以实操演示主流的一些 LLMs 的使用,由于涉及到实操,实际上并不适合以文字整理,但还是决定尽量整理一份笔…...
JavaScript 数据类型详解
JavaScript 数据类型详解 JavaScript 数据类型分为 原始类型(Primitive) 和 对象类型(Object) 两大类,共 8 种(ES11): 一、原始类型(7种) 1. undefined 定…...
数学建模-滑翔伞伞翼面积的设计,运动状态计算和优化 !
我们考虑滑翔伞的伞翼面积设计问题以及运动状态描述。滑翔伞的性能主要取决于伞翼面积、气动特性以及飞行员的重量。我们的目标是建立数学模型来描述滑翔伞的运动状态,并优化伞翼面积的设计。 一、问题分析 滑翔伞在飞行过程中受到重力、升力和阻力的作用。升力和阻力与伞翼面…...
使用SSE解决获取状态不一致问题
使用SSE解决获取状态不一致问题 1. 问题描述2. SSE介绍2.1 SSE 的工作原理2.2 SSE 的事件格式规范2.3 SSE与其他技术对比2.4 SSE 的优缺点 3. 实战代码 1. 问题描述 目前做的一个功能是上传多个文件,这个上传文件是整体功能的一部分,文件在上传的过程中…...
Pydantic + Function Calling的结合
1、Pydantic Pydantic 是一个 Python 库,用于数据验证和设置管理,通过 Python 类型注解强制执行数据类型。它广泛用于 API 开发(如 FastAPI)、配置管理和数据解析,核心功能包括: 数据验证:通过…...
