构建Spring Boot项目Docker镜像

张开发
2026/4/9 10:43:57 15 分钟阅读

分享文章

构建Spring Boot项目Docker镜像
目录1.前提条件2.新建Spring Boot项目3.打jar包4.编写Dockerfile5.上传Dockerfile和jar包到Docker所在的Linux机器6.构建Docker镜像7.运行容器8.测试访问及排错1.前提条件Windows下安装好JDK 8、Maven 3.6、IDEALinux下安装好Docker2.新建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点击NextSpring 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注意文件名必须为DockerfileDockerfile内容如下# 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目录[rootlocalhost ~]# mkdir demo分别上传Dockerfile和demo-0.0.1-SNAPSHOT.jar到Linux demo目录下上传成功后可查看到文件如下[rootlocalhost ~]# cd demo [rootlocalhost demo]# ls Dockerfile demo-0.0.1-SNAPSHOT.jar6.构建Docker镜像执行docker build命令构建镜像docker build -t spring-boot-jdk8-demo:1.0 .操作过程如下[rootlocalhost 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) [rootlocalhost demo]#查看镜像[rootlocalhost demo]# docker images | grep spring-boot spring-boot-jdk8-demo 1.0 db084d7b5dbe About a minute ago 526MB7.运行容器docker run -d -p 8080:8080 --name spring-boot-jdk8 spring-boot-jdk8-demo:1.08.测试访问及排错浏览器访问Linux ip:8080/html发现访问不到内容排错发现容器没有起来[rootlocalhost demo]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES [rootlocalhost 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问题[rootlocalhost demo]# docker logs spring-boot-jdk8 no main manifest attribute, in /app.jar原因是pom.xml中mainClass主类配置被skip为true忽略了解决删除mainClass下方的skip一行skiptrue/skip修改pom.xml后效果如下刷新maven项目重新打jar包重新上传jar包到Linux demo目录删除原来的容器[rootlocalhost ~]# docker rm spring-boot-jdk8删除原来的镜像[rootlocalhost demo]# docker rmi -f spring-boot-jdk8-demo:1.0重新构建镜像[rootlocalhost demo]# docker build -t spring-boot-jdk8-demo:1.0 .重新运行容器[rootlocalhost demo]# docker run -d -p 8080:8080 --name spring-boot-jdk8 spring-boot-jdk8-demo:1.0浏览器访问Linux ip:8080/html完成enjoy it!

更多文章