Docker 部署 Spring Boot 項(xiàng)目整合 Redis 鏡像做訪問計(jì)數(shù) Demo
第一章 - 引言
在現(xiàn)代應(yīng)用開發(fā)中,容器化技術(shù)已經(jīng)成為一種流行的解決方案。Docker作為最受歡迎的容器平臺之一,為開發(fā)人員提供了一種簡單、快速和可移植的方式來構(gòu)建、部署和管理應(yīng)用程序。本文將介紹如何使用Docker部署一個(gè)Spring Boot項(xiàng)目,并結(jié)合Redis鏡像實(shí)現(xiàn)訪問計(jì)數(shù)的功能。

第一節(jié) - 準(zhǔn)備工作
在開始之前,我們需要準(zhǔn)備以下工作:
安裝Docker:在你的開發(fā)環(huán)境中安裝Docker,確??梢哉_\(yùn)行Docker命令。
編寫Spring Boot項(xiàng)目:準(zhǔn)備一個(gè)簡單的Spring Boot項(xiàng)目,用于實(shí)現(xiàn)訪問計(jì)數(shù)的功能??梢允褂肕aven或Gradle構(gòu)建工具來創(chuàng)建項(xiàng)目。
安裝Redis客戶端:在Spring Boot項(xiàng)目中使用Redis,我們需要安裝Redis客戶端庫??梢允褂肑edis、Lettuce等客戶端庫來連接和操作Redis。
第二節(jié) - 編寫Spring Boot項(xiàng)目
步驟一:添加依賴
在Spring Boot項(xiàng)目的pom.xml(如果使用Maven)或build.gradle(如果使用Gradle)文件中,添加Redis和Spring Boot的相關(guān)依賴。
Maven的pom.xml示例:
<dependencies>
?<!-- Spring Boot Starter -->
?<dependency>
??? ?<groupId>org.springframework.boot</groupId>
??? ?<artifactId>spring-boot-starter-web</artifactId>
?</dependency>
?<!-- Redis Client -->
?<dependency>
??? ?<groupId>redis.clients</groupId>
??? ?<artifactId>jedis</artifactId>
??? ?<version>3.7.0</version>
?</dependency>
</dependencies>
Gradle的build.gradle示例:
dependencies?{
?// Spring Boot Starter
?implementation?'org.springframework.boot:spring-boot-starter-web'
?// Redis Client
?implementation?'redis.clients:jedis:3.7.0'
}
在上面的示例中,我們添加了Spring Boot Web Starter和Jedis依賴,用于構(gòu)建Web應(yīng)用和連接Redis。
步驟二:編寫訪問計(jì)數(shù)功能
在Spring Boot項(xiàng)目中,我們可以創(chuàng)建一個(gè)Controller類,并編寫一個(gè)簡單的接口來實(shí)現(xiàn)訪問計(jì)數(shù)的功能。
import?org.springframework.web.bind.annotation.GetMapping;
import?org.springframework.web.bind.annotation.RestController;
import?redis.clients.jedis.Jedis;
@RestController
public?class?CounterController?{
?private?final?Jedis?jedis?=?new?Jedis("redis",?6379);?// Redis服務(wù)器的地址和端口
?@GetMapping("/")
?public?String?home() {
??? ?// 增加訪問計(jì)數(shù)
??? ?jedis.incr("counter");
??? ?// 獲取訪問計(jì)數(shù)
??? ?String?counter?=?jedis.get("counter");
??? ?return?"訪問次數(shù):"?+?counter;
}
}
在上面的示例中,我們創(chuàng)建了一個(gè)名為CounterController的RestController類。在home()
方法中,我們使用Jedis客戶端連接到Redis服務(wù)器,并使用incr()
方法增加訪問計(jì)數(shù)。然后,我們使用get()
方法獲取訪問計(jì)數(shù),并將其返回給客戶端。
步驟三:運(yùn)行Spring Boot項(xiàng)目
通過運(yùn)行Spring Boot項(xiàng)目,我們可以在本地驗(yàn)證訪問計(jì)數(shù)功能是否正常工作。
在命令行中,導(dǎo)航到項(xiàng)目的根目錄,并運(yùn)行以下命令:
$?./mvnw spring-boot:run
或者,如果你使用Gradle構(gòu)建工具:
$?./gradlew bootRun
Spring Boot將啟動(dòng)應(yīng)用程序,并監(jiān)聽默認(rèn)的8080端口。
現(xiàn)在,我們可以在瀏覽器中訪問http://localhost:8080
,并多次刷新頁面,觀察訪問計(jì)數(shù)是否增加。
第三節(jié) - 創(chuàng)建Docker鏡像
步驟一:編寫Dockerfile
在項(xiàng)目的根目錄下創(chuàng)建一個(gè)名為Dockerfile
的文件,并添加以下內(nèi)容:
FROM?adoptopenjdk:11-jre-hotspot
WORKDIR?/app
COPY?target/demo.jar /app
CMD?["java", "-jar", "demo.jar"]
在上面的Dockerfile中,我們使用AdoptOpenJDK 11鏡像作為基礎(chǔ)鏡像。然后,將項(xiàng)目構(gòu)建生成的可執(zhí)行Jar文件(假設(shè)為demo.jar)復(fù)制到容器的/app目錄下。最后,使用CMD
指令來定義容器啟動(dòng)時(shí)執(zhí)行的命令。
步驟二:構(gòu)建Docker鏡像
在項(xiàng)目的根目錄下打開終端,運(yùn)行以下命令來構(gòu)建Docker鏡像:
$ docker?build?-t?springboot-redis-demo .
該命令將使用Dockerfile中的指令構(gòu)建一個(gè)名為springboot-redis-demo
的Docker鏡像。
第四節(jié) - 使用Docker Compose 部署應(yīng)用
步驟一:創(chuàng)建Docker Compose文件
在項(xiàng)目的根目錄下創(chuàng)建一個(gè)名為docker-compose.yml
的文件,并添加以下內(nèi)容:
version:?'3'
services:
app:
image:?springboot-redis-demo
ports:
? \- 8080:8080
depends_on:
? \- redis
redis:
image:?redis:latest
ports:
? \- 6379:6379
在上面的示例中,我們定義了兩個(gè)服務(wù):app和redis。app服務(wù)使用我們之前構(gòu)建的Spring Boot應(yīng)用鏡像,并將容器的8080端口映射到主機(jī)的8080端口。redis服務(wù)使用最新的Redis鏡像,并將容器的6379端口映射到主機(jī)的6379端口。
步驟二:啟動(dòng)應(yīng)用
在終端中,導(dǎo)航到項(xiàng)目的根目錄,并運(yùn)行以下命令來啟動(dòng)應(yīng)用:
$ docker-compose?up
Docker Compose將自動(dòng)構(gòu)建和啟動(dòng)應(yīng)用的容器。你可以在終端中看到容器的日志輸出,并且應(yīng)用將在本地的8080端口上運(yùn)行。
現(xiàn)在,你可以在瀏覽器中訪問http://localhost:8080
,并多次刷新頁面,觀察訪問計(jì)數(shù)是否增加。同時(shí),你可以通過Redis客戶端工具連接到容器中的Redis實(shí)例,檢查訪問計(jì)數(shù)的值是否在增加。
第五節(jié) - 結(jié)語
通過本文的介紹和示例,你學(xué)習(xí)了如何使用Docker部署Spring Boot項(xiàng)目并整合Redis鏡像來實(shí)現(xiàn)訪問計(jì)數(shù)的功能。首先,我們編寫了一個(gè)簡單的Spring Boot項(xiàng)目,并使用Redis客戶端庫連接和操作Redis。然后,我們創(chuàng)建了Docker鏡像,并使用Docker Compose將Spring Boot應(yīng)用和Redis容器編排在一起,實(shí)現(xiàn)了整個(gè)應(yīng)用的部署。
使用Docker和Docker Compose部署應(yīng)用可以帶來許多好處,如隔離性、可移植性和易于擴(kuò)展。通過將應(yīng)用與依賴項(xiàng)打包在一起,我們可以確保應(yīng)用在不同的環(huán)境中具有相同的行為,并且能夠輕松地進(jìn)行部署和管理。
希望通過本文的指導(dǎo),你能夠更好地理解和應(yīng)用Docker和Docker Compose,以便在實(shí)際項(xiàng)目中更高效地部署和管理應(yīng)用程序。愿你在使用Docker和容器化技術(shù)的旅程中取得更大的成功!