news 2026/6/22 20:58:14

Solon (可替换 SpringBoot)集成 Docker 实战:30分钟搞定轻量级应用容器化部署

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Solon (可替换 SpringBoot)集成 Docker 实战:30分钟搞定轻量级应用容器化部署

作为 Java 开发者,你是否已经厌倦了 Spring Boot 容器化过程中的各种复杂配置和坑点?想要尝试更轻量、更高效的框架?那么 Solon 绝对值得你关注。今天我就带你实战 Solon 框架与 Docker 的集成,从环境准备到最终部署,全程避坑指南,让你 30 分钟内轻松搞定!

为什么选择 Solon + Docker?

在微服务架构盛行之下,应用容器化已成为标配。但传统的 Spring Boot 虽然功能强大,但在启动速度、内存占用和容器化体验上仍有优化空间。听一个老同事说,他们公司经常有1GB大小的 Spring Boot Jar 包。

Solon 的优势:

启动速度极快:Solon 应用的启动时间通常是 Spring Boot 的 1/10 到 1/5

内存占用更小:基础镜像体积更小,运行时内存消耗更低。通常只有 Spring Boot 的 1/10 到 1/2

配置更简洁:Docker 集成配置简单明了,减少踩坑概率

原生支持容器化:从设计之初就考虑了云原生场景

环境准备:三步搞定基础配置

在开始之前,确保你的本地环境满足以下要求:

1. 确认环境版本

JDK 版本:Solon 支持 JDK 8+,推荐使用 JDK 11 或 17 以获得更好的容器化支持

Docker 版本:Docker 20.10+,推荐使用 Docker Desktop 4.0+

Maven 版本:Maven 3.6+,确保插件兼容性

快速验证命令:

java -version

docker -v

mvn -v

2. 创建 Solon 项目

如果你还没有 Solon 项目,可以通过网页版生成器快速创建:

https://solon.noear.org/start/

核心步骤:Docker 集成实战

1. 配置 Maven 插件

在 pom.xml 中添加 Docker 打包插件。这里我们使用经过验证的 spotify 插件:

<plugin>

<groupId>com.spotify</groupId>

<artifactId>docker-maven-plugin</artifactId>

<version>1.2.2</version>

<configuration>

<!-- 镜像名称配置 -->

<imageName>solon-demo</imageName>

<imageTags>

<imageTag>${project.version}</imageTag>

<imageTag>latest</imageTag>

</imageTags>

<!-- 使用推荐的基础镜像 -->

<baseImage>adoptopenjdk/openjdk11:jre-11.0.11_9-alpine</baseImage>

<!-- 容器启动命令 -->

<entryPoint>["java", "-jar", "/${project.build.finalName}.jar", "--server.port=8080", "--drift=1"]</entryPoint>

<resources>

<resource>

<targetPath>/</targetPath>

<directory>${project.build.directory}</directory>

<include>${project.build.finalName}.jar</include>

</resource>

</resources>

</configuration>

</plugin>

避坑提示:

使用 alpine 版本的 JDK 镜像可以显著减小镜像体积(如果不兼容,可以再换个别的)

entryPoint 必须使用数组格式,确保参数传递正确

确保 finalName 与打包后的 jar 包名称一致

加上--drift=1表示当前环境ip会漂移的(如果有注册服务,当下线时要求不作健康检测)。这是 solon 对云原生的一种优化。

2.备选方案:使用 Dockerfile

如果你更喜欢传统的 Dockerfile 方式,可以在项目根目录创建 Dockerfile:

# 使用轻量级基础镜像

FROM adoptopenjdk/openjdk11:jre-11.0.11_9-alpine

# 设置工作目录

WORKDIR /app

# 复制 jar 文件

COPY target/solon-demo-1.0.0.jar app.jar

# 暴露端口(根据你的应用配置调整)

EXPOSE 8080

# 启动应用

ENTRYPOINT ["java", "-jar", "app.jar", "--server.port=8080", "--drift=1"]

然后在 pom.xml 中配置插件使用 Dockerfile:

<plugin>

<groupId>com.spotify</groupId>

<artifactId>docker-maven-plugin</artifactId>

<version>1.2.2</version>

<configuration>

<imageName>solon-demo</imageName>

<dockerDirectory>${project.basedir}</dockerDirectory>

<resources>

<resource>

<targetPath>/</targetPath>

<directory>${project.build.directory}</directory>

<include>${project.build.finalName}.jar</include>

</resource>

</resources>

</configuration>

</plugin>

3. 构建和运行

构建 Docker 镜像:

# 先打包应用

mvn clean package

# 构建 Docker 镜像

mvn docker:build

构建成功后,验证镜像:

docker images | grep solon-demo

运行容器:

# 第一次运行

docker run -d -p 8080:8080 --name solon-app solon-demo

# 查看运行状态

docker ps | grep solon-app

# 查看日志

