通过Dockerfile来实现项目可以指定读取不同环境的yml包
通过Dockerfile来实现项目可以指定读取不同环境的yml包
- 1. 挂载目录
- 2. DockerFile
- 3. 运行脚本deploy.sh
- 4. 运行
- 查看日志
- 进入容器
- 5. 接口测试
- 修改application-dev.yml
- 6. 优化Dockerfile
- 7. 部分参数解释
- 8. 优化不同环境下的日志也不同
- 调整 Dockerfile
- 修改部署脚本 deploy.sh
- 重新运行dev与prod
- 最新的目录
- 9. pplication.yml、application-dev.yml、application-test.yml、application-prod.yml这几个有什么区别?
1. 挂载目录

注意这里没有使用docker-compose



2. DockerFile
# 使用适合 Java 8 的官方镜像
FROM openjdk:8-jre-slim# 创建一个目录来存放应用
WORKDIR /app# 复制 jar 文件和配置文件到容器
COPY ./docker-test-0.0.1-SNAPSHOT.jar /app/docker-test.jar
COPY ./config /app/config# 创建日志目录
RUN mkdir /app/logs# 暴露应用端口
EXPOSE 9898# 设置环境变量默认值
ENV SPRING_PROFILES_ACTIVE=dev# 运行 Java 应用,指定配置文件位置
ENTRYPOINT ["java", "-jar", "-Dspring.config.location=/app/config/", "-Dlogging.file.name=/app/logs/app.log", "docker-test.jar"]
3. 运行脚本deploy.sh
#!/bin/bash# 部署脚本使用方式: ./deploy.sh [环境名]
# 环境名应为 dev 或 prodENV=$1
if [ "$ENV" != "prod" ] && [ "$ENV" != "dev" ]; thenecho "请指定正确的环境名: dev 或 prod"exit 1
fi# 定义容器和镜像名称
CONTAINER_NAME="docker-test-$ENV"
IMAGE_NAME="docker-test:$ENV"# 为不同环境设置不同的端口
if [ "$ENV" == "prod" ]; thenPORT=19898
elsePORT=29898
fi# 构建 Docker 镜像
docker build -t $IMAGE_NAME .# 停止并删除旧容器
docker rm -f $CONTAINER_NAME# 运行新的 Docker 容器,挂载日志目录到宿主机,并设置环境变量
docker run -d -p $PORT:9898 \-e SPRING_PROFILES_ACTIVE=$ENV \-v /Users/fanzhen/Documents/docker-project/logs:/app/logs \--name $CONTAINER_NAME $IMAGE_NAMEecho "部署 $ENV 环境完成,访问端口:$PORT"
4. 运行
(base) ➜ docker-project sh deploy.sh dev
[+] Building 6.6s (10/10) FINISHED docker:desktop-linux=> [internal] load build definition from Dockerfile 0.0s=> => transferring dockerfile: 681B 0.0s=> [internal] load metadata for docker.io/library/openjdk:8-jre-slim 6.2s=> [internal] load .dockerignore 0.0s=> => transferring context: 2B 0.0s=> CACHED [1/5] FROM docker.io/library/openjdk:8-jre-slim@sha256:53186129237fbb8bc0a12dd36da6761f4c7a2a20233c20d4eb0d497e4045a4f5 0.0s=> [internal] load build context 0.1s=> => transferring context: 19.55MB 0.1s=> [2/5] WORKDIR /app 0.1s=> [3/5] COPY ./docker-test-0.0.1-SNAPSHOT.jar /app/docker-test.jar 0.0s=> [4/5] COPY ./config /app/config 0.0s=> [5/5] RUN mkdir /app/logs 0.1s=> exporting to image 0.0s=> => exporting layers 0.0s=> => writing image sha256:c7dcfe05d6c1f467f03a24caafe8a66729f60fcebc2be42b2cbb398885503e1a 0.0s=> => naming to docker.io/library/docker-test:dev 0.0sView build details: docker-desktop://dashboard/build/desktop-linux/desktop-linux/tc1irjdh2hiyks0o0k93zanrxWhat's next:View a summary of image vulnerabilities and recommendations → docker scout quickview
Error response from daemon: No such container: docker-test-dev
8a8c4a71e3cad36c9fd2057dee84dbbedcefbc07c6d1ee3e057a96936f94bb1c
部署 dev 环境完成,访问端口:29898

