本文演示如何将开发完成的 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 | <build> |
以上代码中,8 ~ 26 行是新加与Docker 发布有关的代码。在 10 ~ 12 行,我们指名了使用的 plugin (docker-maven-plugin) 和其版本。在接下来的配置中,我们指名:
imageName - 最终生成的 Docker 进行名称为: restful-starter
baseImage - 基于那个镜像来构建,相当于 Dockerfile 中的 FROM 指令
entryPoint - 指名容器运行时的启动代码, 相当于 Dockerfile 中的 ENTRYPOINT 指令
保存修改后,在命令行执行:
1 | mvn -DskipTests clean package docker:build |
构建完成后,执行 docker images 命令可以看到构建好的镜像:
1 | REPOSITORY TAG IMAGE ID CREATED SIZE |
执行一下命令,可以启动容器:
1 | docker run --name springboot-starter -d -p 8080:8080 restful-starter |
然后在浏览起上访问 localhost:8080/todo/ 就可以看到服务执行的结果了。
如果需要在构建过程中进行更精细的控制,也可以继续使用 Dockerfile。