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

目录
相关文章
|
4天前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个具有动态路由和菜单功能的前后端分离应用。
本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个具有动态路由和菜单功能的前后端分离应用。首先,创建并配置 Spring Boot 项目,实现后端 API;然后,使用 Ant Design Pro Vue 创建前端项目,配置动态路由和菜单。通过具体案例,展示了如何快速搭建高效、易维护的项目框架。
80 62
|
4天前
|
SQL 关系型数据库 数据库
国产数据实战之docker部署MyWebSQL数据库管理工具
【10月更文挑战第23天】国产数据实战之docker部署MyWebSQL数据库管理工具
21 3
国产数据实战之docker部署MyWebSQL数据库管理工具
|
11天前
|
缓存 监控 持续交付
|
1天前
|
关系型数据库 MySQL Docker
docker环境下mysql镜像启动后权限更改问题的解决
在Docker环境下运行MySQL容器时,权限问题是一个常见的困扰。通过正确设置目录和文件的权限,可以确保MySQL容器顺利启动并正常运行。本文提供了多种解决方案,包括在主机上设置正确的权限、使用Dockerfile和Docker Compose进行配置、在容器启动后手动更改权限以及使用 `init`脚本自动更改权限。根据实际情况选择合适的方法,可以有效解决MySQL容器启动后的权限问题。希望本文对您在Docker环境下运行MySQL容器有所帮助。
8 1
|
2天前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个前后端分离的应用框架,实现动态路由和菜单功能
本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个前后端分离的应用框架,实现动态路由和菜单功能。首先,确保开发环境已安装必要的工具,然后创建并配置 Spring Boot 项目,包括添加依赖和配置 Spring Security。接着,创建后端 API 和前端项目,配置动态路由和菜单。最后,运行项目并分享实践心得,帮助开发者提高开发效率和应用的可维护性。
9 2
|
8天前
|
Kubernetes 负载均衡 Docker
构建高效微服务架构:Docker与Kubernetes的完美搭档
本文介绍了Docker和Kubernetes在构建高效微服务架构中的应用,涵盖基本概念、在微服务架构中的作用及其实现方法。通过具体实例,如用户服务、商品服务和订单服务,展示了如何利用Docker和Kubernetes实现服务的打包、部署、扩展及管理,确保微服务架构的稳定性和可靠性。
45 7
|
7天前
|
Kubernetes 负载均衡 Docker
构建高效微服务架构:Docker与Kubernetes的完美搭档
【10月更文挑战第22天】随着云计算和容器技术的快速发展,微服务架构逐渐成为现代企业级应用的首选架构。微服务架构将一个大型应用程序拆分为多个小型、独立的服务,每个服务负责完成一个特定的功能。这种架构具有灵活性、可扩展性和易于维护的特点。在构建微服务架构时,Docker和Kubernetes是两个不可或缺的工具,它们可以完美搭档,为微服务架构提供高效的支持。本文将从三个方面探讨Docker和Kubernetes在构建高效微服务架构中的应用:一是Docker和Kubernetes的基本概念;二是它们在微服务架构中的作用;三是通过实例讲解如何使用Docker和Kubernetes构建微服务架构。
34 6
|
3天前
|
存储 Java 开发者
成功优化!Java 基础 Docker 镜像从 674MB 缩减到 58MB 的经验分享
本文分享了如何通过 jlink 和 jdeps 工具将 Java 基础 Docker 镜像从 674MB 优化至 58MB 的经验。首先介绍了选择合适的基础镜像的重要性,然后详细讲解了使用 jlink 构建自定义 JRE 镜像的方法,并通过 jdeps 自动化模块依赖分析,最终实现了镜像的大幅缩减。此外,文章还提供了实用的 .dockerignore 文件技巧和选择安全、兼容的基础镜像的建议,帮助开发者提升镜像优化的效果。
|
6天前
|
负载均衡 应用服务中间件 nginx
基于Nginx和Consul构建自动发现的Docker服务架构——非常之详细
通过使用Nginx和Consul构建自动发现的Docker服务架构,可以显著提高服务的可用性、扩展性和管理效率。Consul实现了服务的自动注册与发现,而Nginx则通过动态配置实现了高效的反向代理与负载均衡。这种架构非常适合需要高可用性和弹性扩展的分布式系统。
15 4
|
6天前
|
消息中间件 Linux RocketMQ
在Red Hat Enterprise Linux 9上使用Docker快速安装并部署
通过以上步骤,你可以在Red Hat Enterprise Linux 9上使用Docker快速安装并部署RocketMQ。这种方法不仅简化了安装过程,还提供了一个灵活的环境来管理和扩展消息队列系统。RocketMQ作为一款高性能的分布式消息系统,通过Docker可以实现快速部署和高效管理。
22 2