在 Docker 上部署 Spring Boot 开发的应用

本文演示如何将开发完成的 Spring Boot 应用通过 Docker 进行发布。

为了演示发布 Spring Boot 的应用,在本文中使用 Spring Boot 构建Rest服务实验手册(一) 中构建的一个简单的 Todo 服务作为实验案例。如果不熟悉相关的开发,也可以根据 Spring Boot 构建Rest服务实验手册 -- 源码下载 的指引,直接下载完整的代码开始本次实验。

发布的步骤及工具选择

构建 Spring Boot 应用时,通常的做法是: 直接打包成一个 jar 包, jar 包中已经包含了项目的代码、依赖库和相关的配置文件。然后复制 jar 包到服务器上指定的位置。启动时直接运行

1
java -jar <your application package name>

即可。

发布到 Docker 容器中也采用类似的步骤,但如果每次发布都要手工执行构建镜像的命令就太繁琐,也不利于发布自动化。因此我们采用一个 maven 的 plugin 来帮助我们完成这个重复的任务。

本文采用的是: docker-maven-plugin 插件。官网

使用 pom.xml 进行配置并发布

如果开发的程序比较简单,可以直接采用在 pom.xml 添加 plugin 并完全在 pom.xml 中配置构建参数的方法。

打开项目的 pom.xml 文件,在文件底部的 build - plugins 节中添加 docker-maven-plugin, 如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>

<!-- Docker -->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.2.2</version>
<configuration>
<imageName>restful-starter</imageName>
<baseImage>openjdk:8-jre-alpine</baseImage>
<entryPoint>["java", "-jar", "/${project.build.finalName}.jar"]</entryPoint>
<!-- copy the service's jar file from target into the root directory of the image -->
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
</plugins>
</build>

以上代码中,8 ~ 26 行是新加与Docker 发布有关的代码。在 10 ~ 12 行,我们指名了使用的 plugin (docker-maven-plugin) 和其版本。在接下来的配置中,我们指名:

imageName - 最终生成的 Docker 进行名称为: restful-starter
baseImage - 基于那个镜像来构建,相当于 Dockerfile 中的 FROM 指令
entryPoint - 指名容器运行时的启动代码, 相当于 Dockerfile 中的 ENTRYPOINT 指令

保存修改后,在命令行执行:

1
mvn -DtestSkip clean package docker:build

构建完成后,执行 docker images 命令可以看到构建好的镜像:

1
2
REPOSITORY                   TAG                 IMAGE ID            CREATED             SIZE
restful-starter latest 787231d07067 About an hour ago 130MB

执行一下命令,可以启动容器:

1
docker run --name springboot-starter -d -p 8080:8080 restful-starter

然后在浏览起上访问 localhost:8080/todo/ 就可以看到服务执行的结果了。

如果需要在构建过程中进行更精细的控制,也可以继续使用 Dockerfile。

本文标题:在 Docker 上部署 Spring Boot 开发的应用

文章作者:梅老师

发布时间:2019年11月11日 - 19:11

最后更新:2020年09月16日 - 08:09

原始链接:https://www.mls-tech.info/docker/docker-deploy-springboot-app/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。