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

news/2025/10/29 17:12:50/文章来源:https://www.cnblogs.com/noear/p/19174942

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

为什么选择 Solon + Docker?

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

Solon 的优势:

  • 启动速度极快:Solon 应用的启动时间通常是 Spring Boot 的 1/101/5
  • 内存占用更小:基础镜像体积更小,运行时内存消耗更低。通常只有 Spring Boot 的 1/101/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 项目实践一下吧!如果在实践中遇到任何问题,欢迎在评论区交流讨论。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/950078.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue2 组件封装 el-date-picker 日期

vue2 组件封装 el-date-picker 日期 基本使用都满足包括常用的:时间格式 :type [date,datetime,daterange ....]快捷方式 :日期左侧:如 今天,昨天,一个月前日期日期禁用:禁用日期段其它相关属性custom-date-pi…

我使用FHQ写了线段树2

虽然并没有任何的意义,但是我觉得很有意思,所以记录一下: #include <bits/stdc++.h> #define int long long using namespace std; const int MN=1e6+116; struct Node{int lc, rc, siz, rnd;int val, sum, a…

092_尚硅谷_for循环注意事项和细节(1)

092_尚硅谷_for循环注意事项和细节(1)1.for循环的第二种写法2.for循环的第三种写法_死循环3.for循环的第三种写法_死循环使用break终止循环

详细介绍:【网络通讯安全认证的理解:从密钥签名、数字证书到 HTTPS/TLS 流程】

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

VK36N5D 工作电压 2.2-5.5V 触摸芯片抗干扰5键触摸触控 5路触摸检测IC

VK36N5D具有5个触摸按键,可用来检测外部触摸按键上人手的触摸动作。该芯片具有较 高的集成度,仅需极少的外部组件便可实现触摸按键的检测。 提供了5个1对1输出脚,1个触摸状态输出脚,可通过IO脚选择上电输出电平和输…

魔兽争霸3冰封王座修改器 下载安装教程(图文步骤 + 功能详解)

魔兽争霸3冰封王座修改器下载与安装教程(适配1.24e~1.26版本),完整讲解安装方法、功能用法、快捷键操作、兼容性优化与常见问题解决方案。支持Windows 10 / 11系统,安全稳定。魔兽争霸3冰封王座修改器 下载安装教程…

Softmax回归模型

这段代码是一个完整的 Softmax回归模型 实现,用于解决 Fashion-MNIST数据集的图像分类问题。简单来说,它的作用是:让计算机通过学习大量衣服、鞋子等服饰图片,学会识别新的服饰图片属于哪一类(比如T恤、裤子、运动…

Oracle的connect by level在MySQL中的华丽变身 - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

handsontable实现新增删除行(双行)

handsontable实现新增删除行(双行)// 配置方法const tableSettings = computed(() => {return {...hotTableParams,nestedHeaders: false,filters: false,columnSorting: false,height: 358,rowHeaders: false,co…

2025年国产角接触球轴承厂家推荐 一文了解轴承厂家选择标准

角接触球轴承在机械设备中的应用广泛,特别是精密机床、高速电机、电主轴等运行要求高的场合,更需要质量品质好一点的角接触轴承。想要轴承用的好,就得找到合适的生产厂家,下面就来推荐下2025年值得信任的国产角接触…

vxe-table 树形表格显示连接线的方式

vxe-table 树形表格显示连接线的方式 完整连接线 通过 tree-config.showLine 来启用是否显示连接线<template><div><vxe-grid v-bind="gridOptions"></vxe-grid></div> </…

2025年上海衣帽间定制机构权威推荐榜单:衣帽间设计/衣帽间十大品牌/衣帽间装修源头公司精选

在上海,一个规划合理的衣帽间正成为新兴住宅的标配。数据显示,2024年中国家装行业市场规模已突破860亿元,其中定制家具份额持续增长,而衣帽间作为定制家具的重要组成部分,正受到越来越多消费者的青睐。 01 行业趋…

在Web应用开发中状态到底是什么?

在计算机科学中,“状态”(State)这个词经常出现在讨论有状态(Stateful)和无状态(Stateless)系统、服务或组件时。要理解“状态”到底是什么,我们可以从最基本的层面来解释。一、什么是“状态”? 简单来说,“…

前后端不分离的springboot应用,静态文件修改了不更新的问题

当然,还有不依赖idea的解决方案,就是静态文件通过nginx来代理,直接将js和css这些文件代理到我们的代码目录,这样我们修改了代码目录后,配置就立马生效了。这样可以不依赖idea的版本,假如你的idea怎么设置热更新都…

Cookie与缓存的区别

一、本质定义 Cookie:客户端轻量化文本存储,存用户身份、网站偏好等会话相关数据,容量约4KB。 缓存:客户端/服务器临时存储,存网页静态资源(图、JS/CSS),容量几MB到几十GB。 二、3大核心区别 1. 存储内容:Coo…

2025 年铝卷厂家最新推荐榜,聚焦企业技术实力与市场口碑深度解析铝板铝卷/铝卷板/橘皮铝卷/压花铝卷/防锈铝卷/花纹铝卷公司推荐

引言 本次 2025 年铝卷产品推荐榜,由有色金属工业协会联合行业权威检测机构共同测评制定,测评过程严格遵循《铝及铝合金轧制卷材行业质量评价标准》。测评团队从企业生产实力、产品品质、服务能力三大维度入手,涵盖…

无人机航测界的强者——Pix4Dmapper 4.5.6使用教程+图文步骤

软件介绍 Pix4Dmapper 4.5.6是一款专业的无人机航空三维建模软件。它可以将通过无人机拍摄的照片转化为三维地图、模型、点云、高精度的数字高程模型(DEM)、数字表面模型(DSM)和正射影像(DOM)等。该软件具有自动…

qml与html通信

1. 在qml显示html并通讯main.qmlimport QtQuick 2.12 import QtQuick.Window 2.12 import QtWebEngine 1.2 import QtQuick.Controls Window {id:mainWindowwidth: 640height: 480visible: truetitle: qsTr("WebE…

2025 年排烟风机厂家最新推荐榜,技术实力与市场口碑深度解析,筛选高性能低噪音优质企业屋顶/双速/离心式/防排烟风机公司推荐

引言 为助力建筑行业精准选购排烟风机,本次榜单由暖通空调工业协会联合消防设备质量监督检验中心共同测评发布。测评采用 “三维九项” 评估体系,从技术实力(耐高温性能、噪音控制、节能效率)、市场口碑(客户满意…

2025 年建筑模型公司最新推荐榜,技术实力与市场口碑深度解析含沙盘、微缩、高端模型品牌

引言 随着建筑行业数字化升级,建筑模型需求向高精度、智能化、定制化加速迭代,据建筑装饰协会 2025 年行业测评报告显示,超 68% 的高端项目对模型精度要求达 0.1mm 级,且 82% 的客户将 “技术创新能力” 列为选择合…