docker實現(xiàn)部署jar包項目教程(包括單個和多個一起部署)
建議學習本博客之前,需要對docke的基本命令有過學習;
前言
該方式適用于jar包較少時,項目復雜度不高時使用,如果部署的比較多的話還是建議使用docker的編碼工具Docker Compose或者k8s進行統(tǒng)一部署
1、項目打包
如果項目配置文件中有配置文件的ip地址是localhost
的需要改為時間的IP地址
先把項目打成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
運行一下jar包,先在本地確??梢哉_\行先。
2、編寫Dockerfile文件
2.1、單個jar部署
Dockerfile文件常用命令
命令 | 描述 |
---|---|
FROM | 指定基礎鏡像,用于構(gòu)建新的鏡像。 |
COPY | 將文件從宿主機復制到容器中。 |
ADD | 類似于COPY,但支持遠程文件和自動解壓縮。 |
RUN | 在鏡像中運行命令,用于安裝軟件包和執(zhí)行其他構(gòu)建任務。 |
CMD | 定義容器啟動時要執(zhí)行的命令,只能有一個CMD命令,如果有多個,只有最后一個會生效。 |
ENTRYPOINT | 定義容器啟動時要執(zhí)行的命令,與CMD不同的是,ENTRYPOINT的參數(shù)不會被覆蓋。 |
ENV | 設置環(huán)境變量,用于配置容器的運行環(huán)境。 |
WORKDIR | 設置容器內(nèi)的工作目錄,后續(xù)命令將在該目錄下執(zhí)行。 |
EXPOSE | 聲明容器在運行時監(jiān)聽的端口,但并不映射端口到主機。 |
VOLUME | 創(chuàng)建一個掛載點,用于持久化數(shù)據(jù)。 |
2.2.1、編寫一個Dockerfile 文件格式制作鏡像
# 使用一個基礎的 Java 鏡像(根據(jù)自己項目中使用的是什么jdk版本設置,用于拉取執(zhí)行jar包的jdk環(huán)境) FROM openjdk:8-jdk-alpine # 指定工作目錄 VOLUME /tmp # 復制應用程序的 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 對應著jar包的名字:版本(可以自己定) Dockerfile文件的路徑,點是代表當前文件夾
docker build -t service-gateway:1.0.0 .
查看docker里面的鏡像 :
docker images
創(chuàng)建容器
docker run -d --name servier-gateway -p 8200:8200 a0e2430dd36f -t
查看容器是否啟動成功
啟動成功之后,可以訪問對應的端口進行查看驗證
2.2、多個jar一起部署到docker
如果是有多個服務需要部署,則可以統(tǒng)一寫在一個Dockerfile
文件里,可以減少麻煩
格式如下:通過創(chuàng)建一個啟動腳步(start.sh
),在其中啟動多個jar包;然后在 Dockerfile 中使用 CMD
指令來運行這個啟動腳本。
2.2.1、編寫start.sh啟動文件
這種啟動腳本的好處是它允許你在同一個容器中同時啟動多個應用程序,這對于某些復雜的應用程序架構(gòu)可能很有用。每個應用程序在后臺運行,容器保持活躍,直到你手動停止容器。
java -jar service-sys.jar &
:命令表示以 Java 命令運行service-sys.jar
文件,&
符號表示在后臺運行,以便同時啟動多個應用程序。tail -f /dev/null
:用于防止容器在應用程序啟動后立即退出,tail -f /dev/null
命令會持續(xù)監(jiān)視/dev/null
文件(一個空文件);這是因為容器在主進程退出時會停止,但在這種情況下,tail
命令會一直運行,使容器保持活躍。
#!/bin/sh # 啟動多個JAR包,每個JAR包后臺運行 java -jar service-activity.jar & java -jar service-product.jar & java -jar service-sys.jar & java -jar service-user.jar & # 保持容器運行 tail -f /dev/null
2.2.2、編寫Dockerfile文件
# 使用一個基礎的 Java 鏡像 FROM openjdk:8-jdk-alpine # 指定工作目錄 WORKDIR /tmp # 復制應用程序的 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)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Linux上使用docker啟動redis并遠程訪問的實現(xiàn)
這篇文章主要介紹了Linux上使用docker啟動redis并遠程訪問的實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-04-04docker安裝,yum安裝失敗解決方案,阿里云鏡像安裝過程
在配置Yum源遇到問題時,嘗試使用阿里云鏡像可以有效解決,本文詳細介紹了如何配置阿里云源及安裝Docker的步驟,首先,若Yum源配置出錯,建議更換為阿里云鏡像;其次,詳述了安裝Docker的具體命令,包括啟用阿里云源和安裝過程中的選擇提示2024-11-11Docker部署MySQL8集群(一主二從)的實現(xiàn)步驟
本文主要介紹了Docker部署MySQL8集群,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-07-07