容器化spring boot应用程序

容器化spring boot应用程序有多种方式,如基于简单的Dockerfile,多阶段Dockerfile以及基于Docker Compose等,我们将逐步给大家介绍,本节主要介绍基于简单的Dockerfile进行容器化spring boot的应用程序。

创建 Spring boot 应用程序

创建一个简单的spring boot应用程序,有多种方式,如基于Spring Initializr、基于Maven或者Gradle等多种方式,大家可以根据自己的偏好进行创建,我们以Maven为例,需要添加以下依赖项:

复制代码
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

其中插件spring-boot-maven-plugin用于打包spring boot的jar包,必须要添加该插件,否则会导致最终的jar包不能执行。

添加端点

添加一个测试端点,用于部署后的测试,如下所示:

复制代码
@RestController
@RequestMapping(value = "test")
public class TestController {
    @GetMapping(value = "test")
    public String test() {
        return "test";
    }
}

添加 Dockerfile 文件

Dockerfile需要添加到项目的根目录下,且名字必须是Dockerfile,注意没有后缀名。Dockerfile的内容如下所示:

复制代码
FROM openjdk:17-jdk-alpine
MAINTAINER author
RUN mkdir service
WORKDIR service
COPY JwtDemo-1.0-SNAPSHOT.jar application.jar
ENTRYPOINT ["java","-jar","application.jar"]

如上代码所示,

第一行使用的是jdk 17的镜像

第二行是一个维护者的信息,不建议太多;

第三行run 主要是在容器内创建文件夹service

第四行workdir 用于将工作目录设置为上一步创建的service文件夹

第五行copy 用于将程序的jar包拷贝到容器内部,基于第四行,复制到了容器内部的service文件夹中

第六行是启动jar包的命令,用于容器启动后,运行应用程序

构建镜像

我是基于linux的centos系统进行镜像的构造和容器的运行的,因此,需要将打包后的jar包即JwtDemo-*.jar上传到linux系统中,同时也需要将Dockerfile同样复制到linux上与jar包在一个目录下,如下图所示:

构建镜像的命令如下:

复制代码
docker build -t jwt:v1 .

以上命令用于构建镜像jwt,其中v1是新镜像的版本号,如果没有v1,则默认为latest;此外需要注意的是,在这个命令行的末尾有一个点,用于加载当前目录的Dockerfile文件,这也是为什么创建Dockerfile时使用该名称的原因,当然也可以使用其他文件名,但需要使用其他参数进行指定。

创建后的镜像如下

启动容器

运行如下命令,启动该容器

复制代码
docker container run -d -p 3000:8080 --name jwt jwt:v1

如上图,通过docker container run命令,启动另一个容器,名称为jwt,并将容器内部应用程序的端口8080映射到了宿主机的3000的端口上,执行以上命令之后,可以执行如下命令调用test的端点

如上所示,通过调用宿主机的3000端口,可以发现能够正常使用

至此,我们完成了spring boot应用程序的容器化工作,如果后续我们的程序发生了变化,则可以通过上述的步骤,重新构建镜像,删除已有的容器,并创建新的容器便可以了。

希望以上文章对您有所帮助,后续将给大家介绍如何通过idea直接连接到远程的docker上以及如何基于Docker Compose进行应用的容器化。

相关推荐
黑马师兄9 分钟前
RAG混合检索深度解析:让AI真正找到你要的内容
java·人工智能·ai·agent·rag·ai-native
码客日记13 分钟前
Spring Boot 配置文件敏感信息加密(Jasypt 企业级完整方案)
java·spring boot·git
凡人叶枫1 小时前
Effective C++ 条款04:确定对象被使用前已先被初始化
java·linux·开发语言·c++·嵌入式开发
杨运交1 小时前
[030][Web模块]Spring Boot 验证与 OpenAPI 集成实战:从校验规则到文档生成
前端·spring boot·python
极客先躯1 小时前
高级java每日一道面试题-2026年02月01日-实战篇[Docker]-Docker Volume 的生命周期管理是怎样的?
java·运维·docker·容器·持久化·架构图·容器卷
NE_STOP1 小时前
Raft算法处理细节
java
努力攻坚操作系统1 小时前
编程语言编译运行机制对比:C / Java / Python
java·c语言·python
慧一居士1 小时前
对比两个文件内容是否完全一致,java实现示例
java
再写一行代码就下班2 小时前
Cursor配置Java环境、创建Spring Boot项目的步骤
java·开发语言·spring boot
摇滚侠2 小时前
Java 零基础全套教程,类的加载过程与类加载器的理解,笔记 189
java·后端·intellij-idea