基于SpringBoot的Docker部署實(shí)踐
基于SpringBoot的Docker部署實(shí)踐
一、Spring Boot項(xiàng)目創(chuàng)建
在開始學(xué)習(xí)如何將Spring Boot項(xiàng)目部署到Docker之前,我們首先需要?jiǎng)?chuàng)建一個(gè)簡(jiǎn)單的Spring Boot項(xiàng)目。這里我們以一個(gè)簡(jiǎn)單的RESTful API項(xiàng)目為例。
1.1 項(xiàng)目初始化
訪問Spring Initializr,選擇你喜歡的構(gòu)建工具(Maven或Gradle)、打包方式(Jar或War)、Java版本等配置信息,然后在依賴項(xiàng)中選擇Web
,點(diǎn)擊“Generate”生成項(xiàng)目模板并下載。
1.2 項(xiàng)目導(dǎo)入與運(yùn)行
將下載的項(xiàng)目模板解壓后,使用IDE(如IntelliJ IDEA或Eclipse)導(dǎo)入項(xiàng)目。項(xiàng)目導(dǎo)入成功后,運(yùn)行項(xiàng)目的主類文件(含@SpringBootApplication
注解的類),訪問http://localhost:8080
,如果能看到Spring Boot的歡迎頁面,說明項(xiàng)目運(yùn)行成功。
1.3 編寫RESTful API
在項(xiàng)目中添加一個(gè)簡(jiǎn)單的RESTful API,以便我們?cè)诤罄m(xù)部署到Docker時(shí)進(jìn)行測(cè)試。在項(xiàng)目的主類所在的包中,新建一個(gè)名為HelloController
的類,內(nèi)容如下:
package com.example.demo; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class HelloController { @GetMapping("/hello") public String hello() { return "Hello, Docker!"; } }
重新運(yùn)行項(xiàng)目,訪問http://localhost:8080/hello
,如果能看到“Hello, Docker!”的輸出,說明RESTful API已經(jīng)運(yùn)行成功。
二、Docker基本概念
在將Spring Boot項(xiàng)目部署到Docker之前,我們需要了解一些Docker的基本概念。Docker是一個(gè)開源的容器平臺(tái),它能夠?qū)?yīng)用及其依賴打包到一個(gè)輕量級(jí)、可移植的容器中,從而實(shí)現(xiàn)跨平臺(tái)、跨環(huán)境的應(yīng)用部署。Docker的核心概念包括鏡像(Image)、容器(Container)和倉(cāng)庫(kù)(Registry)。
2.1 鏡像(Image)
鏡像是Docker的基本概念之一,可以簡(jiǎn)單地理解為應(yīng)用的“靜態(tài)”表示。鏡像包含了運(yùn)行應(yīng)用所需的所有文件、代碼、配置和依賴,它可以被用來創(chuàng)建容器。鏡像是分層的,每一層都是只讀的。這種分層結(jié)構(gòu)使得鏡像構(gòu)建和分發(fā)變得高效且節(jié)省存儲(chǔ)空間。
2.2 容器(Container)
容器是Docker的另一個(gè)核心概念,它是鏡像的“動(dòng)態(tài)”表示。容器是鏡像的一個(gè)運(yùn)行實(shí)例,它包括一個(gè)可寫層和一個(gè)或多個(gè)只讀層(即鏡像層)。容器能夠?qū)崿F(xiàn)應(yīng)用的隔離、沙盒化執(zhí)行,從而保證應(yīng)用在不同環(huán)境中的一致性。
2.3 倉(cāng)庫(kù)(Registry)
倉(cāng)庫(kù)是用于存儲(chǔ)和分發(fā)鏡像的服務(wù)。Docker官方提供了一個(gè)公共的倉(cāng)庫(kù)Docker Hub ↗,用戶可以在其中搜索、拉取和推送鏡像。此外,用戶還可以搭建私有倉(cāng)庫(kù),用于存儲(chǔ)和分發(fā)內(nèi)部項(xiàng)目的鏡像。
三、編寫Dockerfile
在將Spring Boot項(xiàng)目部署到Docker之前,我們需要編寫一個(gè)Dockerfile。Dockerfile是一個(gè)文本文件,用于描述鏡像的構(gòu)建過程。Dockerfile中包含了一系列指令,每個(gè)指令對(duì)應(yīng)一個(gè)鏡像層。通過編寫Dockerfile,我們可以定制應(yīng)用的鏡像。
3.1 創(chuàng)建Dockerfile
在Spring Boot項(xiàng)目的根目錄下,新建一個(gè)名為Dockerfile
的文件(注意,文件名沒有后綴)。打開Dockerfile,編寫以下內(nèi)容:
# 基礎(chǔ)鏡像 FROM openjdk:8-jdk-alpine # 作者信息 LABEL maintainer="your_name <your_email@example.com>" # 設(shè)置工作目錄 WORKDIR /app # 將項(xiàng)目構(gòu)建輸出的jar文件復(fù)制到鏡像中 COPY target/*.jar app.jar # 設(shè)置容器啟動(dòng)時(shí)執(zhí)行的命令 ENTRYPOINT ["java", "-jar", "app.jar"] # 暴露端口 EXPOSE 8080
上述Dockerfile的主要內(nèi)容如下:
FROM
指令:指定基礎(chǔ)鏡像。這里我們選擇了一個(gè)包含Java 8 JDK的輕量級(jí)Alpine鏡像。LABEL
指令:設(shè)置鏡像的元數(shù)據(jù),如作者信息等。WORKDIR
指令:設(shè)置鏡像的工作目錄。這里我們將工作目錄設(shè)置為/app
。COPY
指令:將項(xiàng)目構(gòu)建輸出的jar文件復(fù)制到鏡像中。這里我們將target
目錄下的jar文件復(fù)制到工作目錄,并重命名為app.jar
。ENTRYPOINT
指令:設(shè)置容器啟動(dòng)時(shí)執(zhí)行的命令。這里我們使用java -jar app.jar
命令啟動(dòng)Spring Boot應(yīng)用。EXPOSE
指令:暴露容器的端口。這里我們將暴露8080端口,以便訪問Spring Boot應(yīng)用。
3.2 構(gòu)建鏡像
在項(xiàng)目根目錄下,打開終端,運(yùn)行以下命令構(gòu)建鏡像:
docker build -t your_repo/springboot-docker:latest .
其中,-t
參數(shù)用于指定鏡像的名稱和標(biāo)簽,your_repo
是你的Docker倉(cāng)庫(kù)名,springboot-docker
是鏡像名,latest
是標(biāo)簽。.
表示Dockerfile所在的上下文目錄為當(dāng)前目錄。
構(gòu)建成功后,運(yùn)行docker images
命令,可以看到新構(gòu)建的鏡像已經(jīng)添加到本地鏡像列表中。
四、運(yùn)行與管理容器
在構(gòu)建好鏡像后,我們可以使用docker run
命令創(chuàng)建并啟動(dòng)一個(gè)新的容器。運(yùn)行以下命令:
docker run -d -p 8080:8080 --name springboot-docker your_repo/springboot-docker:latest
其中:
-d
參數(shù):以后臺(tái)模式運(yùn)行容器。-p
參數(shù):將容器的端口映射到宿主機(jī)的端口。這里我們將容器的8080端口映射到宿主機(jī)的8080端口。--name
參數(shù):給容器指定一個(gè)名稱。這里我們將容器命名為springboot-docker
。
運(yùn)行成功后,訪問http://localhost:8080/hello
,如果能看到“Hello, Docker!”的輸出,說明容器已經(jīng)成功運(yùn)行。
使用docker ps
命令,可以查看當(dāng)前正在運(yùn)行的容器列表。使用docker logs
命令,可以查看容器的日志輸出。使用docker stop
和docker start
命令,可以停止和啟動(dòng)容
以上就是基于SpringBoot的Docker部署實(shí)踐的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot Docker部署的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
深入解析Java的Hibernate框架中的持久對(duì)象
Hibernate的持久對(duì)象在數(shù)據(jù)庫(kù)數(shù)據(jù)操作中有著重要作用,這里我們就來深入解析Java的Hibernate框架中的持久對(duì)象,首先必須從理解持久化對(duì)象的生命周期開始:2016-07-07Java復(fù)制一個(gè)對(duì)象并且不想復(fù)制其中的空值屬性問題
這篇文章主要介紹了Java復(fù)制一個(gè)對(duì)象并且不想復(fù)制其中的空值屬性問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08利用 filter 機(jī)制給靜態(tài)資源 url 加上時(shí)間戳,來防止js和css文件的緩存問題
這篇文章主要介紹了利用 filter 機(jī)制給靜態(tài)資源 url 加上時(shí)間戳,來防止js和css文件的緩存問題的相關(guān)資料,需要的朋友可以參考下2016-05-05Springboot讀取外部配置文件,項(xiàng)目部署時(shí)配置讀取不到問題及解決
這篇文章主要介紹了Springboot讀取外部配置文件,項(xiàng)目部署時(shí)配置讀取不到問題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-06-06java中JsonObject與JsonArray轉(zhuǎn)換方法實(shí)例
在項(xiàng)目日常開發(fā)中常常會(huì)遇到JSONArray和JSONObject的轉(zhuǎn)換,很多公司剛?cè)肼毜男∶刃聲?huì)卡在這里,下面這篇文章主要給大家介紹了關(guān)于java中JsonObject與JsonArray轉(zhuǎn)換方法的相關(guān)資料,需要的朋友可以參考下2023-04-04Spring Cloud Alibaba Nacos 入門詳解
這篇文章主要介紹了Spring Cloud Alibaba Nacos入門詳解,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-03-03Spring boot 配置多個(gè)redis的方法示例
這篇文章主要介紹了Spring boot 配置多個(gè)redis的方法示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-09-09