docker實(shí)現(xiàn)部署jar包項(xiàng)目教程(包括單個和多個一起部署)
建議學(xué)習(xí)本博客之前,需要對docke的基本命令有過學(xué)習(xí);
前言
該方式適用于jar包較少時,項(xiàng)目復(fù)雜度不高時使用,如果部署的比較多的話還是建議使用docker的編碼工具Docker Compose或者k8s進(jìn)行統(tǒng)一部署
1、項(xiàng)目打包
如果項(xiàng)目配置文件中有配置文件的ip地址是localhost的需要改為時間的IP地址
先把項(xiàng)目打成jar包,注意配置spring boot的maven打包
<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<!-- Maven Compiler Plugin -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<!-- 在此處添加任何其他 Maven 編譯插件的配置,如果需要的話 -->
</plugin>
</plugins>
</build>
避免在jar執(zhí)行時出現(xiàn)如:servier-gateway-1.0.jar中沒有主清單屬性、找不到或無法加載主類等錯誤,打包完成后可以先在本地執(zhí)行 java -jar xxx.jar 運(yùn)行一下jar包,先在本地確??梢哉_\(yùn)行先。
2、編寫Dockerfile文件
2.1、單個jar部署
Dockerfile文件常用命令
| 命令 | 描述 |
|---|---|
| FROM | 指定基礎(chǔ)鏡像,用于構(gòu)建新的鏡像。 |
| COPY | 將文件從宿主機(jī)復(fù)制到容器中。 |
| ADD | 類似于COPY,但支持遠(yuǎn)程文件和自動解壓縮。 |
| RUN | 在鏡像中運(yùn)行命令,用于安裝軟件包和執(zhí)行其他構(gòu)建任務(wù)。 |
| CMD | 定義容器啟動時要執(zhí)行的命令,只能有一個CMD命令,如果有多個,只有最后一個會生效。 |
| ENTRYPOINT | 定義容器啟動時要執(zhí)行的命令,與CMD不同的是,ENTRYPOINT的參數(shù)不會被覆蓋。 |
| ENV | 設(shè)置環(huán)境變量,用于配置容器的運(yùn)行環(huán)境。 |
| WORKDIR | 設(shè)置容器內(nèi)的工作目錄,后續(xù)命令將在該目錄下執(zhí)行。 |
| EXPOSE | 聲明容器在運(yùn)行時監(jiān)聽的端口,但并不映射端口到主機(jī)。 |
| VOLUME | 創(chuàng)建一個掛載點(diǎn),用于持久化數(shù)據(jù)。 |
2.2.1、編寫一個Dockerfile 文件格式制作鏡像
# 使用一個基礎(chǔ)的 Java 鏡像(根據(jù)自己項(xiàng)目中使用的是什么jdk版本設(shè)置,用于拉取執(zhí)行jar包的jdk環(huán)境) FROM openjdk:8-jdk-alpine # 指定工作目錄 VOLUME /tmp # 復(fù)制應(yīng)用程序的 JAR 文件到鏡像中(需要是相對路徑) ADD ./servier-gateway/target/servier-gateway.jar servier-gateway.jar # 定義容器啟動時執(zhí)行的命令 ENTRYPOINT ["java","-jar","servier-gateway.jar","&"]
2.1.2、執(zhí)行docker命令
拉取生成鏡像
docker build -t 對應(yīng)著jar包的名字:版本(可以自己定) Dockerfile文件的路徑,點(diǎn)是代表當(dāng)前文件夾
docker build -t service-gateway:1.0.0 .

查看docker里面的鏡像 :
docker images

創(chuàng)建容器
docker run -d --name servier-gateway -p 8200:8200 a0e2430dd36f -t

查看容器是否啟動成功

