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的结合使用上有所帮助。

目录
相关文章
|
20天前
|
Docker 容器
将本地的应用程序打包成Docker镜像
将本地的应用程序打包成Docker镜像
|
4天前
|
NoSQL PHP MongoDB
docker push推送自己搭建的镜像
本文详细介绍了如何搭建和复盘两个Web安全挑战环境:人力资源管理系统和邮件管理系统。首先,通过Docker搭建MongoDB和PHP环境,模拟人力资源管理系统的漏洞,包括nosql注入和文件写入等。接着,复盘了如何利用这些漏洞获取flag。邮件管理系统部分,通过目录遍历、文件恢复和字符串比较等技术,逐步绕过验证并最终获取flag。文章提供了详细的步骤和代码示例,适合安全研究人员学习和实践。
21 3
docker push推送自己搭建的镜像
|
19天前
|
XML Java 数据格式
Spring Core核心类库的功能与应用实践分析
【12月更文挑战第1天】大家好,今天我们来聊聊Spring Core这个强大的核心类库。Spring Core作为Spring框架的基础,提供了控制反转(IOC)和依赖注入(DI)等核心功能,以及企业级功能,如JNDI和定时任务等。通过本文,我们将从概述、功能点、背景、业务点、底层原理等多个方面深入剖析Spring Core,并通过多个Java示例展示其应用实践,同时指出对应实践的优缺点。
43 14
|
21天前
|
数据库 Docker 容器
Docker在现代软件开发中扮演着重要角色,通过Dockerfile自动化构建Docker镜像,实现高效、可重复的构建过程。
Docker在现代软件开发中扮演着重要角色,通过Dockerfile自动化构建Docker镜像,实现高效、可重复的构建过程。Dockerfile定义了构建镜像所需的所有指令,包括基础镜像选择、软件安装、文件复制等,极大提高了开发和部署的灵活性与一致性。掌握Dockerfile的编写,对于提升软件开发效率和环境管理具有重要意义。
42 9
|
20天前
|
负载均衡 Java 开发者
深入探索Spring Cloud与Spring Boot:构建微服务架构的实践经验
深入探索Spring Cloud与Spring Boot:构建微服务架构的实践经验
64 5
|
17天前
|
XML 前端开发 安全
Spring MVC:深入理解与应用实践
Spring MVC是Spring框架提供的一个用于构建Web应用程序的Model-View-Controller(MVC)实现。它通过分离业务逻辑、数据、显示来组织代码,使得Web应用程序的开发变得更加简洁和高效。本文将从概述、功能点、背景、业务点、底层原理等多个方面深入剖析Spring MVC,并通过多个Java示例展示其应用实践,同时指出对应实践的优缺点。
45 2
|
21天前
|
存储 Prometheus 监控
Docker容器内进行应用调试与故障排除的方法与技巧,包括使用日志、进入容器检查、利用监控工具及检查配置等,旨在帮助用户有效应对应用部署中的挑战,确保应用稳定运行
本文深入探讨了在Docker容器内进行应用调试与故障排除的方法与技巧,包括使用日志、进入容器检查、利用监控工具及检查配置等,旨在帮助用户有效应对应用部署中的挑战,确保应用稳定运行。
30 5
|
21天前
|
开发框架 安全 开发者
Docker 是一种容器化技术,支持开发者将应用及其依赖打包成容器,在不同平台运行而无需修改。
Docker 是一种容器化技术,支持开发者将应用及其依赖打包成容器,在不同平台运行而无需修改。本文探讨了 Docker 在多平台应用构建与部署中的作用,包括环境一致性、依赖管理、快速构建等优势,以及部署流程和注意事项,展示了 Docker 如何简化开发与部署过程,提高效率和可移植性。
49 4
|
21天前
|
存储 缓存 运维
Docker镜像采用分层存储,每层代表镜像的一部分,如基础组件或应用依赖,多层叠加构成完整镜像
Docker镜像采用分层存储,每层代表镜像的一部分,如基础组件或应用依赖,多层叠加构成完整镜像。此机制减少存储占用,提高构建和传输效率。Docker还通过缓存机制提升构建和运行效率,减少重复工作。文章深入解析了Docker镜像分层存储与缓存机制,包括具体实现、管理优化及实际应用案例,帮助读者全面理解其优势与挑战。
42 4
下一篇
DataWorks