目录
[2.新建Spring Boot项目](#2.新建Spring Boot项目)
5.上传Dockerfile和jar包到Docker所在的Linux机器
1.前提条件
-
Windows下安装好JDK 8+、Maven 3.6+、IDEA
-
Linux下安装好Docker
2.新建Spring Boot项目
修改初始化Spring Boot项目URL:打开IDEA,点击File-->New Project,点击Spring Initializr,点击设置图标,填写Server URL地址为
md-end-block
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'

浏览器访问
md-end-block
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内容如下:
md-end-block
# 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目录
md-end-block
[root@localhost ~]# mkdir demo
分别上传Dockerfile和demo-0.0.1-SNAPSHOT.jar到Linux demo目录下,上传成功后可查看到文件如下:
md-end-block
[root@localhost ~]# cd demo
[root@localhost demo]# ls
Dockerfile demo-0.0.1-SNAPSHOT.jar
6.构建Docker镜像
执行docker build命令构建镜像
md-end-block
docker build -t spring-boot-jdk8-demo:1.0 .
操作过程如下
md-end-block
[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]#
查看镜像
md-end-block
[root@localhost demo]# docker images | grep spring-boot
spring-boot-jdk8-demo 1.0 db084d7b5dbe About a minute ago 526MB
7.运行容器
md-end-block
docker run -d -p 8080:8080 --name spring-boot-jdk8 spring-boot-jdk8-demo:1.0
8.测试访问及排错
浏览器访问
md-end-block
Linux ip:8080/html
发现访问不到内容

排错:发现容器没有起来
md-end-block
[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问题
md-end-block
[root@localhost demo]# docker logs spring-boot-jdk8
no main manifest attribute, in /app.jar
原因是pom.xml中mainClass主类配置被skip为true忽略了

解决
删除mainClass下方的skip一行
md-end-block
<skip>true</skip>
修改pom.xml后,效果如下

刷新maven项目

重新打jar包

重新上传jar包到Linux demo目录
删除原来的容器
md-end-block
[root@localhost ~]# docker rm spring-boot-jdk8
删除原来的镜像
md-end-block
[root@localhost demo]# docker rmi -f spring-boot-jdk8-demo:1.0
重新构建镜像
md-end-block
[root@localhost demo]# docker build -t spring-boot-jdk8-demo:1.0 .
重新运行容器
md-end-block
[root@localhost demo]# docker run -d -p 8080:8080 --name spring-boot-jdk8 spring-boot-jdk8-demo:1.0
浏览器访问
md-end-block
Linux ip:8080/html

完成!enjoy it!