啟動成功之后,可以訪問對應(yīng)的端口進(jìn)行查看驗(yàn)證
2.2、多個jar一起部署到docker
如果是有多個服務(wù)需要部署,則可以統(tǒng)一寫在一個Dockerfile文件里,可以減少麻煩
格式如下:通過創(chuàng)建一個啟動腳步(start.sh),在其中啟動多個jar包;然后在 Dockerfile 中使用 CMD 指令來運(yùn)行這個啟動腳本。
2.2.1、編寫start.sh啟動文件
這種啟動腳本的好處是它允許你在同一個容器中同時啟動多個應(yīng)用程序,這對于某些復(fù)雜的應(yīng)用程序架構(gòu)可能很有用。每個應(yīng)用程序在后臺運(yùn)行,容器保持活躍,直到你手動停止容器。
java -jar service-sys.jar &:命令表示以 Java 命令運(yùn)行service-sys.jar文件,&符號表示在后臺運(yùn)行,以便同時啟動多個應(yīng)用程序。tail -f /dev/null:用于防止容器在應(yīng)用程序啟動后立即退出,tail -f /dev/null命令會持續(xù)監(jiān)視/dev/null文件(一個空文件);這是因?yàn)槿萜髟谥鬟M(jìn)程退出時會停止,但在這種情況下,tail命令會一直運(yùn)行,使容器保持活躍。
#!/bin/sh # 啟動多個JAR包,每個JAR包后臺運(yùn)行 java -jar service-activity.jar & java -jar service-product.jar & java -jar service-sys.jar & java -jar service-user.jar & # 保持容器運(yùn)行 tail -f /dev/null
2.2.2、編寫Dockerfile文件
# 使用一個基礎(chǔ)的 Java 鏡像 FROM openjdk:8-jdk-alpine # 指定工作目錄 WORKDIR /tmp # 復(fù)制應(yīng)用程序的 JAR 文件到鏡像中的根路徑下 COPY ./service-activity/target/service-activity.jar service-activity.jar COPY ./service-product/target/service-product.jar service-product.jar COPY ./service-sys/target/service-sys.jar service-sys.jar COPY ./service-user/target/service-user.jar service-user.jar # 定義容器啟動時執(zhí)行的命令 COPY start.sh start.sh # 賦予啟動腳本可執(zhí)行權(quán)限 RUN chmod +x start.sh # 定義容器啟動時執(zhí)行的命令 CMD ["./start.sh"]
2.2.3、執(zhí)行docker命令
拉取下載鏡像(同上)
docker build -t my-image .

查看鏡像
docker images
創(chuàng)建容器
通過這個鏡像為每個jar包創(chuàng)建容器,可以通過這個鏡像分別為不同jar包創(chuàng)建容器
docker run -d -p 8205:8205 --name service-activity my-image java -jar service-activity.jar docker run -d -p 8203:8203 --name service-product my-image java -jar service-product.jar docker run -d -p 8202:8202 --name service-sys my-image java -jar service-sys.jar docker run -d -p 8206:8206 --name service-user my-image java -jar service-user.jar

查看容器是否啟動成功
docker ps

總結(jié)
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
如何在 Docker 中啟動 Jupyter Notebook
這篇文章主要介紹了如何在 Docker 中啟動 Jupyter Notebook,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧2025-05-05
docker-compose離線部署ollama+open-webui的實(shí)現(xiàn)步驟
本女王主要介紹了docker-compose離線部署ollama+open-webui的實(shí)現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-02-02
在vscode中使用ssh運(yùn)行docker:從下載到運(yùn)行全流程
首先在本機(jī)或者服務(wù)器上下載docker并運(yùn)行,本文目的旨在本機(jī)下載docker并打包,然后在服務(wù)器上進(jìn)行加載,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧2024-08-08
Redis快速部署為Docker容器的實(shí)現(xiàn)方法
本文主要介紹了Redis快速部署為Docker容器的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-12-12
Docker搭建Jenkins實(shí)現(xiàn)自動部署的圖文教程
本文主要介紹了Docker搭建Jenkins實(shí)現(xiàn)自動部署教程,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-05-05

