如何用IDEA+Docker一鍵部署項(xiàng)目SpringBoot項(xiàng)目
1. 部署項(xiàng)目的傳統(tǒng)方式
我們先來看一下部署項(xiàng)目的傳統(tǒng)方式:
- 將項(xiàng)目打成 jar 包
- 將本地打包出來的 jar 包上傳到服務(wù)器上
- 通過
java -jar指令啟動(dòng)項(xiàng)目
如果項(xiàng)目需要重新部署,需要重新執(zhí)行一次以上步驟,非常麻煩,而且傳統(tǒng)的部署項(xiàng)目方式也不方便查看日志
今天為大家介紹的 IDEA + Docker 一鍵部署項(xiàng)目正是為了解決這個(gè)問題,不僅操作簡(jiǎn)單,而且查看日志也非常方便
本次演示的環(huán)境為:
- JDK 17
- IDEA 2024.2(安裝了漢化插件的 IDEA,英文版的 IDEA 操作類似)
- Ubuntu 22.04 LTS
- Docker 26.1.3
2. 前置工作
- 服務(wù)器已安裝 Docker,并且能夠正常拉取鏡像
- 了解簡(jiǎn)單 Dockerfile 文件的編寫
- 本地電腦已安裝 IntelliJ IDEA 開發(fā)工具
- 能正常訪問接口的 SpringBoot 項(xiàng)目
3. SSH配置
由于需要連接服務(wù)器進(jìn)行遠(yuǎn)程部署,需要先配置 SSH
打開 IDEA 的設(shè)置界面

在設(shè)置界面中找到 SSH 配置

點(diǎn)擊 +,創(chuàng)建一個(gè)新的 SSH 連接,填入主機(jī)、用戶名和密碼后點(diǎn)擊測(cè)試連接

4. 連接Docker守護(hù)進(jìn)程
成功連接 Docker 守護(hù)進(jìn)程后才能執(zhí)行與 Docker 相關(guān)的操作
在設(shè)置中找到 Docker,點(diǎn)擊 +,選擇以 SSH 方法連接到 Docker 守護(hù)進(jìn)程,接著點(diǎn)擊下拉列表,選擇剛才創(chuàng)建的 SSH 配置
完成以上操作后點(diǎn)擊應(yīng)用,再點(diǎn)擊確定

5. 創(chuàng)建簡(jiǎn)單的SpringBoot應(yīng)用程序
我們創(chuàng)建一個(gè)簡(jiǎn)單的 SpringBoot 應(yīng)用程序,編寫一個(gè)簡(jiǎn)單的接口,在 11020 端口上啟動(dòng)項(xiàng)目

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloWorldController {
@GetMapping("/")
public String index() {
return "<h1>Hello, world</h1>";
}
}
6. 編寫Dockerfile文件
接著需要編寫一個(gè)用于定義和構(gòu)建 Docker 鏡像的文本文件,文件名為 Dockerfile,Dockerfile 中的配置可根據(jù)自身項(xiàng)目情況進(jìn)行調(diào)整
one-click-deployment # 基礎(chǔ)鏡像 FROM openjdk:17 # 復(fù)制jar包至鏡像內(nèi) # 復(fù)制的目錄需放置在與 Dockerfile 文件同級(jí)的目錄下 ADD target/one-click-deployment-0.0.1-SNAPSHOT.jar /one-click-deployment-0.0.1-SNAPSHOT.jar # 容器啟動(dòng)執(zhí)行命令 ENTRYPOINT ["java", "-jar", "/one-click-deployment-0.0.1-SNAPSHOT.jar", "--spring.profiles.active=prod"] # 對(duì)外暴露的端口號(hào) EXPOSE 11020
jar 包的名稱需要與 pom.xml 文件中的配置保持一致

也可以在 Maven 管理界面執(zhí)行 package 操作后直接復(fù)制 jar 包的名稱


復(fù)制本地的 jar 包至鏡像內(nèi),jar 包所在的目錄需放置在與 Dockerfile 文件同級(jí)的目錄下

至此準(zhǔn)備工作已經(jīng)全部完成,接下來即可正式開始配置遠(yuǎn)程一鍵部署
7. 配置遠(yuǎn)程部署
首次配置可能比較繁瑣,但后續(xù)部署項(xiàng)目是真的方便,趕緊動(dòng)手試一下吧
7.1 創(chuàng)建配置

點(diǎn)擊 +,選擇 Dockerfile

勾選存儲(chǔ)為項(xiàng)目文件,這樣 IDEA 重啟后改配置也會(huì)繼續(xù)保存
自定義名稱
服務(wù)器選擇我們剛才連接的 Docker 守護(hù)進(jìn)程(如果沒有自動(dòng)識(shí)別,可以點(diǎn)擊后面的三個(gè)小點(diǎn)自行配置)
選擇我們剛才編寫的 Dockerfile 文件
自定義鏡像標(biāo)記
自定義容器名稱
one-click-deployment:1.0.0

7.2 綁定端口


根據(jù)實(shí)際情況填寫端口

7.3 添加執(zhí)行前要運(yùn)行的任務(wù)

