Docker化Spring Boot3应用:从镜像构建到部署

简介: 本文介绍了如何在Linux上通过命令行构建和运行Spring Boot 3服务的Docker镜像。首先,基于Ubuntu创建包含JDK 21的基础镜像,然后使用Maven打包Spring Boot应用。接着,构建服务镜像,将应用和依赖添加到镜像中,并设置工作目录和暴露端口。最后,利用docker-compose部署服务,挂载宿主机目录以方便更新静态文件。Docker简化了应用部署,确保了不同环境的一致性。

随着容器化技术的发展,越来越多的应用采用了容器化部署的方式。容器化部署极大地减少了因部署环境不同带来的差异,实现了一次构建、随处运行的效果。此外,容器化还具有版本管理、快速启动、持续集成等优点。今天,我们将介绍如何在Linux上通过命令行构建和运行Spring Boot 3服务的镜像。

_20240522075102.jpg

基础镜像构建

我们的服务采用的jdk 版本为21,spring boot版本为3.1.0,首先我们基于ubuntu来构建一个jdk版本为21的基础镜像。其Dockerfile 文件内容如下:

Dockerfile

# 基础镜像
FROM ubuntu:22.04

# 维护者
MAINTAINER xj

# 拷贝文件到容器(自动解压,解压完目录为jdk-21.0.2)
ADD ./openjdk-21.0.2_linux-x64_bin.tar.gz /usr/local/

# 安装unzip
RUN apt-get update \

&& apt-get install unzip

# 设置JAVA_HOME
ENV JAVA_HOME /usr/local/jdk-21.0.2

ENV PATH $PATH:$JAVA_HOME/bin

将我们的jdk文件openjdk-21.0.2_linux-x64_bin.tar.gz 拷贝到Dockerfile的同级目录下,执行以下命令进行基础镜像的构建:

docker build -t xj/jdk:21.0.2 .

构建完成后我们会在服务器上使用以下命令看到我们刚刚构建的镜像

docker images | grep jdk

_20240522070843.jpg

使用Maven打包服务

在本地打包我们spring boot3服务,我们此处为了方便修改服务中的静态文件,将所有的静态文件打包到了jar包的外部,家人可以翻阅我们之前的文章 深入探讨Maven打包:打造精致的Zip包,打包后snowflake-0.0.1.zip文件的目录结果如下:

_20240522071545.jpg

构建服务镜像

基于我们刚刚创建好的jdk21的基础镜像构建我们的服务镜像,其Dockerfile 文件内容如下:

Dockerfile


# 基础镜像
FROM xj/jdk:21.0.2

# 维护者
MAINTAINER xj

# 环境变量
ENV TZ=Asia/Shanghai \
    SERVER_DIR=/home/app/

RUN mkdir -p $SERVER_DIR \
&& chmod -R 777 $SERVER_DIR 

# 拷贝文件到容器
ADD ./snowflake-0.0.1.zip $SERVER_DIR

RUN  unzip /home/app/snowflake-0.0.1.zip -d $SERVER_DIR  \

&& chmod +x /home/app/start.sh

# 设置工作目录
WORKDIR $SERVER_DIR

# 镜像暴露的端口号
EXPOSE 8000

CMD ["/home/app/start.sh","run"]

将我们打包后的zip文件snowflake-0.0.1.zip 拷贝到Dockerfile的同级目录下,执行以下命令进行基础镜像的构建:

docker build -t xj/snowflake:1.0.0 .

构建成功后我们可以使用以下命令看到构建后的镜像

docker images | grep snowflake

_20240522072556.jpg

使用docker-compose 部署服务

首先在服务器上创建一个部署目录snowflake,在该目录下创建docker-compose.yml文件,内容如下:

docker-compose.yml

version: '3.3'
services:
  snowflake:
    image: xj/snowflake:1.0.0
    container_name: xj-snowflake
    restart: always
    ports:
      - 8000:8000
    volumes:
      - ./data:/home/app

在部署目录下创建挂载目录data,将我们的打包后的服务文件snowflake-0.0.1.zip拷贝到挂载目录中并解压。

我们此处是将整个部署目录/home/app 挂载到了宿主机,这样我们后续如果需要修改配置文件等一些静态文件的话直接修改,完了重启以下服务就可以了,不用重新构建镜像。

