最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot+Docker+K8s云原生部署全流程(從零到發(fā)布)

 更新時間:2025年08月07日 16:21:13   作者:fanxbl957  
本文詳解了SpringBoot項目從開發(fā)到基于Docker容器化,再通過K8s實現(xiàn)云原生部署的全流程,涵蓋環(huán)境搭建、鏡像構(gòu)建、服務(wù)部署及CI/CD自動化,提升應(yīng)用部署效率與可維護性,需要的朋友跟隨小編一起學(xué)習(xí)吧

從零到發(fā)布:SpringBoot + Docker + K8s 云原生部署全流程

一、前言

在當(dāng)今的軟件開發(fā)領(lǐng)域,云原生技術(shù)已經(jīng)成為主流趨勢。Spring Boot 以其快速開發(fā)和便捷配置的特性,成為 Java 開發(fā)者構(gòu)建 Web 應(yīng)用的首選框架;Docker 為應(yīng)用提供了輕量級的容器化解決方案,實現(xiàn)了應(yīng)用的隔離和可移植性;Kubernetes(K8s)則是容器編排的事實標準,能夠高效地管理和調(diào)度容器化應(yīng)用。本文將詳細介紹如何將一個 Spring Boot 應(yīng)用從開發(fā)到通過 Docker 打包,最終使用 K8s 進行云原生部署的全流程。

二、環(huán)境準備

2.1 開發(fā)環(huán)境搭建

  1. Java 開發(fā)環(huán)境
    • 確保系統(tǒng)安裝了 JDK 8 或更高版本??梢詮?Oracle 官網(wǎng)或 OpenJDK 官網(wǎng)下載對應(yīng)系統(tǒng)的安裝包進行安裝。安裝完成后,配置 JAVA_HOMEPATH 等環(huán)境變量。例如,在 Linux 系統(tǒng)中,可以編輯 /etc/profile 文件添加如下內(nèi)容:
export JAVA_HOME=/path/to/your/jdk
export PATH=$JAVA_HOME/bin:$PATH
- 驗證 Java 安裝是否成功,在終端執(zhí)行 `java -version` 命令,若輸出 Java 版本信息,則說明安裝成功。
  1. Maven 或 Gradle 構(gòu)建工具
    • Maven:從 Maven 官網(wǎng)下載二進制包,解壓到指定目錄。配置 MAVEN_HOMEPATH 環(huán)境變量,同樣在 /etc/profile 文件中添加:
export MAVEN_HOME=/path/to/your/maven
export PATH=$MAVEN_HOME/bin:$PATH
- 驗證 Maven 安裝,執(zhí)行 `mvn -v` 命令,若輸出 Maven 版本信息則安裝成功。
- **Gradle**:也可以選擇 Gradle 作為構(gòu)建工具,從 Gradle 官網(wǎng)下載安裝包,按照官方文檔進行安裝和配置。

2.2 Docker 環(huán)境安裝

  1. Linux 系統(tǒng)
    • 對于 Ubuntu 系統(tǒng),可以使用以下命令安裝 Docker:
sudo apt-get update
sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu$(lsb_release -cs) stable"
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
- 安裝完成后,使用 `sudo docker run hello-world` 命令驗證 Docker 是否安裝成功。
  1. Windows 系統(tǒng)
    • 從 Docker 官網(wǎng)下載 Docker Desktop for Windows 安裝包,運行安裝程序,按照提示完成安裝。安裝完成后,啟動 Docker Desktop,在命令提示符或 PowerShell 中執(zhí)行 docker run hello-world 進行驗證。

2.3 Kubernetes 環(huán)境搭建

  1. 本地開發(fā)環(huán)境 - Minikube
    • Minikube 是一個在本地快速搭建單節(jié)點 K8s 集群的工具。從 Minikube 官網(wǎng)下載對應(yīng)系統(tǒng)的二進制文件,添加到系統(tǒng) PATH 中。
    • 啟動 Minikube,執(zhí)行以下命令:
minikube start
- 配置 `kubectl` 與 Minikube 集群交互:
kubectl config use-context minikube
  1. 云環(huán)境 - 以阿里云 ACK 為例
    • 登錄阿里云控制臺,進入容器服務(wù) ACK 頁面,創(chuàng)建一個 K8s 集群。按照向?qū)瓿杉旱呐渲茫ü?jié)點數(shù)量、節(jié)點規(guī)格等。
    • 下載并配置 kubectl,通過阿里云提供的憑證信息連接到創(chuàng)建的集群。

