基于SpringBoot項目實現(xiàn)Docker容器化部署的主要步驟
將Spring Boot項目部署到Docker容器中的涉及幾個主要步驟:
準備Docker鏡像
- 首先,需要選擇一個基礎鏡像,通常是包含Java運行時環(huán)境的鏡像,例如OpenJDK。可以從Docker Hub或其他鏡像倉庫中獲取這些鏡像。
- 接下來,需要在基礎鏡像上構(gòu)建一個包含Spring Boot應用程序的鏡像。這包括將應用程序的JAR文件、依賴項和配置文件添加到鏡像中。
編寫Dockerfile
- Dockerfile是一個文本文件,其中包含了構(gòu)建Docker鏡像的指令。需要編寫一個Dockerfile來指定如何構(gòu)建包含Spring Boot應用程序的鏡像。
- 在Dockerfile中,可以使用COPY指令將本地文件(包括Spring Boot應用程序的JAR文件和配置文件)復制到鏡像中。
- 使用RUN指令可以在容器內(nèi)運行命令,例如安裝依賴項或執(zhí)行應用程序的構(gòu)建。
- 使用CMD或ENTRYPOINT指令指定在容器啟動時要運行的命令,通常是啟動Spring Boot應用程序的命令。
構(gòu)建Docker鏡像
- 使用docker build命令根據(jù)Dockerfile構(gòu)建Docker鏡像。例如:docker build -t my-spring-boot-app .,其中-t選項用于指定鏡像的名稱和標簽。
運行Docker容器
- 使用docker run命令運行你的Docker鏡像。例如:docker run -p 8080:8080 my-spring-boot-app,其中-p選項用于將主機的端口映射到容器的端口,以便外部可以訪問應用程序。
- 還可以使用其他選項來配置容器,例如掛載卷、設置環(huán)境變量等。
訪問應用程序
- 一旦容器運行,可以通過訪問主機的端口(在上述示例中是8080)來訪問運行在Docker容器中的Spring Boot應用程序。
Docker容器化部署Spring Boot項目的原理涉及將應用程序及其依賴項打包到一個Docker鏡像中,然后在容器內(nèi)運行該鏡像。這使得應用程序在不同環(huán)境中更加可移植和隔離,同時也方便了部署和擴展。使用Docker可以大大簡化應用程序的部署流程,并提供了更好的資源管理和隔離,以及更高的可伸縮性。
閑言少敘,上科技?。?!
方式一:直接構(gòu)建jar包運行的鏡像
- 將打包好程序,上傳到服務器的指定目錄
- 例如:/home/www/spring-boot-image/spring-boot-docker-1.0.jar
- 在該目錄下創(chuàng)建Dockerfile文件
FROM openjdk:8u312 MAINTAINER zhangt ADD spring-boot-docker-1.0.jar zhangt.jar EXPOSE 8520 ENTRYPOINT ["java","-jar","zhangt.jar"]
Dockerfile的內(nèi)容解釋:
FROM openjdk:8u312
這一行指定了基礎鏡像,從openjdk:8u312
鏡像構(gòu)建。它使用了OpenJDK 8的版本號為312的鏡像作為基礎。這是一個包含Java運行時環(huán)境的基礎鏡像。MAINTAINER zhangt
這一行設置了維護者信息,盡管在較新版本的Docker中,MAINTAINER
已不再建議使用,而可以使用LABEL
來添加類似的元數(shù)據(jù)信息。ADD spring-boot-docker-1.0.jar zhangt.jar
這一行使用ADD
指令將本地的spring-boot-docker-1.0.jar
文件復制到鏡像中,并重命名為zhangt.jar
。這個JAR文件包含了Spring Boot應用程序的可執(zhí)行代碼。EXPOSE 8520
這一行使用EXPOSE
指令聲明容器將監(jiān)聽的端口號,這里指定為8520。請注意,這只是一個元數(shù)據(jù)聲明,它不會自動將端口映射到主機上。ENTRYPOINT ["java","-jar","zhangt.jar"]
這一行設置了容器啟動時要執(zhí)行的命令。在這種情況下,容器將以java -jar zhangt.jar
命令啟動,這會運行Spring Boot應用程序。java
命令會啟動Java虛擬機(JVM),并執(zhí)行zhangt.jar
中的可執(zhí)行代碼。
這Dockerfile的作用是基于OpenJDK 8u312鏡像構(gòu)建一個包含Spring Boot應用程序的Docker鏡像。一旦構(gòu)建完成,可以使用這個鏡像來運行Spring Boot應用程序的容器,容器將監(jiān)聽8520端口,可以通過適當?shù)亩丝谟成鋪碜屚獠吭L問應用程序。
創(chuàng)建好Dockerfile文件之后,執(zhí)行命構(gòu)建鏡像
docker build -t zhangt .
注意最后的 .
表示Dockerfile在當前文件目錄下。zhangt表示構(gòu)建的鏡像,構(gòu)建成功后可以使用**docker images
**命令查看鏡像。-t
選項用于指定鏡像的名稱和標簽,你可以將 zhangt
替換為你想要的名稱和標簽。
鏡像構(gòu)建成功之后,就可以運行容器
docker run -d --restart=always --name zhangt -p 8520:8520 zhangt
各個參數(shù)的含義:
docker run
: 用于啟動 Docker 容器的命令。-d
: 這是一個選項,表示在后臺(守護進程模式)運行容器。容器將在后臺運行,不會占據(jù)終端。--restart=always
: 這是另一個選項,表示容器在退出時總是重新啟動。即使容器因為錯誤或其他原因而停止,Docker 也會嘗試自動重新啟動容器。--name zhangt
: 這是用于給容器指定一個名稱的選項。容器的名稱被設置為 “zhangt”。-p 8520:8520
: 這是用于將主機端口與容器端口進行映射的選項。這個選項將主機的 8520 端口映射到容器的 8520 端口。這樣,外部可以通過訪問主機的 8520 端口來訪問容器內(nèi)運行的應用程序。zhangt
: 這是容器的名稱或鏡像名稱,表示要運行的容器是基于名為 “zhangt” 的 Docker 鏡像創(chuàng)建的。如果 “zhangt” 是一個鏡像名稱,Docker 將查找該鏡像并在容器中運行它。
這個命令的目的是在后臺運行一個 Docker 容器,該容器使用 “zhangt” 鏡像創(chuàng)建,并將主機的 8520 端口映射到容器的 8520 端口。容器的名稱設置為 “zhangt-p”,并且如果容器在任何情況下退出,Docker 會自動重新啟動它。這通常用于部署應用程序,以確保應用程序在意外情況下能夠自動恢復。
啟動容器后可以使用 **docker ps
**命令查看啟動的容器docker logs -f --tail 1000 容器id
,可以查看服務的日志。
如果想更新jar包,只需要使用docker cp spring-boot-docker-1.0.jar 容器ID:/zhangt.jar
,就可以將spring-boot-docker-1.0.jar拷貝進容器并重命名,然后docker restart 容器ID
重啟容器。
方式二:基于jdk鏡像運行容器 在服務器中來取jdk鏡像
docker pull openjdk:8u181
創(chuàng)建目錄,并將jar包上傳到該目錄
cd /home/ mkdir www/spring-boot-docker
在Jar放置的同級目錄,編寫shell腳本命名為:start.sh
#!/bin/bash echo -e "\n################ build service start #########################" # delete docker container echo -e "\n1, delete docker container [developer-platform-basic-dev] start ......" sudo docker rm -f spring-boot-docker-1.0 # docker run # docker run developer-platform-basic-1.0.0 echo -e "\n2, docker run build container [spring-boot-docker-1.0] start ......" sudo docker run --name spring-boot-docker-1.0 -d -p 8741:8741 \ -v /home/www/spring-boot-docker:/jar openjdk:8u181 \ java -jar /jar/spring-boot-docker-1.0.jar --spring.profiles.active=dev echo -e "\n3, docker ps container [spring-boot-docker-1.0] start ...." sudo docker ps -a | grep spring-boot-docker-1.0 echo -e "\n4, docker logs container [spring-boot-docker-1.0] start ...." sudo docker logs -f -t spring-boot-docker-1.0 > ./logs/log_$(date +%Y%m%d).out 2>&1 & echo -e "\n################ build service end #########################"
核心腳本解釋:
1.sudo docker run
這是用于在Docker中運行容器的命令。通常需要使用sudo權(quán)限來執(zhí)行Docker命令,以確保具有足夠的權(quán)限來管理容器。
2.--name spring-boot-docker-1.0
: 這是為Docker容器指定的名稱,容器的名稱被設置為"spring-boot-docker-1.0"。
3.-d
: 這是一個選項,表示在后臺運行容器(即以守護進程模式運行),而不是在前臺交互模式下運行。
4.-p 8741:8741
: 這個選項用于將主機的端口與容器的端口進行映射。具體來說,將主機的8741端口映射到容器的8741端口,這樣外部可以通過主機的8741端口訪問容器中的應用程序。
5.-v /home/www/spring-boot-docker:/jar
: 這個選項用于將主機的文件系統(tǒng)目錄與容器內(nèi)的目錄進行掛載。在這種情況下,將主機上的/home/www/spring-boot-docker目錄掛載到容器內(nèi)的/jar目錄。這通常用于將應用程序的代碼和資源文件從主機復制到容器中,以便在容器內(nèi)運行應用程序。
6.openjdk:8u181
: 這是要在容器中使用的Docker鏡像的名稱和標簽。在這里,使用的是一個基于OpenJDK 8u181的Java鏡像,該鏡像包含了Java運行時環(huán)境。
7.java -jar /jar/spring-boot-docker-1.0.jar --spring.profiles.active=dev
: 這是在容器內(nèi)運行的命令。它啟動了Java虛擬機(JVM),并在JVM內(nèi)運行了一個Spring Boot應用程序。具體來說,它運行了/jar/spring-boot-docker-1.0.jar這個JAR文件,并通過–spring.profiles.active=dev指定了一個Spring配置文件的激活配置。
這個腳本的作用是創(chuàng)建一個名為"spring-boot-docker-1.0"的Docker容器,該容器運行一個基于Spring Boot的Java應用程序,該應用程序監(jiān)聽8741端口,并將主機上的/home/www/spring-boot-docker目錄掛載到容器內(nèi)的/jar目錄,以供應用程序使用。這樣,可以通過主機的8741端口訪問運行在容器中的Spring Boot應用程序。
運行腳本 sh start.sh
以后發(fā)布,只需要把宿主機目錄里的jar包替換掉,重啟容器。
到此這篇關(guān)于基于SpringBoot項目實現(xiàn)Docker容器化部署的文章就介紹到這了,更多相關(guān)SpringBoot Docker容器化部署內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MySQL 新增字段但 Java 實體未更新存在潛在問題與解決方案
在 Java + MySQL 的開發(fā)中,我們通常使用 ORM 框架(如 MyBatis、MyBatis-Plus、Hibernate)來映射數(shù)據(jù)庫表與 Java 對象,這篇文章主要介紹了MySQL 新增字段但 Java 實體未更新:潛在問題與解決方案,需要的朋友可以參考下2025-04-04Spring MVC使用jstl 標簽c:forEach 遍歷輸出雙層嵌套List的數(shù)據(jù)方式
這篇文章主要介紹了Spring MVC使用jstl 標簽c:forEach 遍歷輸出雙層嵌套List的數(shù)據(jù)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-08-08教你用java完美封裝微信模板消息的發(fā)送動態(tài)
這篇文章主要介紹了教你用java完美封裝微信模板消息的發(fā)送動態(tài),文中有非常詳細的代碼示例,對正在學習java的小伙伴們有很好的幫助,需要的朋友可以參考下2021-04-04java 過濾器模式(Filter/Criteria Pattern)詳細介紹
這篇文章主要介紹了java 過濾器模式(Filter/Criteria Pattern)詳細介紹的相關(guān)資料,需要的朋友可以參考下2016-10-10阿里資深技術(shù)專家:在各階段中3年經(jīng)驗的java程序員應該具備哪些技術(shù)能力
這篇文章主要介紹了阿里資深技術(shù)專家:在各階段中3年經(jīng)驗的java程序員應該具備哪些技術(shù)能力,本文給大家列舉了一些內(nèi)容,大家可以根據(jù)自己需要有方法的掌握,感興趣的朋友跟隨小編一起看看吧2020-07-07Java 中 String,StringBuffer 和 StringBuilder 的區(qū)別及用法
這篇文章主要介紹了Java 中 String,StringBuffer 和 StringBuilder 的區(qū)別及用法的相關(guān)資料,需要的朋友可以參考下2017-03-03