容器化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进行应用的容器化。

相关推荐
李慕婉学姐1 小时前
【开题答辩过程】以《基于JAVA的校园即时配送系统的设计与实现》为例,不知道这个选题怎么做的,不知道这个选题怎么开题答辩的可以进来看看
java·开发语言·数据库
奋进的芋圆3 小时前
Java 延时任务实现方案详解(适用于 Spring Boot 3)
java·spring boot·redis·rabbitmq
sxlishaobin3 小时前
设计模式之桥接模式
java·设计模式·桥接模式
model20053 小时前
alibaba linux3 系统盘网站迁移数据盘
java·服务器·前端
荒诞硬汉3 小时前
JavaBean相关补充
java·开发语言
提笔忘字的帝国3 小时前
【教程】macOS 如何完全卸载 Java 开发环境
java·开发语言·macos
2501_941882484 小时前
从灰度发布到流量切分的互联网工程语法控制与多语言实现实践思路随笔分享
java·开发语言
華勳全栈4 小时前
两天开发完成智能体平台
java·spring·go
alonewolf_994 小时前
Spring MVC重点功能底层源码深度解析
java·spring·mvc
沛沛老爹4 小时前
Java泛型擦除:原理、实践与应对策略
java·开发语言·人工智能·企业开发·发展趋势·技术原理