三、Spring Boot 項目開發(fā)

3.1 創(chuàng)建 Spring Boot 項目

  1. 使用 Spring Initializr
    • 訪問 Spring Initializr 網(wǎng)站(https://start.spring.io/),選擇項目的元數(shù)據(jù),如項目類型(Maven Project 或 Gradle Project)、Java 版本、Spring Boot 版本等。
    • 添加所需的依賴,例如 Spring Web 用于構(gòu)建 Web 應(yīng)用。點擊 Generate 按鈕下載項目壓縮包,解壓到本地開發(fā)環(huán)境。
  2. 使用 IDE 創(chuàng)建項目
    • 在 IntelliJ IDEA 中,選擇 File -> New -> Project,在左側(cè)選擇 Spring Initializr,按照向?qū)瓿身椖縿?chuàng)建。

3.2 編寫簡單的 RESTful API

  1. 創(chuàng)建 Controller 類
    • src/main/java 目錄下創(chuàng)建一個 Controller 類,示例代碼如下:
package com.example.demo.controller;
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, Spring Boot!";
    }
}
  1. 運行項目進行測試
    • 在 IDE 中運行 Spring Boot 應(yīng)用的主類(通常是帶有 @SpringBootApplication 注解的類)。
    • 打開瀏覽器或使用工具(如 Postman)訪問 http://localhost:8080/hello,若看到返回 Hello, Spring Boot!,則說明 API 編寫成功。

3.3 項目打包

  1. Maven 打包
    • 在項目根目錄下執(zhí)行以下命令進行打包:
mvn clean package
- 打包完成后,在 `target` 目錄下會生成一個 `.jar` 文件。
  1. Gradle 打包
    • 若使用 Gradle,執(zhí)行以下命令:
gradle build
- 生成的 `.jar` 文件位于 `build/libs` 目錄下。

四、Docker 鏡像構(gòu)建與管理

4.1 編寫 Dockerfile

在項目根目錄下創(chuàng)建一個名為 Dockerfile 的文件,內(nèi)容如下:

# 基礎(chǔ)鏡像
FROM openjdk:11-jre-slim
# 設(shè)置工作目錄
WORKDIR /app
# 將打包好的 Spring Boot 應(yīng)用復(fù)制到容器中
COPY target/demo-0.0.1-SNAPSHOT.jar app.jar
# 暴露應(yīng)用端口
EXPOSE 8080
# 啟動應(yīng)用
CMD ["java", "-jar", "app.jar"]

4.2 構(gòu)建 Docker 鏡像

在項目根目錄下,執(zhí)行以下命令構(gòu)建 Docker 鏡像:

docker build -t springboot-demo:1.0 .

其中,springboot-demo:1.0 是鏡像的名稱和版本號,. 表示使用當(dāng)前目錄下的 Dockerfile 進行構(gòu)建。

4.3 運行 Docker 容器進行測試

構(gòu)建完成后,使用以下命令運行 Docker 容器:

docker run -p 8080:8080 springboot-demo:1.0

-p 8080:8080 表示將容器的 8080 端口映射到宿主機的 8080 端口。訪問 http://localhost:8080/hello,若能看到之前編寫的 API 返回結(jié)果,則說明容器運行正常。

4.4 推送 Docker 鏡像到鏡像倉庫

  1. 注冊鏡像倉庫賬號
    • 可以選擇公共的鏡像倉庫,如 Docker Hub,也可以使用云服務(wù)商提供的私有鏡像倉庫,如阿里云容器鏡像服務(wù)。注冊并登錄相應(yīng)的鏡像倉庫。
  2. 登錄鏡像倉庫
    • 以 Docker Hub 為例,在終端執(zhí)行以下命令登錄:
docker login

輸入用戶名和密碼完成登錄。
3. 標記鏡像
- 為了將鏡像推送到指定的鏡像倉庫,需要給鏡像添加合適的標簽:

docker tag springboot-demo:1.0 your-dockerhub-username/springboot-demo:1.0
  1. 推送鏡像
    • 執(zhí)行以下命令將鏡像推送到 Docker Hub:
docker push your-dockerhub-username/springboot-demo:1.0

五、Kubernetes 部署應(yīng)用

5.1 創(chuàng)建 Deployment

在項目根目錄下創(chuàng)建一個名為 deployment.yaml 的文件,內(nèi)容如下:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: springboot-demo-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: springboot-demo
  template:
    metadata:
      labels:
        app: springboot-demo
    spec:
      containers:
      - name: springboot-demo
        image: your-dockerhub-username/springboot-demo:1.0
        ports:
        - containerPort: 8080

執(zhí)行以下命令創(chuàng)建 Deployment:

kubectl apply -f deployment.yaml

replicas: 3 表示創(chuàng)建 3 個副本,確保應(yīng)用的高可用性。

5.2 創(chuàng)建 Service

創(chuàng)建一個名為 service.yaml 的文件,內(nèi)容如下:

apiVersion: v1
kind: Service
metadata:
  name: springboot-demo-service
spec:
  selector:
    app: springboot-demo
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8080
  type: LoadBalancer

執(zhí)行以下命令創(chuàng)建 Service:

kubectl apply -f service.yaml

type: LoadBalancer 表示創(chuàng)建一個負載均衡器,將外部流量分發(fā)到后端的 Pod 上。

5.3 查看部署狀態(tài)

使用以下命令查看 Deployment 和 Service 的狀態(tài):

kubectl get deployments
kubectl get services

確保 Deployment 的 READY 狀態(tài)為 3/3,Service 分配到了外部 IP 地址。

5.4 訪問應(yīng)用

如果使用 Minikube,可以執(zhí)行以下命令獲取應(yīng)用的訪問地址:

minikube service springboot-demo-service

如果是云環(huán)境,使用 Service 分配的外部 IP 地址訪問 http://<external-ip>/hello,若能看到 API 返回結(jié)果,則說明應(yīng)用部署成功。

六、持續(xù)集成與持續(xù)部署(CI/CD)

6.1 選擇 CI/CD 工具

可以選擇 Jenkins、GitLab CI/CD、GitHub Actions 等工具實現(xiàn) CI/CD 流程。這里以 GitHub Actions 為例進行介紹。

6.2 配置 GitHub Actions

  1. 在項目根目錄下創(chuàng)建 .github/workflows 目錄。
  2. 在該目錄下創(chuàng)建一個名為 ci-cd.yml 的文件,內(nèi)容如下:
name: Spring Boot CI/CD
on:
  push:
    branches:
      - main
jobs:
  build-and-deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v2
      - name: Set up Java
        uses: actions/setup-java@v1
        with:
          java-version: 11
      - name: Build with Maven
        run: mvn clean package
      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v1
      - name: Login to Docker Hub
        uses: docker/login-action@v1
        with:
          username:${{ secrets.DOCKERHUB_USERNAME }}
          password:${{ secrets.DOCKERHUB_PASSWORD }}
      - name: Build and push Docker image
        uses: docker/build-push-action@v2
        with:
          context: .
          push: true
          tags: your-dockerhub-username/springboot-demo:latest
      - name: Set up kubectl
        uses: azure/setup-kubectl@v1
      - name: Deploy to Kubernetes
        run: |
          kubectl config set-cluster my-cluster --server=${{ secrets.K8S_SERVER }}
          kubectl config set-credentials my-user --token=${{ secrets.K8S_TOKEN }}
          kubectl config set-context my-context --cluster=my-cluster --user=my-user
          kubectl config use-context my-context
          kubectl apply -f deployment.yaml
          kubectl apply -f service.yaml
  1. 在 GitHub 項目的設(shè)置中添加 DOCKERHUB_USERNAME、DOCKERHUB_PASSWORD、K8S_SERVER、K8S_TOKEN 等 Secrets,確保敏感信息的安全。

6.3 觸發(fā) CI/CD 流程

每次向 main 分支推送代碼時,GitHub Actions 會自動觸發(fā) CI/CD 流程,完成代碼構(gòu)建、鏡像打包、推送和 K8s 部署等操作。

七、總結(jié)

通過以上步驟,我們完成了從 Spring Boot 項目開發(fā)到 Docker 鏡像構(gòu)建,再到使用 K8s 進行云原生部署的全流程。并且通過 CI/CD 工具實現(xiàn)了代碼的自動化部署,提高了開發(fā)和部署效率。在實際項目中,可以根據(jù)需求對各個環(huán)節(jié)進行優(yōu)化和擴展,確保應(yīng)用的高可用性、可擴展性和安全性。

