SpringBoot构建Docker镜像的实现步骤

 更新时间:2026年05月07日 08:26:05   作者:Hadoop_Liang  
本文主要介绍了SpringBoot构建Docker镜像的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

1.前提条件

  • Windows下安装好JDK 8+、Maven 3.6+、IDEA
  • Linux下安装好Docker

2.新建Spring Boot项目

修改初始化Spring Boot项目URL:打开IDEA,点击File-->New Project,点击Spring Initializr,点击设置图标,填写Server URL地址为https://start.aliyun.com/

点击OK

填写工程名称(Name),例如demo,选择在合适位置(Location)创建工程,语言(Language)选Java,类型(Type)选Maven,这里以JDK8为例,Java选择8(若使用高版本JDK就选中对应的高版本JDK),打包(Packaging)选择Jar,点击Next

Spring Boot版本选择2.7.6,点击Web,勾选Spring Web,点击Create创建Spring Boot项目

查看启动类DemoApplication.java

点击如下三角形,运行Spring Boot项目

选择Run 'DemoApplication'

浏览器访问localhost:8080/html

看到的页面内容是阿里云初始化Spring Boot项目时提供的初始模板代码,感兴趣也可以添加自己编写的代码,并测试通过

停止运行程序

3.打jar包

点击右侧的Maven打开Maven面板,点开项目名称的Lifecycle,按住Ctrl键不放,同时选中clean和package,点击图示三角形图标打包项目

看到BUILD SUCCESS字样输出,说明打jar包成功。根据日志提示可以看到jar在工程目录的target目录下

在target目录下看到jar文件demo-0.0.1-SNAPSHOT.jar,说明打包成功

4.编写Dockerfile

在项目根目录新建Dockerfile文件

填写文件名称为Dockerfile

注意:文件名必须为Dockerfile

Dockerfile内容如下:

# JDK8作为基础镜像
# FROM openjdk:8
FROM registry.cn-hangzhou.aliyuncs.com/my-common-images/openjdk:8
# 作者
MAINTAINER example
# 复制jar
COPY demo-0.0.1-SNAPSHOT.jar app.jar
# 启动命令
ENTRYPOINT ["java","-jar","/app.jar"]

效果如下

5.上传Dockerfile和jar包到Docker所在的Linux机器

Linux创建demo目录

[root@localhost ~]# mkdir demo

分别上传Dockerfile和demo-0.0.1-SNAPSHOT.jar到Linux demo目录下,上传成功后可查看到文件如下:

[root@localhost ~]# cd demo
[root@localhost demo]# ls
Dockerfile  demo-0.0.1-SNAPSHOT.jar

6.构建Docker镜像

执行docker build命令构建镜像

docker build -t spring-boot-jdk8-demo:1.0 .

操作过程如下

[root@localhost demo]# docker build -t spring-boot-jdk8-demo:1.0 .
[+] Building 0.0s (7/7) FINISHED                                   docker:default
 => [internal] load build definition from Dockerfile                         0.0s
 => => transferring dockerfile: 292B                                         0.0s
 => WARN: MaintainerDeprecated: Maintainer instruction is deprecated in fav  0.0s
 => [internal] load metadata for registry.cn-hangzhou.aliyuncs.com/my-commo  0.0s
 => [internal] load .dockerignore                                            0.0s
 => => transferring context: 2B                                              0.0s
 => CACHED [1/2] FROM registry.cn-hangzhou.aliyuncs.com/my-common-images/op  0.0s
 => [internal] load build context                                            0.0s
 => => transferring context: 6.05kB                                          0.0s
 => [2/2] COPY demo-0.0.1-SNAPSHOT.jar app.jar                               0.0s
 => exporting to image                                                       0.0s
 => => exporting layers                                                      0.0s
 => => writing image sha256:db084d7b5dbee75438b823914f7ea8bfafd0a942c610adc  0.0s
 => => naming to docker.io/library/spring-boot-jdk8-demo:1.0                 0.0s
​
 1 warning found (use docker --debug to expand):
 - MaintainerDeprecated: Maintainer instruction is deprecated in favor of using label (line 6)
[root@localhost demo]#

查看镜像

[root@localhost demo]# docker images | grep spring-boot
spring-boot-jdk8-demo                                        1.0           db084d7b5dbe   About a minute ago   526MB