查看日志
(base) ➜ docker-project docker logs docker-test-dev. ____ _ __ _ _/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \\\/ ___)| |_)| | | | | || (_| | ) ) ) )' |____| .__|_| |_|_| |_\__, | / / / /=========|_|==============|___/=/_/_/_/:: Spring Boot :: (v2.6.13)2025-01-01 10:28:14.640 INFO 1 --- [ main] c.s.d.dockertest.DockerTestApplication : Starting DockerTestApplication using Java 1.8.0_342 on 8a8c4a71e3ca with PID 1 (/app/docker-test.jar started by root in /app)
2025-01-01 10:28:14.642 INFO 1 --- [ main] c.s.d.dockertest.DockerTestApplication : The following 1 profile is active: "dev"
2025-01-01 10:28:15.030 INFO 1 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 9898 (http)
2025-01-01 10:28:15.037 INFO 1 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2025-01-01 10:28:15.037 INFO 1 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.68]
2025-01-01 10:28:15.074 INFO 1 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2025-01-01 10:28:15.075 INFO 1 --- [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 412 ms
2025-01-01 10:28:15.239 INFO 1 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 9898 (http) with context path ''
2025-01-01 10:28:15.244 INFO 1 --- [ main] c.s.d.dockertest.DockerTestApplication : Started DockerTestApplication in 0.797 seconds (JVM running for 1.053)
2025-01-01 10:29:49.797 INFO 1 --- [0.0-9898-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet'
2025-01-01 10:29:49.798 INFO 1 --- [0.0-9898-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet'
2025-01-01 10:29:49.799 INFO 1 --- [0.0-9898-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 1 ms
2025-01-01 10:29:49.811 INFO 1 --- [0.0-9898-exec-1] c.s.d.dockertest.HeartBeatController : 当前环境是:范缜
2025-01-01 10:30:42.360 INFO 1 --- [0.0-9898-exec-3] c.s.d.dockertest.HeartBeatController : 当前环境是:范缜

进入容器
(base) ➜ docker-project docker exec -it docker-test-dev /bin/bash


宿主机中的application-dev.yml

5. 接口测试
curl -X GET http://0.0.0.0:29898/api/v1/heart-beat

修改application-dev.yml
修改宿主机中的application-dev.yml

重新执行运行脚本就可以获取到最新的配置

6. 优化Dockerfile
# 使用适合 Java 8 的官方镜像,并指定具体的摘要
FROM openjdk:8-jre-slim@sha256:53186129237fbb8bc0a12dd36da6761f4c7a2a20233c20d4eb0d497e4045a4f5# 创建一个目录来存放应用
WORKDIR /app# 复制 jar 文件和配置文件到容器
COPY ./docker-test-0.0.1-SNAPSHOT.jar /app/docker-test.jar
COPY ./config /app/config# 创建日志目录
RUN mkdir /app/logs# 暴露应用端口
EXPOSE 9898# 设置环境变量默认值
ENV SPRING_PROFILES_ACTIVE=dev# 运行 Java 应用,指定配置文件位置
ENTRYPOINT ["java", "-jar", "-Dspring.config.location=/app/config/", "-Dlogging.file.name=/app/logs/app.log", "docker-test.jar"]
通过FROM openjdk:8-jre-slim@sha256:53186129237fbb8bc0a12dd36da6761f4c7a2a20233c20d4eb0d497e4045a4f5我就指定了每次运行得jdk,是我们已经下载的docker image
(base) ➜ docker-project sh deploy.sh prod
[+] Building 0.0s (10/10) FINISHED docker:desktop-linux=> [internal] load build definition from Dockerfile 0.0s=> => transferring dockerfile: 972B 0.0s=> [internal] load metadata for docker.io/library/openjdk:8-jre-slim@sha256:53186129237fbb8bc0a12dd36da6761f4c7a2a20233c20d4eb0d497e4045a4f5 0.0s=> [internal] load .dockerignore 0.0s=> => transferring context: 2B 0.0s=> [1/5] FROM docker.io/library/openjdk:8-jre-slim@sha256:53186129237fbb8bc0a12dd36da6761f4c7a2a20233c20d4eb0d497e4045a4f5 0.0s=> [internal] load build context 0.0s=> => transferring context: 995B 0.0s=> CACHED [2/5] WORKDIR /app 0.0s=> CACHED [3/5] COPY ./docker-test-0.0.1-SNAPSHOT.jar /app/docker-test.jar 0.0s=> CACHED [4/5] COPY ./config /app/config 0.0s=> CACHED [5/5] RUN mkdir /app/logs 0.0s=> exporting to image 0.0s=> => exporting layers 0.0s=> => writing image sha256:f2ff23fd6cbdd0711a2236ed8fef5741a440ce0c9eef1de0729f0fe90bd5cd8f 0.0s=> => naming to docker.io/library/docker-test:prod 0.0sView build details: docker-desktop://dashboard/build/desktop-linux/desktop-linux/w8k62khao04fqmmn40xbtlxkpWhat's next:View a summary of image vulnerabilities and recommendations → docker scout quickview
Error response from daemon: No such container: docker-test-prod
26f15fa78e16ace7184b0350006371a9decb2311bc6df4753f2a3006b79ba726
部署 prod 环境完成,访问端口:19898
再次运行脚本就是秒启动了

7. 部分参数解释
-
-Dspring.config.location=/app/config/是一个 JVM(Java Virtual Machine)系统属性,用于指定 Spring Boot 应用的配置文件位置。

-
-Dlogging.file.name=/app/logs/app.logDockerfile 中使用的 ENTRYPOINT 命令包含了 -Dlogging.file.name=/app/logs/app.log 这一部分。这是一个 JVM(Java Virtual Machine)系统属性,用于指定日志文件的输出路径,特别是对于使用 Spring Boot 构建的 Java 应用。这样的设置对于管理容器内应用的日志是非常有用的。

8. 优化不同环境下的日志也不同
docker images --digests本地所有镜像的信息,包括仓库名、标签、镜像 ID、创建时间、大小以及摘要(digest)
调整 Dockerfile
# 使用适合 Java 8 的官方镜像,并指定具体的摘要
FROM openjdk:8-jre-slim@sha256:53186129237fbb8bc0a12dd36da6761f4c7a2a20233c20d4eb0d497e4045a4f5# 创建一个目录来存放应用
WORKDIR /app# 复制 jar 文件和配置文件到容器
COPY ./docker-test-0.0.1-SNAPSHOT.jar /app/docker-test.jar
COPY ./config /app/config# 创建日志目录
RUN mkdir /app/logs# 设置时区
ENV TZ=Asia/Shanghai
RUN apt-get update && apt-get install -y tzdata \&& ln -snf /usr/share/zoneinfo/$TZ /etc/localtime \&& echo $TZ > /etc/timezone \&& dpkg-reconfigure -f noninteractive tzdata# 暴露应用端口
EXPOSE 9898# 设置环境变量默认值
ENV SPRING_PROFILES_ACTIVE=dev# 运行 Java 应用,使用环境变量指定配置文件位置和日志文件名
ENTRYPOINT ["java", "-jar", "-Dspring.config.location=/app/config/", "-Dlogging.file.name=${LOG_FILE_PATH}", "docker-test.jar"]
修改部署脚本 deploy.sh
#!/bin/bash# 部署脚本使用方式: ./deploy.sh [环境名]
# 环境名应为 dev 或 prodENV=$1
if [ "$ENV" != "prod" ] && [ "$ENV" != "dev" ]; thenecho "请指定正确的环境名: dev 或 prod"exit 1
fi# 定义容器和镜像名称
CONTAINER_NAME="docker-test-$ENV"
IMAGE_NAME="docker-test:$ENV"# 为不同环境设置不同的端口和日志文件路径
if [ "$ENV" == "prod" ]; thenPORT=19898LOG_FILE="/app/logs/prod-app.log"
elsePORT=29898LOG_FILE="/app/logs/dev-app.log"
fi# 停止之前的容器
docker stop $CONTAINER_NAME# 停止并删除旧容器
docker rm -f $CONTAINER_NAME# 构建 Docker 镜像
docker build -t $IMAGE_NAME .# 检查日志文件是否存在,如果不存在则创建空日志文件
LOG_FILE_PATH="./logs/$ENV-app.log"
if [ ! -f "$LOG_FILE_PATH" ]; thentouch "$LOG_FILE_PATH"
fi# 运行新的 Docker 容器,挂载日志目录到宿主机,并设置环境变量
docker run -d -p $PORT:9898 \-e SPRING_PROFILES_ACTIVE=$ENV \-e LOG_FILE_PATH=$LOG_FILE \-v $LOG_FILE_PATH:$LOG_FILE \--name $CONTAINER_NAME $IMAGE_NAMEecho "部署 $ENV 环境完成,访问端口:$PORT"
注意这里不需要删除原来的镜像文件,如果换了新的jar包,会构建新的镜像替代原来的镜像




重新运行dev与prod
没问题
sh deploy.sh dev
sh deploy.sh prod
最新的目录
请忽略docker-compose



9. pplication.yml、application-dev.yml、application-test.yml、application-prod.yml这几个有什么区别?
在现代软件开发中,尤其是使用Spring Boot这类框架时,application.yml文件通常用来存储应用程序的配置信息。为了适应不同的运行环境(如开发、测试、生产等),通常会有多个这样的配置文件,以便根据环境的不同加载不同的配置。下面是关于你提到的各个文件的详细解释:
-
application.yml
这是主配置文件,通常包含所有环境中通用的配置。它是默认被加载的配置文件,无论你运行在哪个环境中。此文件中的配置可以被其他环境专用的配置文件覆盖。 -
application-dev.yml
这个文件包含开发环境特有的配置。它通常包括适用于开发环境的数据库连接、API密钥、调试工具配置等。在开发过程中,可以设置Spring Boot使用dev配置文件,使其覆盖application.yml中的通用配置。 -
application-test.yml
此文件包含测试环境特有的配置,用于单元测试、集成测试等自动化测试环境。这些配置可能包括指向专门的测试数据库、特定的端口号或服务接口等。在自动化测试时,通过设置Spring Boot使用test配置文件,确保应用运行在适合测试的环境中。 -
application-prod.yml
这个文件包含生产环境特有的配置,如生产数据库的凭证、API访问限制、性能优化设置等。在应用部署到生产环境时,这个文件中的配置会覆盖默认的application.yml文件,确保应用按照生产环境的要求运行。
如何切换不同的配置环境
在Spring Boot应用中,你可以通过设置环境变量spring.profiles.active来指定激活哪个配置文件。例如,通过命令行参数来启动应用时指定使用开发配置:
java -jar your-application.jar --spring.profiles.active=dev
或者在环境变量中设置:
export SPRING_PROFILES_ACTIVE=dev
或者idea中的VM增加 -Dspring.profiles.active=prod
相关文章:
通过Dockerfile来实现项目可以指定读取不同环境的yml包
通过Dockerfile来实现项目可以指定读取不同环境的yml包 1. 挂载目录2. DockerFile3. 运行脚本deploy.sh4. 运行查看日志进入容器 5. 接口测试修改application-dev.yml 6. 优化Dockerfile7. 部分参数解释8. 优化不同环境下的日志也不同调整 Dockerfile修改部署脚本 deploy.sh重新…...
云手机 —— 手机矩阵的 “超级外挂
如何打造手机矩阵 打造手机矩阵主要包括以下几个步骤: 1.确定目标与需求:首先,明确打造手机矩阵的目的和需求,是为了进行电商运营、自媒体推广、任务管理还是其他目的。这将决定后续的手机数量、操作系统选择以及应用安装等。 2.选择手机与操作系统:根据…...
OpenCV的TickMeter计时类
OpenCV的TickMeter计时类 1. TickMeter是一个计时的类1.1 计算耗时1.2 计算循环的平均耗时和FPS1.3 function 2. 案例 1. TickMeter是一个计时的类 https://docs.opencv.org/4.x/d9/d6f/classcv_1_1TickMeter.html#details 1.1 计算耗时 TickMeter tm;tm.start();// do some…...
蓝桥杯JAVA刷题--001
文章目录 题目需求2.代码3.总结 题目需求 2.代码 class Solution {public String convertDateToBinary(String date) {if (date null || date.length() ! 10 || date.charAt(4) ! - || date.charAt(7) ! -) {throw new IllegalArgumentException("输入的日期格式不正确&…...
免费又开源:企业级物联网平台的新选择 ThingsPanel
在开源领域,选择合适的开源协议是开发者和企业能否充分利用平台的关键。ThingsPanel,作为一个专注于物联网的开源平台,近日将协议从 AGPLv3 改为更开放的 Apache 2.0。这一改变对开发者和用户意味着什么? 为什么协议要从 AGPLv3 转…...
鸿蒙开发:文本合成语音
前言 Android开发的同学都知道,在Android当中,实现一段文字合成语音播放,可以使用系统提供的对象TextToSpeech来很快的实现,如果不用系统自带的,也可以使用三方提供的,比如讯飞的语音合成等等,总…...
雷军:科技传奇的逐梦之旅
亲爱的小伙伴们😘,在求知的漫漫旅途中,若你对深度学习的奥秘、Java 与 Python 的奇妙世界,亦或是读研论文的撰写攻略有所探寻🧐,那不妨给我一个小小的关注吧🥰。我会精心筹备,在未来…...
LeetCode - 初级算法 数组(删除排序数组中的重复项)
免责声明:本文来源于个人知识与公开资料,仅用于学术交流。 删除排序数组中的重复项 这篇文章讨论如何从一个非严格递增的数组 nums 中删除重复的元素,使每个元素只出现一次,并返回新数组的长度。因为数组是排序的,只要是相同的肯定是挨着的,所以我们需要遍历所有数组,然…...
2024年度培训运维总结
目前带的弟子跟我实战训练运维的总就业率基本可以稳定在 100% 左右(因为我不带小白和没学历和大龄,悟性低都筛掉了还能找我说明条件够了) 以下是弟子私教训练营的最新就业数据(2024年12月25日): 面试辅导…...
java重装小结
一、Java安装 安装路径 https://www.oracle.com/java/technologies/javase/javas e8-archive-downloads.html 具体类型可参考: Java安装配置-CSDN博客 我在这一步主要碰到的问题就是访问官网报404错误,可参考: 在oracle官网下载资源显示…...
ubuntu20.04 中文输入法安装
中文输入法安装指南 在 Ubuntu 20.04 上安装中文输入法,您可以按照以下步骤操作: 打开终端。安装 fcitx 输入法框架和中文输入法模块:sudo apt update sudo apt install fcitx fcitx-pinyin安装中文语言支持:sudo apt install l…...
SQL常用语句(基础)大全
SQL语句的类型 1.DDL 1.库2.表 2.DML 1.插入数据 insert inot2.删除数据 delete / truncate3.修改数据 update set 3.DQL 1.无条件查询2.查询 什么开始 到什么结束3.指定条件查询 1.单个条件 ro in2.多个条件 and4.查询不为NULL值 is not null ,为NULL值 is null5.模糊查询 li…...
计算和可视化相对湿度结果
了解如何确定 CFD 模型中的相对湿度。 了解相对湿度 大气是干燥空气和水蒸气的混合物,每一种的压力之和等于蒸气压。相对湿度是指空气中的水分量与空气在特定温度下可以容纳的最大水分量之比。它通常以百分比表示。它的范围从 0(干燥空气)到…...
uniapp-vue3(下)
关联链接:uniapp-vue3(上) 文章目录 七、咸虾米壁纸项目实战7.1.咸虾米壁纸项目概述7.2.项目初始化公共目录和设计稿尺寸测量工具7.3.banner海报swiper轮播器7.4.使用swiper的纵向轮播做公告区域7.5.每日推荐滑动scroll-view布局7.6.组件具名…...
一起学习Firtran: Fortran中的流程控制与操作符
流程控制语句 在计算机编程中,控制程序流程是算法设计中的一个核心概念,它使得程序能够根据特定条件执行不同的操作或重复执行某段代码。这显著增强了计算机算法相对于简单数学公式的功能和灵活性。 if语句 在单个 if 语句中只有当测试表达式࿰…...
Sonic:开源Go语言开发的高性能博客平台
Sonic:一个用Go语言开发的高性能博客平台 简介 Sonic,一个以其速度如声速般快速而命名的博客平台,是一个用Go语言开发的高性能博客系统。正如其名字所暗示的,Sonic旨在提供一个简单而强大的博客解决方案。这个项目受到了Halo项目…...
SpringBoot教程(十四) SpringBoot之集成Redis
SpringBoot教程(十四) | SpringBoot之集成Redis 一、Redis集成简介二、集成步骤 2.1 添加依赖2.2 添加配置2.3 项目中使用之简单使用 (举例讲解)2.4 项目中使用之工具类封装 (正式用这个)2.5 序列化 &…...
RSI和CCI指标组合:如何评估需求供应区?昂首资本实战指南
在市场分析中,分笔成交点数量提供了一个有价值的视角,帮助我们识别需求和供应区。通过这些数据,我们可以假设供需区域的参数与主要振荡器中的区域参数类似。以RSI和CCI为例,这些指标不仅能够反映市场的超买和超卖情况,…...
PTPVT 插值说明
文章目录 PTPVT 插值说明 PTPVT 插值说明PVT Hermite插值PVT 三次多项式插值PT 插值Sin轨迹测试结果PVT Hermite插值结果PVT 三次多项式插值结果PT 插值结果 用户轨迹测试结果PVT Hermite插值结果PT 插值结果 PTPVT 插值说明 PT模式: 位置-时间路径插值算法。 PVT模…...
Spring MVC和servlet
1.Spring MVC是Spring框架的一个扩展 2.Spring MVC工作流程 1、用户发送请求至前端控制器DispatcherServlet。 2、DispatcherServlet收到请求调用HandlerMapping处理器映射器。 3、处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器对象及…...
MPNet:旋转机械轻量化故障诊断模型详解python代码复现
目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...
centos 7 部署awstats 网站访问检测
一、基础环境准备(两种安装方式都要做) bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats࿰…...
k8s业务程序联调工具-KtConnect
概述 原理 工具作用是建立了一个从本地到集群的单向VPN,根据VPN原理,打通两个内网必然需要借助一个公共中继节点,ktconnect工具巧妙的利用k8s原生的portforward能力,简化了建立连接的过程,apiserver间接起到了中继节…...
零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)
本期内容并不是很难,相信大家会学的很愉快,当然对于有后端基础的朋友来说,本期内容更加容易了解,当然没有基础的也别担心,本期内容会详细解释有关内容 本期用到的软件:yakit(因为经过之前好多期…...
Android第十三次面试总结(四大 组件基础)
Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成,用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机: onCreate() 调用时机:Activity 首次创建时调用。…...
【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)
本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...
Docker拉取MySQL后数据库连接失败的解决方案
在使用Docker部署MySQL时,拉取并启动容器后,有时可能会遇到数据库连接失败的问题。这种问题可能由多种原因导致,包括配置错误、网络设置问题、权限问题等。本文将分析可能的原因,并提供解决方案。 一、确认MySQL容器的运行状态 …...
云原生周刊:k0s 成为 CNCF 沙箱项目
开源项目推荐 HAMi HAMi(原名 k8s‑vGPU‑scheduler)是一款 CNCF Sandbox 级别的开源 K8s 中间件,通过虚拟化 GPU/NPU 等异构设备并支持内存、计算核心时间片隔离及共享调度,为容器提供统一接口,实现细粒度资源配额…...
Monorepo架构: Nx Cloud 扩展能力与缓存加速
借助 Nx Cloud 实现项目协同与加速构建 1 ) 缓存工作原理分析 在了解了本地缓存和远程缓存之后,我们来探究缓存是如何工作的。以计算文件的哈希串为例,若后续运行任务时文件哈希串未变,系统会直接使用对应的输出和制品文件。 2 …...
Linux基础开发工具——vim工具
文章目录 vim工具什么是vimvim的多模式和使用vim的基础模式vim的三种基础模式三种模式的初步了解 常用模式的详细讲解插入模式命令模式模式转化光标的移动文本的编辑 底行模式替换模式视图模式总结 使用vim的小技巧vim的配置(了解) vim工具 本文章仍然是继续讲解Linux系统下的…...