選擇運(yùn)行 Maven 目標(biāo)

添加 clean 和 package 操作


最后點(diǎn)擊應(yīng)用和確定

至此,所有配置都已完成
8. 部署項(xiàng)目
點(diǎn)擊綠色小三角即可自動(dòng)完成項(xiàng)目部署(如果項(xiàng)目需要重新部署,再次點(diǎn)擊綠色小三角即可)

成功部署之后,就能夠很方便地在 IDEA 的控制臺(tái)看到項(xiàng)目的運(yùn)行日志了

9. 開放防火墻的 11020 端口
- 如果你使用的是云服務(wù)器,在安全組中放行 11020 端口
- 如果你安裝了寶塔,除了在安全組中放行 11020 端口,還要在寶塔中放行 11020 端口
完成以上兩個(gè)操作后,輸入以下指令開放 11020 端口
Ubuntu
sudo ufw allow 11020 sudo ufw reload
CentOS
sudo firewall-cmd --zone=public --add-port=11020 /tcp --permanent sudo firewall-cmd --reload
10. 訪問項(xiàng)目
在瀏覽器輸入以下網(wǎng)址,訪問項(xiàng)目(將 ip 地址更改為你的服務(wù)器的地址)
http://127.0.0.1:11020/
訪問成功后的界面

11. 可能遇到的問題
11.1 Cannot connect to the Docker daemon. Is the docker daemon running
如果你點(diǎn)擊小三角后部署失敗,并且 IDEA 給出了以下提示,可能是因?yàn)?SSH 配置中的用戶并沒有連接 Docker 的權(quán)限
Cannot connect to the Docker daemon. Is the docker daemon running

解決方法:將 SSH 配置中的用戶添加到 docker 用戶組
sudo usermod -aG docker $USER

運(yùn)行以下指令,確保SSH 配置中的用戶已經(jīng)成功添加到 docker 用戶組
getent group docker

注意:添加用戶到 docker 用戶組后需要重啟 IDEA
成功連接 Docker 后的界面

11.2 no main manifest attribute, in /one-click-deployment-0.0.1-SNAPSHOT.jar

錯(cuò)誤信息 “no main manifest attribute, in /one-click-deployment-0.0.1-SNAPSHOT.jar” 表明 JAR 文件中沒有指定主類(即程序的入口點(diǎn))
之所以產(chǎn)生這種情況,有可能是因?yàn)轫?xiàng)目的 pom.xml 文件沒有指定主類,也有可能是因?yàn)?SpringBoot 打包插件沒生效
解決方法:修改項(xiàng)目的 pom.xml 文件,同時(shí)確保 SpringBoot 打包插件生效了(skip 屬性默認(rèn)為 false,表示啟用打包插件)

總結(jié)
到此這篇關(guān)于如何用IDEA+Docker一鍵部署SpringBoot項(xiàng)目的文章就介紹到這了,更多相關(guān)IDEA Docker一鍵部署SpringBoot內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java實(shí)現(xiàn)用Mysql存取圖片操作實(shí)例
這篇文章主要介紹了Java實(shí)現(xiàn)用Mysql存取圖片操作實(shí)例,本文講解了使用BLOB類型保存和讀取圖片的代碼實(shí)例,需要的朋友可以參考下2015-06-06
地址到經(jīng)緯度坐標(biāo)轉(zhuǎn)化的JAVA代碼
這篇文章介紹了地址到經(jīng)緯度坐標(biāo)轉(zhuǎn)化的JAVA代碼,有需要的朋友可以參考一下2013-09-09
mybatisplus下劃線駝峰轉(zhuǎn)換的問題解決
在mybatis-plus中,下劃線-駝峰自動(dòng)轉(zhuǎn)換可能導(dǎo)致帶下劃線的字段查詢結(jié)果為null,本文就來介紹一下mybatisplus下劃線駝峰轉(zhuǎn)換的問題解決,感興趣的可以了解一下2024-10-10
淺談Java成員變量與屬性的區(qū)別(簡(jiǎn)單最易懂的解釋)
下面小編就為大家?guī)硪黄獪\談Java成員變量與屬性的區(qū)別(簡(jiǎn)單最易懂的解釋)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-05-05
使用@Value為靜態(tài)變量導(dǎo)入并使用導(dǎo)入的靜態(tài)變量進(jìn)行初始化方式
這篇文章主要介紹了使用@Value為靜態(tài)變量導(dǎo)入并使用導(dǎo)入的靜態(tài)變量進(jìn)行初始化方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-02-02
Java中ConcurrentHashMap是如何實(shí)現(xiàn)線程安全
ConcurrentHashMap是一個(gè)哈希表,支持檢索的全并發(fā)和更新的高預(yù)期并發(fā)。本文主要介紹了Java中ConcurrentHashMap是如何實(shí)現(xiàn)線程安全,感興趣的可以了解一下2021-11-11
java實(shí)現(xiàn)圖片轉(zhuǎn)ascii字符畫的方法示例
這篇文章主要介紹了java實(shí)現(xiàn)圖片轉(zhuǎn)ascii字符畫的方法示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-08-08