7.运行容器

docker run -d -p 8080:8080 --name spring-boot-jdk8 spring-boot-jdk8-demo:1.0

8.测试访问及排错

浏览器访问

Linux ip:8080/html

发现访问不到内容

排错:发现容器没有起来

[root@localhost demo]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[root@localhost demo]# docker ps -a
CONTAINER ID   IMAGE                       COMMAND                  CREATED              STATUS                          PORTS     NAMES
2640f7e02e57   spring-boot-jdk8-demo:1.0   "java -jar /app.jar"     About a minute ago   Exited (1) About a minute ago             spring-boot-jdk8

查看容器日志:发现no main manifest attribute, in /app.jar问题

[root@localhost demo]# docker logs spring-boot-jdk8
no main manifest attribute, in /app.jar

原因是pom.xml中mainClass主类配置被skip为true忽略了

解决

删除mainClass下方的skip一行

<skip>true</skip>

修改pom.xml后,效果如下

刷新maven项目

重新打jar包

重新上传jar包到Linux demo目录

删除原来的容器

[root@localhost ~]# docker rm spring-boot-jdk8

删除原来的镜像

[root@localhost demo]# docker rmi -f spring-boot-jdk8-demo:1.0

重新构建镜像

[root@localhost demo]# docker build -t spring-boot-jdk8-demo:1.0 .

重新运行容器

[root@localhost demo]# docker run -d -p 8080:8080 --name spring-boot-jdk8 spring-boot-jdk8-demo:1.0

浏览器访问

Linux ip:8080/html

到此这篇关于SpringBoot构建Docker镜像的实现步骤的文章就介绍到这了,更多相关SpringBoot构建Docker镜像内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Windows Zookeeper安装过程及启动图解

    Windows Zookeeper安装过程及启动图解

    这篇文章主要介绍了Windows Zookeeper安装过程及启动图解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-12-12
  • 鸿蒙与Java跨平台Socket通信实战代码实例

    鸿蒙与Java跨平台Socket通信实战代码实例

    Socket是网络编程的基础,提供了进程间通信的通用接口,下面这篇文章主要介绍了鸿蒙与Java跨平台Socket通信实战的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2026-03-03
  • JAVA中值类型和引用类型的区别

    JAVA中值类型和引用类型的区别

    在java开发中经常会遇到值类型和引用类型知识,但是有很多朋友不清楚java中值类型和引用类型的区别,今天小编通过本文给大家介绍下
    2017-02-02
  • Java中初始化List集合的八种方式汇总

    Java中初始化List集合的八种方式汇总

    List 是 Java 开发中经常会使用的集合,下面这篇文章主要给大家介绍了关于Java中初始化List集合的八种方式,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-06-06
  • Java集合List的方法及遍历方式举例

    Java集合List的方法及遍历方式举例

    这篇文章主要介绍了Java集合List的方法及遍历方式的相关资料,List 是Java集合框架中的一种接口,继承自Collection接口,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-05-05
  • MybatisPlus 自定义插件实现拦截SQL修改功能(实例详解)

    MybatisPlus 自定义插件实现拦截SQL修改功能(实例详解)

    这篇文章主要介绍了MybatisPlus 自定义插件实现拦截SQL修改功能,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2023-11-11
  • Java注解简介和使用详细讲解

    Java注解简介和使用详细讲解

    Java 语言中的类、构造器、方法、成员变量、参数等都可以被注解进行标注,这篇文章主要介绍了Java注解的介绍和使用详细讲解,需要的朋友可以参考下
    2023-02-02
  • SpringMVC中Controller层获取前端请求参数的方式汇总

    SpringMVC中Controller层获取前端请求参数的方式汇总

    这篇文章主要介绍了SpringMVC中Controller层获取前端请求参数的几种方式,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-08-08
  • Springboot配置管理Externalized Configuration深入探究

    Springboot配置管理Externalized Configuration深入探究

    这篇文章主要介绍了Springboot配置管Externalized Configuration深入探究,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2024-01-01
  • SpringBoot使用Nacos配置中心的实现

    SpringBoot使用Nacos配置中心的实现

    这篇文章主要介绍了SpringBoot使用Nacos配置中心的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12

最新评论