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