云计算百科
云计算领域专业知识百科平台

使用Idea将本地springBoot项目打包成镜像,然后运行到服务器容器中

本项目是作者的毕业设计,基于若依前后端分离项目开发的,下面是若依项目的链接,有兴趣的可以去看看

  • 若依官网:http://ruoyi.vip(opens new window)
  • 演示地址:http://vue.ruoyi.vip(opens new window)
  • 代码下载:https://gitee.com/y_project/RuoYi-Vue

当我们看到本项目的目录就可以明白,本项目是一个多模块的项目,其中包含一个父模块和n个子模块(这就要看你要多少模块了🤣)

这里要提醒一下读者,千万不要将太多的子模块相互依赖,不然你就会向我一样头痛。

会在下面的dockerfile运行时出现各种问题。比如当我构建system模块时,发现,他的依赖里面有common模块的依赖,若你前面没有先构建common,当然就会出现依赖找不到的错误。因此,先捋顺你的项目依赖链,然后才开始写dockerfile是一个很好的预处理工作。

使用idea链接docker可以参考下面的链接,不需要过多赘述: idea 配置 docker_idea docker没有ssh-CSDN博客

配置Dockerfile

在Spring Boot项目的根目录下创建一个名为Dockerfile的文件,内容如下:

# 第一阶段:构建阶段(严格处理父子模块依赖)
FROM maven:3.8.6-openjdk-8-slim AS builder

# 设置阿里云镜像加速(可选,若需外部依赖加速)
COPY settings.xml /usr/share/maven/ref/

# 容器内Maven本地仓库路径(可选,可持久化缓存)
ENV MAVEN_LOCAL_REPO /root/.m2/repository

# 步骤1:先复制根父模块的pom.xml(MyApp,位于项目根目录)
COPY ./pom.xml .

# 安装父模块到本地仓库(关键步骤!)
RUN mvn -B install -Dmaven.test.skip=true -N

# 步骤2:按依赖顺序编译子模块(从最底层无依赖的开始)
# 子模块依赖链:ruoyi-common(依赖根父模块)→ ruoyi-system(依赖common)→ …

# 编译ruoyi-common(依赖根父模块,无其他子模块依赖)
COPY ./ruoyi-common/pom.xml ./ruoyi-common/
RUN mvn -B -f ./ruoyi-common/pom.xml clean install -Dmaven.test.skip=true

# 编译ruoyi-system(依赖ruoyi-common)
COPY ./ruoyi-system/pom.xml ./ruoyi-system/
RUN mvn -B -f ./ruoyi-system/pom.xml clean install -Dmaven.test.skip=true

# 编译ruoyi-generator(假设依赖ruoyi-common)
COPY ./ruoyi-generator/pom.xml ./ruoyi-generator/
RUN mvn -B -f ./ruoyi-generator/pom.xml clean install -Dmaven.test.skip=true

# 编译ruoyi-framework(依赖ruoyi-system)
COPY ./ruoyi-framework/pom.xml ./ruoyi-framework/
RUN mvn -B -f ./ruoyi-framework/pom.xml clean install -Dmaven.test.skip=true

# 编译MyApp-quartz(假设依赖ruoyi-framework)
COPY ./MyApp-quartz/pom.xml ./MyApp-quartz/
RUN mvn -B -f ./MyApp-quartz/pom.xml clean install -Dmaven.test.skip=true

# 编译wechatbusiness(依赖ruoyi-system/ruoyi-framework/ruoyi-common)
COPY ./wechatbusiness/pom.xml ./wechatbusiness/
RUN mvn -B -f ./wechatbusiness/pom.xml clean install -Dmaven.test.skip=true

# 编译ruoyi-admin(最终启动模块,依赖所有其他模块)
COPY ./ruoyi-admin/pom.xml ./ruoyi-admin/
RUN mvn -B -f ./ruoyi-admin/pom.xml clean install -Dmaven.test.skip=true

# 下载外部依赖(内部模块已通过根父模块和子模块安装,仅需外部依赖)
RUN mvn -B dependency:go-offline -Dmaven.test.skip=true

# 步骤3:复制所有子模块源代码(按目录结构,根父模块无src,无需复制)
COPY ./ruoyi-common/src ./ruoyi-common/src
COPY ./ruoyi-system/src ./ruoyi-system/src
COPY ./ruoyi-generator/src ./ruoyi-generator/src
COPY ./ruoyi-framework/src ./ruoyi-framework/src
COPY ./MyApp-quartz/src ./MyApp-quartz/src
COPY ./wechatbusiness/src ./wechatbusiness/src
COPY ./ruoyi-admin/src ./ruoyi-admin/src

# 步骤4:打包ruoyi-admin(-am自动构建依赖模块,依赖链已提前编译)
RUN mvn -B clean package -Dmaven.test.skip=true -pl ruoyi-admin -am

# 第二阶段:运行阶段(保持原配置)
FROM openJDK:8 #(这里的镜像表示需要打包的项目所需的JDK,可以替换成自己的私有仓库的JDK)

# 设置容器时区
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo "Asia/Shanghai" > /etc/timezone

# 创建非root用户
RUN groupadd -r appgroup && useradd -r -g appgroup -s /sbin/nologin appuser

# 创建日志目录并授权
RUN mkdir -p /app/logs && \\
chown -R appuser:appgroup /app/logs && \\
chmod -R 755 /app/logs

USER appuser

# 复制构建产物(从builder阶段复制admin模块的jar)
COPY –from=builder –chown=appuser:appgroup ./ruoyi-admin/target/*.jar /app/app.jar

# 暴露端口
EXPOSE 91002 #这里的端口配置和你的springBoot的端口一样即可

# 启动命令(可添加JVM参数)
ENTRYPOINT ["sh", "-c", "java ${JAVA_OPTS} -jar /app/app.jar"]

构建Docker镜像

如何使用上述的dockerfile可以参考下列的博客,

IDEA+Docker一键部署项目SpringBoot项目_idea docker部署-CSDN博客

====================补充===============================

当你看到这,说明上述文章你已经看完了,而且你已经将你的镜像,成功构造完成,放到了你的服务器或者虚拟机中。也就是你的docker所属的位置。

下面就是我自己对于容器的构建的一些经验

如果你使用虚拟机进行构建镜像,那么你的docker有可能是在本地或者虚拟机中,总之,也许你都镜像可能是不在于你想发布网站的服务器中。欸,这时你就可以考虑下作者的经验了😁

作者是创建了一个阿里云的镜像私人仓库,将镜像推到了作者的仓库中,然后就可以在任何可以联网的地方拉到镜像啦

下面是有关阿里云镜像仓库的链接,有需要可以看一下:

推送镜像到Docker仓库

如果需要将镜像推送到Docker仓库(如阿里云的私有仓库),可以执行以下命令:

推送镜像到阿里云-CSDN博客

当你搞定这一步,也许你可以考虑一下宝塔面板,通过宝塔面板的docker相关功能来管理你的镜像容器,仅作者的体验而言确实是挺轻松的。

通过以上步骤,可以将本地Spring Boot项目打包成Docker镜像,并在服务器容器中运行。

这样本文就完成了一个超级原始版的CICD,对于毕设是够用了,后续可以了解一些Jenkins,k8s之类的技术。就可以开心升级流程啦!!

赞(0)
未经允许不得转载:网硕互联帮助中心 » 使用Idea将本地springBoot项目打包成镜像,然后运行到服务器容器中
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!