docker logs solon-app

容器管理命令:

# 停止容器

docker stop solon-app

# 重启容器

docker restart solon-app

# 删除容器

docker rm solon-app

进阶技巧:优化和部署

1. 镜像标签管理和推送

为镜像打标签并推送到镜像仓库:

# 打标签

docker tag solon-demo:latest your-repo/solon-demo:1.0.0

docker tag solon-demo:latest your-repo/solon-demo:latest

# 推送到仓库

docker push your-repo/solon-demo:1.0.0

docker push your-repo/solon-demo:latest

2. 生产环境配置

对于生产环境,建议添加健康检查和资源限制:

docker run -d \

-p 8080:8080 \

--name solon-app \

--memory=512m \

--cpus=1.0 \

solon-demo

常见问题排查

1. 容器启动后立即退出

检查应用启动日志:docker logs solon-app

确认 jar 包路径正确

验证端口是否被占用

2. 应用无法访问

检查端口映射:docker ps 确认端口映射关系

验证防火墙设置

检查应用监听的地址(确保是 0.0.0.0 而不是 127.0.0.1)

3. 镜像体积过大

使用 alpine 版本的基础镜像

多阶段构建去除构建依赖

使用 JRE 而不是完整的 JDK

总结

Solon 与 Docker 的集成相比传统框架更加轻量简洁,主要优势体现在:

配置简单:Maven 插件配置直观,减少出错概率

镜像小巧:基础镜像选择灵活,最终镜像体积更小

启动快速:容器启动速度更快,适合快速扩缩容

通过本文的实战指南,你应该能够在 30 分钟内完成 Solon 应用的 Docker 化。赶紧拿起你的 Solon 项目实践一下吧!如果在实践中遇到任何问题,欢迎在评论区交流讨论。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/23 16:21:45

一次 React 项目 lock 文件冲突修复:从 Hook 报错到 Vite 配置优化

在日常开发中&#xff0c;分支合并是高频操作&#xff0c;但稍有不慎就可能引发依赖相关的“连锁反应”。本文记录了一次rebase main后因 lock 文件冲突&#xff0c;导致 React Hook 报错的完整排查与解决过程&#xff0c;希望能为遇到类似问题的开发者提供参考。一、背景&…

作者头像 李华
网站建设 2026/6/23 18:05:18

记录一次USB虚拟网络问题排查

背景介绍项目是用yocto构建的&#xff0c;在升级kernel及yocto后&#xff08;见https://www.cnblogs.com/ma-yangbiao/p/19149251&#xff09;, 发现某些功能不能正常工作。问题介绍目标机是某个不常用的x86平台&#xff0c;该x86 盒子通过USB连接MDM9150, 在该x86盒子上跑某个…

作者头像 李华
网站建设 2026/6/23 5:01:25

学Simulink——基于高比例可再生能源渗透的复杂电网建模场景实例:大规模光伏并网对区域电网频率稳定影响研究

目录 手把手教你学Simulink ——基于高比例可再生能源渗透的复杂电网建模场景实例&#xff1a;大规模光伏并网对区域电网频率稳定影响研究 一、背景介绍 二、系统结构设计 三、建模过程详解 第一步&#xff1a;创建新 Simulink 项目 第二步&#xff1a;添加主要模块 1. …

作者头像 李华
网站建设 2026/6/22 19:37:01

CANN Samples(十九):特色场景:机器人 AI 绘画 手写识别等

1. 当AI不止于识别&#xff1a;探索CANN的趣味应用 在我们之前的文章中&#xff0c;我们聊了许多关于图像分类、目标检测的话题&#xff0c;这些都是AI在“看懂”世界方面的应用。但AI的魅力远不止于此。当它与物理世界互动&#xff0c;会诞生出机器人&#xff1b;当它被赋予创…

作者头像 李华
网站建设 2026/6/22 6:42:55

毕设开源 深度学习YOLO交通路面缺陷检测系统(源码+论文)

文章目录0 前言1 项目运行效果2 课题背景2.1. 道路基础设施发展现状2.2. 路面缺陷检测技术演进历程2.2.1 传统检测方法2.2.2 机械化检测阶段2.3. 计算机视觉技术突破2.3.1 传统图像处理技术2.3.2 深度学习革命2.4. 路面缺陷检测的特殊性挑战2.4.1 数据特性2.4.2 技术难点2.5. 本…

作者头像 李华
网站建设 2026/6/23 12:17:28

【URP】Unity[后处理]色彩调整ColorAdjustments

4.X时代的色彩校正曲线和3D查找纹理技术&#xff0c;早期通过手动调节RGB通道曲线实现基础调色功能&#xff0c;而在URP中已整合为标准化体积框架下的模块化组件。底层原理Unity URP中的Color Adjustments后处理效果基于渲染管线中的片段着色器操作&#xff0c;其核心原理是通过…

作者头像 李华