SpringBoot構(gòu)建Docker鏡像的實(shí)現(xiàn)步驟
1.前提條件
- Windows下安裝好JDK 8+、Maven 3.6+、IDEA
- Linux下安裝好Docker
2.新建Spring Boot項(xiàng)目
修改初始化Spring Boot項(xiàng)目URL:打開IDEA,點(diǎn)擊File-->New Project,點(diǎn)擊Spring Initializr,點(diǎn)擊設(shè)置圖標(biāo),填寫Server URL地址為https://start.aliyun.com/
點(diǎn)擊OK

填寫工程名稱(Name),例如demo,選擇在合適位置(Location)創(chuàng)建工程,語言(Language)選Java,類型(Type)選Maven,這里以JDK8為例,Java選擇8(若使用高版本JDK就選中對應(yīng)的高版本JDK),打包(Packaging)選擇Jar,點(diǎn)擊Next

Spring Boot版本選擇2.7.6,點(diǎn)擊Web,勾選Spring Web,點(diǎn)擊Create創(chuàng)建Spring Boot項(xiàng)目


查看啟動類DemoApplication.java

點(diǎn)擊如下三角形,運(yùn)行Spring Boot項(xiàng)目

選擇Run 'DemoApplication'

瀏覽器訪問localhost:8080/html

看到的頁面內(nèi)容是阿里云初始化Spring Boot項(xiàng)目時提供的初始模板代碼,感興趣也可以添加自己編寫的代碼,并測試通過
停止運(yùn)行程序

3.打jar包
點(diǎn)擊右側(cè)的Maven打開Maven面板,點(diǎn)開項(xiàng)目名稱的Lifecycle,按住Ctrl鍵不放,同時選中clean和package,點(diǎn)擊圖示三角形圖標(biāo)打包項(xiàng)目

看到BUILD SUCCESS字樣輸出,說明打jar包成功。根據(jù)日志提示可以看到j(luò)ar在工程目錄的target目錄下

在target目錄下看到j(luò)ar文件demo-0.0.1-SNAPSHOT.jar,說明打包成功

4.編寫Dockerfile
在項(xiàng)目根目錄新建Dockerfile文件

填寫文件名稱為Dockerfile

注意:文件名必須為Dockerfile
Dockerfile內(nèi)容如下:
# JDK8作為基礎(chǔ)鏡像 # FROM openjdk:8 FROM registry.cn-hangzhou.aliyuncs.com/my-common-images/openjdk:8 # 作者 MAINTAINER example # 復(fù)制jar COPY demo-0.0.1-SNAPSHOT.jar app.jar # 啟動命令 ENTRYPOINT ["java","-jar","/app.jar"]
效果如下

5.上傳Dockerfile和jar包到Docker所在的Linux機(jī)器
Linux創(chuàng)建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.構(gòu)建Docker鏡像
執(zhí)行docker build命令構(gòu)建鏡像
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.運(yùn)行容器
docker run -d -p 8080:8080 --name spring-boot-jdk8 spring-boot-jdk8-demo:1.0
8.測試訪問及排錯
瀏覽器訪問
Linux ip:8080/html
發(fā)現(xiàn)訪問不到內(nèi)容

排錯:發(fā)現(xiàn)容器沒有起來
[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
查看容器日志:發(fā)現(xiàn)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項(xiàng)目

重新打jar包

重新上傳jar包到Linux demo目錄
刪除原來的容器
[root@localhost ~]# docker rm spring-boot-jdk8
刪除原來的鏡像
[root@localhost demo]# docker rmi -f spring-boot-jdk8-demo:1.0
重新構(gòu)建鏡像
[root@localhost demo]# docker build -t spring-boot-jdk8-demo:1.0 .
重新運(yùn)行容器
[root@localhost demo]# docker run -d -p 8080:8080 --name spring-boot-jdk8 spring-boot-jdk8-demo:1.0
瀏覽器訪問
Linux ip:8080/html

到此這篇關(guān)于SpringBoot構(gòu)建Docker鏡像的實(shí)現(xiàn)步驟的文章就介紹到這了,更多相關(guān)SpringBoot構(gòu)建Docker鏡像內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- SpringBoot程序打包Docker鏡像的最佳方式
- SpringBoot項(xiàng)目docker分層鏡像構(gòu)建案例
- SpringBoot Docker鏡像分層的優(yōu)化指南
- SpringBoot制作Docker鏡像接入SkyWalking的詳細(xì)過程
- Docker自定義鏡像的實(shí)現(xiàn)步驟(SpringBoot程序?yàn)槔?
- Docker打包SpringBoot鏡像的實(shí)現(xiàn)方式
- SpringBoot打包成Docker鏡像的項(xiàng)目實(shí)踐
- SpringBoot打包成Docker鏡像的幾種實(shí)現(xiàn)方式
- 一步步教你把SpringBoot項(xiàng)目打包成Docker鏡像
- SpringBoot打包docker鏡像發(fā)布的詳細(xì)步驟
相關(guān)文章
鴻蒙與Java跨平臺Socket通信實(shí)戰(zhàn)代碼實(shí)例
Socket是網(wǎng)絡(luò)編程的基礎(chǔ),提供了進(jìn)程間通信的通用接口,下面這篇文章主要介紹了鴻蒙與Java跨平臺Socket通信實(shí)戰(zhàn)的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2026-03-03
MybatisPlus?自定義插件實(shí)現(xiàn)攔截SQL修改功能(實(shí)例詳解)
這篇文章主要介紹了MybatisPlus?自定義插件實(shí)現(xiàn)攔截SQL修改功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧2023-11-11
SpringMVC中Controller層獲取前端請求參數(shù)的方式匯總
這篇文章主要介紹了SpringMVC中Controller層獲取前端請求參數(shù)的幾種方式,本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-08-08
Springboot配置管理Externalized?Configuration深入探究
這篇文章主要介紹了Springboot配置管Externalized?Configuration深入探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01
SpringBoot使用Nacos配置中心的實(shí)現(xiàn)
這篇文章主要介紹了SpringBoot使用Nacos配置中心的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12

