Spring Boot 构建 Docker 镜像的几种方式

如今,基于 Spring Boot 构建 Docker 镜像的方式有很多种,例如

  • Cloud Native Buildpacks(Spring Boot 2.3+ 版本开始支持)
  • Googlejib-maven-plugin
  • fabric8spotifydocker-maven-plugin

以上几种方式基本都是采用各自的 Maven 插件,将仓库配置在 Maven 的 pom.xml 文件里的 <build> 标签里。Spring Boot 可以快速将 Java 应用程序构建为 Docker 镜像推送至指定远程仓库:

  • DockerHub 官方公共仓库(DockerHub 官方公共仓库国内访问速度堪忧,不推荐)
  • 阿里云镜像仓库(需要在阿里云登录账号自行创建仓库)
  • 自建私有镜像仓库

本文不采用以上任何一种方式,打算采用最原始的办法,自己写 Dockerfile,手动打包。然后使用 idea 的 Docker 与 SSH 远程连接功能,远程构建并启动容器。具体过程如下。

条件准备

  • IDEA:版本越新越好
  • ams-0.0.1-SNAPSHOT.jar:一个集成了 Swagger 的 SpringBoot 演示项目。使用 maven clean package 打成的 jar 包,默认生成在 /target 目录下,将其拷贝到 /resources/static 目录下
  • Dockerfile:自己手动编写,就放在 /resources/static 目录下
  • 一台装有 Docker 的 CentOS,系统版本 7+。本文里其 ip 为 192.168.62.128

在 IDEA 里配置 SSH

其实有很多种方式,最直接的直接见下图
请添加图片描述

在 IDEA 里配置 Docker

这里选择 SSH 选项,然后直接选择上文配置好的装有 Docker 的主机即可。
请添加图片描述

编写 Dockerfile 文件

/resources/static 下新建 Dockerfile 文件,编写

# 基础镜像
FROM openjdk
# 作者信息
LABEL maintainer="2466267753@qq.com"
# 开放端口
EXPOSE 8081
# 将 /target 目录下的 ams-0.0.1-SNAPSHOT.jar 复制到 docker 中,并重命名为 ams.jar
ADD ams-0.0.1-SNAPSHOT.jar ams.jar
# 容器执行命令
ENTRYPOINT ["java", "-jar", "ams.jar"]

运行 Dockerfile 文件

在 IDEA 打开写好的 Dockerfile 文件,可以看到左上角有运行标志,直接点击运行
请添加图片描述

然后可以看到与在 CentOS 上构建时一致的构建日志。可以看到图片右边上方有很多选项:

  • 【日志】可以看到 jar 启动日志
  • 【属性】可以看到镜像 ID、容器 ID、还可以修改容器名称
  • 【环境变量】即容器内的环境变量
  • 【端口绑定】可以设置容器端口与宿主机的端口映射,上文 Dockerfile 我们在容器里暴露了 8081 端口,我们映射到宿主机的 18081,点击保存。然后在浏览器输入 http://192.168.45.128:18081/swagger-ui.html 即可打开项目的 swagger 接口文档页面
  • 【卷绑定】可以指定主机与容器的路径挂载
  • 【文件】容器内的文件目录
    请添加图片描述

总结

到此,项目已经成功部署到 CentOS 的 Docker 上。可以使用 docker ps 查看,确实正在运行。

在上图也可以看到,左侧树形菜单区域,有对容器的管理。相当于点点鼠标,就替代了在 CentOS 命令行下一行一行命令的书写。

对于 IDEA 里的 SSH 配置与使用、IDEA 里的 Docker 的可视化操作还是很方便的,这个“语法糖”确实很甜。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