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

相关推荐
suimeng66 分钟前
基本元素定位(findElement方法)
java·selenium
方渐鸿7 分钟前
【2025】快速部署安装docker以及项目搭建所需要的基础环境(mysql、redis、nginx、nacos)
java·运维·docker·持续部署·dockercompse
程序员鱼皮8 分钟前
2025最新 Java 面经:美团后端面试真实复盘,附答案模板,速速收藏!
java·后端·面试
我要学编程(ಥ_ಥ)14 分钟前
初始JavaEE篇 —— Mybatis-plus 操作数据库
java·java-ee·mybatis·mybatis-plus
有来技术22 分钟前
从0到1手撸企业级权限系统:基于 youlai-boot(开源) + Java17 + Spring Boot 3 完整实战
java·spring boot·后端
皮卡兔子屋28 分钟前
java虚拟机---JVM
java·jvm
艾妮艾妮1 小时前
C语言常见3种排序
java·c语言·开发语言·c++·算法·c#·排序算法
java技术小馆1 小时前
Zookeeper中的Zxid是如何设计的
java·分布式·zookeeper·云原生
葵野寺1 小时前
【多线程】synchronized锁升级和优化
java·开发语言·java-ee