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镜像内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java 实战项目之家居购物商城系统详解流程

    Java 实战项目之家居购物商城系统详解流程

    读万卷书不如行万里路,只学书上的理论是远远不够的,只有在实战中才能获得能力的提升,本篇文章手把手带你用Java实现一个家居购物商城系统,大家可以在过程中查缺补漏,提升水平
    2021-11-11
  • JSR303校验注解和自定义校验注解的使用

    JSR303校验注解和自定义校验注解的使用

    这篇文章主要介绍了JSR303校验注解和自定义校验注解的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • Druid之连接创建及销毁示例详解

    Druid之连接创建及销毁示例详解

    这篇文章主要为大家介绍了Druid之连接创建及销毁示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-02-02
  • Java Map 原理、实现与使用场景分析

    Java Map 原理、实现与使用场景分析

    文章详细介绍了Java中的Map接口及其主要实现类,包括HashMap、LinkedHashMap、TreeMap、ConcurrentHashMap和Properties,涵盖了Map的原理、核心方法、常见使用场景、遍历方式以及注意事项,感兴趣的朋友跟随小编一起看看吧
    2025-12-12
  • springboot接收http请求,解决参数中+号变成空格的问题

    springboot接收http请求,解决参数中+号变成空格的问题

    这篇文章主要介绍了springboot接收http请求,解决参数中+号变成空格的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • Java生成随机数之Random与ThreadLocalRandom性能比较详解

    Java生成随机数之Random与ThreadLocalRandom性能比较详解

    大家项目中如果有生成随机数的需求,我想大多都会选择使用Random来实现,它内部使用了CAS来实现。 实际上,JDK1.7之后,提供了另外一个生成随机数的类ThreadLocalRandom,那么他们二者之间的性能是怎么样的呢?本文就来详细说说
    2022-12-12
  • springcloud-eureka与gateway简易搭建过程

    springcloud-eureka与gateway简易搭建过程

    文章介绍了如何搭建Eureka服务注册中心和Spring Cloud Gateway网关,对于Eureka,首先创建eureka-server项目,配置依赖和属性,启动后通过控制台查看服务注册状态,对于Spring Cloud Gateway,创建gateway项目,配置依赖和属性,启动后测试路由转发功能,感兴趣的朋友一起看看吧
    2025-12-12
  • java开发BeanUtils类解决实体对象间赋值

    java开发BeanUtils类解决实体对象间赋值

    这篇文章主要为大家介绍了java开发中使用BeanUtils类实现实体对象之间的赋值有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步学有所得
    2021-10-10
  • java+SpringBoot设计实现评教系统

    java+SpringBoot设计实现评教系统

    这篇文章主要介绍了用过Java SpringBoot实现一个简单的评价系统,可以做到学生管理、教师管理、评教管理、指标管理、课程管理等。感兴趣的可以了解一下
    2021-12-12
  • Spring Boot+maven打war包的方法

    Spring Boot+maven打war包的方法

    这篇文章主要介绍了Spring Boot+maven打war包的方法,本文通过实例代码相结合的形式给大家介绍的非常详细,需要的朋友参考下吧
    2018-05-05

最新评论