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镜像内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论