到此這篇關(guān)于SpringBoot+Docker+K8s云原生部署全流程(從零到發(fā)布)的文章就介紹到這了,更多相關(guān)SpringBoot+Docker+K8s云原生部署內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot中連接多個RabbitMQ的方法詳解

    SpringBoot中連接多個RabbitMQ的方法詳解

    這篇文章主要介紹了SpringBoot中連接多個RabbitMQ的方法詳解,要實現(xiàn) SpringBoot 連接多個 RabbitMQ,只能自定義重寫一些東西,分別配置才可以,下面一起來走一下試試,需要的朋友可以參考下
    2023-10-10
  • java String的深入理解

    java String的深入理解

    這篇文章主要介紹了java String的深入理解的相關(guān)資料,希望通過本文大家能理解String的用法,需要的朋友可以參考下
    2017-09-09
  • 如何測試Spring MVC應(yīng)用

    如何測試Spring MVC應(yīng)用

    這篇文章主要介紹了如何測試Spring MVC應(yīng)用,幫助大家更好的理解和使用spring框架,感興趣的朋友可以了解下
    2020-10-10
  • 一文秒懂通過JavaCSV類庫讀寫CSV文件的技巧

    一文秒懂通過JavaCSV類庫讀寫CSV文件的技巧

    本文給大家推薦第三方工具庫 JavaCSV,用來造一些 csv 測試數(shù)據(jù)文件,使用超級方便,本文通過示例代碼給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧
    2021-05-05
  • MyBatis中使用#{}和${}占位符傳遞參數(shù)的各種報錯信息處理方案

    MyBatis中使用#{}和${}占位符傳遞參數(shù)的各種報錯信息處理方案

    這篇文章主要介紹了MyBatis中使用#{}和${}占位符傳遞參數(shù)的各種報錯信息處理方案,分別介紹了兩種占位符的區(qū)別,本文給大家介紹的非常詳細,需要的朋友可以參考下
    2024-01-01
  • java驗證用戶是否已經(jīng)登錄 java實現(xiàn)自動登錄

    java驗證用戶是否已經(jīng)登錄 java實現(xiàn)自動登錄

    這篇文章主要介紹了java驗證用戶是否已經(jīng)登錄,java實現(xiàn)自動登錄,感興趣的小伙伴們可以參考一下
    2016-04-04
  • Spring Boot中Redis序列化優(yōu)化配置詳解

    Spring Boot中Redis序列化優(yōu)化配置詳解

    在使用Spring Boot集成Redis時,序列化方式的選擇直接影響數(shù)據(jù)存儲的效率和系統(tǒng)兼容性,默認的JDK序列化存在可讀性差、存儲空間大等問題,本文將深入探討如何優(yōu)化Redis序列化配置,感興趣的朋友跟隨小編一起看看吧
    2025-05-05
  • Springcloud eureka搭建高可用集群過程圖解

    Springcloud eureka搭建高可用集群過程圖解

    這篇文章主要介紹了Springcloud eureka搭建高可用集群過程圖解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-04-04
  • Mybatis plus結(jié)合springboot使用

    Mybatis plus結(jié)合springboot使用

    本文主要介紹了MyBatisPlus使用SpringBoot數(shù)據(jù)庫操作,從添加依賴到測試,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-11-11
  • 一篇文章帶你詳解Spring的AOP

    一篇文章帶你詳解Spring的AOP

    這篇文章主要為大家介紹了Spring的AOP,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01

最新評論

马关县| 阿克苏市| 烟台市| 北海市| 新绛县| 双峰县| 岳阳市| 临海市| 葫芦岛市| 翁源县| 姜堰市| 莒南县| 若尔盖县| 和平区| 龙泉市| 眉山市| 鹤山市| 汶川县| 姚安县| 石台县| 延长县| 钟山县| 鄂伦春自治旗| 林口县| 修文县| 望都县| 莒南县| 噶尔县| 赤峰市| 罗定市| 门源| 杂多县| 苍南县| 桐庐县| 资阳市| 白河县| 上杭县| 田东县| 武穴市| 苍溪县| 门源|