在docker-compose.yml同级目录下使用以下命令启动容器

docker-compose up -d

如果不出意外的话我们的服务就启动成功了。

注意: 如果我们以前是直接在服务器上部署服务的话大家注意下start.sh启动脚本,一般都是使用nohup后台启动的,而Docker容器中默认的主进程如果退出,容器就会停止运行。所以我们如果使用docker启动服务的话一定要前台启动。

总结

通过以上步骤,我们实现了使用Spring Boot构建Docker镜像并部署的全过程。Docker使得应用的部署变得更加简单和一致,无论是在本地开发环境还是在生产环境,都能保证应用的可靠运行。希望本文对你在Spring Boot和Docker的结合使用上有所帮助。

目录
相关文章
|
10月前
|
人工智能 Java Nacos
基于 Spring AI Alibaba + Nacos 的分布式 Multi-Agent 构建指南
本文将针对 Spring AI Alibaba + Nacos 的分布式多智能体构建方案展开介绍,同时结合 Demo 说明快速开发方法与实际效果。
5550 112
|
12月前
|
JSON 人工智能 Java
基于Spring AI构建智能Text-to-SQL转换器:一个完整的MCP
Spring AI 更新结构化输出转换器,弃用旧版 Parser 类,引入与 Spring 框架对齐的 Converter 体系,提升命名规范与功能兼容性。新版本支持 JSON、XML 及 Java 对象转换,确保 LLM 输出结构化,便于下游应用处理。
|
监控 Java API
Spring Boot 3.2 结合 Spring Cloud 微服务架构实操指南 现代分布式应用系统构建实战教程
Spring Boot 3.2 + Spring Cloud 2023.0 微服务架构实践摘要 本文基于Spring Boot 3.2.5和Spring Cloud 2023.0.1最新稳定版本,演示现代微服务架构的构建过程。主要内容包括: 技术栈选择:采用Spring Cloud Netflix Eureka 4.1.0作为服务注册中心,Resilience4j 2.1.0替代Hystrix实现熔断机制,配合OpenFeign和Gateway等组件。 核心实操步骤: 搭建Eureka注册中心服务 构建商品
1530 3
|
11月前
|
SQL Java 数据库连接
Spring Data JPA 技术深度解析与应用指南
本文档全面介绍 Spring Data JPA 的核心概念、技术原理和实际应用。作为 Spring 生态系统中数据访问层的关键组件,Spring Data JPA 极大简化了 Java 持久层开发。本文将深入探讨其架构设计、核心接口、查询派生机制、事务管理以及与 Spring 框架的集成方式,并通过实际示例展示如何高效地使用这一技术。本文档约1500字,适合有一定 Spring 和 JPA 基础的开发者阅读。
955 0
|
11月前
|
JavaScript Docker 容器
使用Docker多阶段构建优化镜像大小
使用Docker多阶段构建优化镜像大小
587 100
|
11月前
|
缓存 安全 Linux
优化Docker镜像大小的多阶段构建实践
优化Docker镜像大小的多阶段构建实践
591 99
|
11月前
|
缓存 Docker 容器
优化Docker镜像大小的五个实用技巧
优化Docker镜像大小的五个实用技巧
934 98
|
11月前
|
安全 Go Docker
使用Docker多阶段构建优化镜像大小
使用Docker多阶段构建优化镜像大小
|
11月前
|
人工智能 Java API
构建基于Java的AI智能体:使用LangChain4j与Spring AI实现RAG应用
当大模型需要处理私有、实时的数据时,检索增强生成(RAG)技术成为了核心解决方案。本文深入探讨如何在Java生态中构建具备RAG能力的AI智能体。我们将介绍新兴的Spring AI项目与成熟的LangChain4j框架,详细演示如何从零开始构建一个能够查询私有知识库的智能问答系统。内容涵盖文档加载与分块、向量数据库集成、语义检索以及与大模型的最终合成,并提供完整的代码实现,为Java开发者开启构建复杂AI智能体的大门。
5767 58
|
10月前
|
缓存 监控 Java
《深入理解Spring》性能监控与优化——构建高性能应用的艺术
本文系统介绍了Spring生态下的性能监控与优化实践,涵盖监控体系构建、数据库调优、缓存策略、线程池配置及性能测试等内容,强调通过数据驱动、分层优化和持续迭代提升应用性能。