Java 語言特定指南

Java 語言特定指南

本 Java 入門指南將教您如何使用 Docker 創建一個容器化的 Spring Boot 應用程序。在本模塊中,您將學習如何:

  • 使用 Maven 容器化并運行一個 Spring Boot 應用程序
  • 設置本地開發環境以將數據庫連接到容器、配置調試器,并使用 Compose Watch 實現實時重新加載
  • 在容器中運行單元測試
  • 使用 GitHub Actions 為您的應用程序配置 CI/CD 流水線
  • 將容器化的應用程序本地部署到 Kubernetes 以測試和調試您的部署

完成 Java 入門模塊后,您應該能夠根據本指南提供的示例和說明來容器化您自己的 Java 應用程序。

容器化并運行 Spring Boot 應用程序

1. 準備現有的 Spring Boot 應用程序

確保您的項目結構類似于以下內容:

my-spring-boot-app/
├── src/
│   ├── main/
│   │   ├── java/
│   │   ├── resources/
│   ├── test/
├── pom.xml

2. 創建 Dockerfile

在項目根目錄下創建一個名為 Dockerfile 的文件,并添加以下內容:

# 使用 Maven 鏡像構建項目
FROM maven:3.8.4-openjdk-11 AS build
WORKDIR /app
COPY pom.xml .
COPY src ./src
RUN mvn clean package -DskipTests# 使用 OpenJDK 鏡像運行應用程序
FROM openjdk:11-jre-slim
WORKDIR /app
COPY --from=build /app/target/*.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "app.jar"]

3. 構建 Docker 鏡像

在項目根目錄下運行以下命令以構建 Docker 鏡像:

docker build -t my-spring-boot-app .

4. 運行容器

使用以下命令運行容器:

docker run -d -p 8080:8080 my-spring-boot-app

現在,您可以通過瀏覽器訪問 http://localhost:8080 來查看您的應用程序。

設置本地開發環境

使用 Docker 容器設置本地開發環境有助于確保開發環境與生產環境一致。

1. 創建 docker-compose.yml 文件

在項目根目錄下創建一個名為 docker-compose.yml 的文件,并添加以下內容:

version: '3.8'
services:app:image: my-spring-boot-appports:- "8080:8080"volumes:- .:/appcommand: mvn spring-boot:rundb:image: postgres:13environment:POSTGRES_DB: mydbPOSTGRES_USER: userPOSTGRES_PASSWORD: passwordports:- "5432:5432"

2. 運行 Docker Compose

在項目根目錄下運行以下命令啟動開發環境:

docker-compose up

現在,您的應用程序將在 http://localhost:8080 上運行,您可以進行開發并實時查看更改。

在容器中運行單元測試

1. 修改 Dockerfile 以包括測試步驟

更新 Dockerfile 文件以包括測試步驟:

# 使用 Maven 鏡像構建項目
FROM maven:3.8.4-openjdk-11 AS build
WORKDIR /app
COPY pom.xml .
COPY src ./src
RUN mvn clean package# 使用 OpenJDK 鏡像運行應用程序
FROM openjdk:11-jre-slim
WORKDIR /app
COPY --from=build /app/target/*.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "app.jar"]

2. 運行測試容器

使用以下命令運行測試:

docker run --rm -v $(pwd):/app -w /app maven:3.8.4-openjdk-11 mvn test

配置 CI/CD 流水線

使用 GitHub Actions 配置 CI/CD 流水線以自動化測試和部署過程。

1. 創建 GitHub Actions 工作流文件

在項目根目錄下創建 .github/workflows/ci.yml 并添加以下內容:

name: CI/CD Pipelineon:push:branches:- mainpull_request:branches:- mainjobs:build:runs-on: ubuntu-lateststeps:- name: Checkout codeuses: actions/checkout@v2- name: Set up JDK 11uses: actions/setup-java@v2with:java-version: '11'- name: Build with Mavenrun: mvn clean package- name: Build Docker imagerun: docker build -t my-spring-boot-app .- name: Push Docker imageenv:DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}run: |echo $DOCKER_PASSWORD | docker login -u $DOCKER_USERNAME --password-stdindocker tag my-spring-boot-app $DOCKER_USERNAME/my-spring-boot-app:latestdocker push $DOCKER_USERNAME/my-spring-boot-app:latest

確保在 GitHub 倉庫中添加 Docker Hub 憑據作為秘密(secrets)。

部署到 Kubernetes

使用 Kubernetes 部署和管理容器化的 Java 應用程序。

1. 創建 Kubernetes 部署文件

在項目根目錄下創建 k8s/deployment.yml 并添加以下內容:

apiVersion: apps/v1
kind: Deployment
metadata:name: my-spring-boot-app
spec:replicas: 3selector:matchLabels:app: my-spring-boot-apptemplate:metadata:labels:app: my-spring-boot-appspec:containers:- name: my-spring-boot-appimage: <DOCKER_USERNAME>/my-spring-boot-app:latestports:- containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:name: my-spring-boot-app-service
spec:type: NodePortselector:app: my-spring-boot-appports:- port: 8080targetPort: 8080nodePort: 30008

2. 部署到 Kubernetes

使用 kubectl 命令將應用程序部署到 Kubernetes 集群:

kubectl apply -f k8s/deployment.yml

您可以通過訪問 http://<NODE_IP>:30008 查看應用程序。

通過上述步驟,您已經學會了如何容器化并運行一個 Spring Boot 應用程序,設置本地開發環境,使用容器運行測試,配置 CI/CD 流水線,并將應用程序部署到 Kubernetes。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/35220.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/35220.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/35220.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

篩斗數據:引領未來,以技術創新推動在線推廣新紀元

在數字化浪潮的推動下&#xff0c;企業在線推廣已成為市場拓展的關鍵手段。然而&#xff0c;在海量信息中精準定位目標用戶&#xff0c;有效提升轉化率&#xff0c;卻是一大挑戰。篩斗數據&#xff0c;作為一家專注于數據提取與分析的技術公司&#xff0c;正以其獨特的技術優勢…

云計算基礎知識

前言&#xff1a; 隨著ICT技術的高速發展&#xff0c;企業架構對計算、存儲、網絡資源的需求更高&#xff0c;急需一種新的架構來承載業務&#xff0c;以獲得持續&#xff0c;高速&#xff0c;高效的發展&#xff0c;云計算應運而生。 云計算背景 信息大爆炸時代&#xff1a…

Linux 標準IO的fopen和fclose

getchar(),putchar() ‐‐‐‐ 一個字符 gets(buf),puts(buf) ‐‐‐‐ 一串字符 scanf(),printf() ‐‐‐‐ 一個字符&#xff0c;一串字符都可以 fopen函數的形式 FILE * fopen(constchar *path , cost char *mode) /* * description : 打開一個文件 * param ‐ path…

進階篇07——InnoDB引擎介紹

概覽 邏輯存儲結構 架構 當執行增刪改查操作時&#xff0c;操作的是緩沖區的數據&#xff0c;如果緩沖區里沒有要操作的數據&#xff0c;就會從磁盤中讀取數據加載到緩沖區中&#xff1b;緩沖區的數據會以一定的頻率通過后臺線程刷新到磁盤中永久存儲。 內存結構 磁盤結構 后…

數據結構(Java):順序表集合類ArrayList

1、線性表 線性表&#xff0c;在邏輯結構上是連續的&#xff08;可理解為連續的一條直線&#xff0c;一對一的關系&#xff09;&#xff0c;而在物理結構上不一定連續&#xff0c;通常以數組和鏈式結構進行存儲。 線性表是一種在實際中廣泛使用的數據結構&#xff0c;常見的線…

Vue介紹與入門(一篇入門)

Vue.js 是一個流行的 JavaScript 框架&#xff0c;專門用于構建用戶界面和單頁面應用程序。它簡單易學&#xff0c;但功能強大&#xff0c;能夠幫助開發者快速構建交互性強的 Web 應用。 本教程旨在幫助那些剛開始學習 Vue.js 的開發者快速入門&#xff0c;并掌握一些基礎知識…

【UE5.1 角色練習】12-坐騎——Part2(讓角色騎上坐騎)

目錄 前言 效果 步驟 一、坐騎的父類 二、將角色附加到坐騎 三、添加坐姿 四、騎上坐騎 五、從坐騎上下來 前言 在上一篇&#xff08;【UE5.1 角色練習】11-坐騎——Part1&#xff08;控制大象移動&#xff09;&#xff09;基礎上繼續實現角色騎上坐騎的功能。 效果 …

語言的數據結構:樹與二叉樹(二叉樹篇)

語言的數據結構&#xff1a;樹與二叉樹&#xff08;二叉樹篇&#xff09; 前言概念特別的二叉樹滿二叉樹完全二叉樹 存儲結構順序存儲鏈式存儲 查找方式 前言 上文說到了樹&#xff0c;有人認為二叉樹是樹的每一個分支都有兩個子節點。其實這也對。但二叉樹在此基礎上還做了限…

RS422串口通信協議介紹和基礎代碼實現

**RS-422串口協議介紹**RS-422是一種工業標準的通信接口&#xff0c;其全稱是“平衡電壓數字接口電路的電氣特性”。它是在RS-232的基礎上發展而來&#xff0c;旨在解決RS-232通信距離短和速率低的缺點。以下是對RS-422串口協議的詳細介紹&#xff1a;傳輸速率與距離&#xff1…

MyCAT 2 簡單入門

MyCAT 2 基礎 什么是 MyCAT 2&#xff1f; MyCAT 2 是一款開源的數據庫中間件&#xff0c;它主要用于解決數據庫的分庫分表、讀寫分離等問題。MyCAT 2 基于 MyCAT 1 的架構進行優化和重構&#xff0c;具有更高的性能和穩定性&#xff0c;支持多種數據庫類型&#xff0c;包括 …

【QCustomPlot實戰系列】QCPGraph區域高亮

使用QCPDataSelection來設置選中的區域&#xff0c;并將QCPGraph的可選擇區域設置成QCP::stMultipleDataRanges void AreaPieces::initCustomPlot(QCustomPlot *parentPlot) {QVector<double> x {0, 1, 2, 3, 4, 5, 6, 7, 8};QVector<double> y {200, 560, 750…

《mysql篇》--mysql常用命令

數據庫操作 顯示當前數據庫 show databases;(database 后面要加s) 這行命令用來顯示當前有多少個數據庫 //mysql中有自帶的四個庫 創建數據庫 create database 數據庫名(name); 創建一個數據庫 create dabase if not exists <數據庫名(name)>; //如果系統有與當前創建…

前端vite+vue3——利用環境變量和路由區分h5、pc模塊打包(從0到1)

?前言 大家好&#xff0c;我是yma16&#xff0c;本文分享 前端vitevue3——利用環境變量和路由對前端區分h5和pc模塊打包&#xff08;從0到1&#xff09;。 背景&#xff1a; 前端本地開發pc和h5的項目&#xff0c;發布時需要區分開h5和pc的頁面 vite Vite 通過在一開始將應…

圖片怎么加水印?快來試試這6個圖片加水印方法(2024年新)

圖片怎么加水印&#xff1f;作為打工人在日常的工作生活中總會遇到各種各樣的工作難題&#xff0c;相信從事電商或者是設計等工作的小伙伴們&#xff0c;遇到最多的問題應該就是給圖片添加水印了。為什么要給圖片加水印&#xff1f;其實給圖片加水印最主要的目的是保護我們的圖…

刷題——二叉樹的中序遍歷

雙指針法 void midorder(vector<int>&res, TreeNode* root){if(root NULL) return;midorder(res, root->left);res.push_back(root->val);midorder(res, root->right);}vector<int> inorderTraversal(TreeNode* root) {// write code herevector<…

代碼隨想錄算法訓練營第四十九天|LeetCode300 最長遞增子序列、LeetCode674 最長連續遞增序列、LeetCode718 最長重復子數組

題1&#xff1a; 指路&#xff1a;300. 最長遞增子序列 - 力扣&#xff08;LeetCode&#xff09; 思路與代碼&#xff1a; 求最長遞增子序列&#xff0c;那么就定義一個數組dp[i]&#xff0c;含義為最長遞增子序列。這里有一個小問題&#xff0c;這里的序列的范圍為何。如果…

一文入門Makefile

今天我們來玩玩Makefile。 這邊是借鑒的陳皓老師的《跟我一起寫 Makefile》 pdf下載鏈接如下。 鏈接&#xff1a;https://pan.baidu.com/s/1woRq2nEkgzLv1o5uE0FZHg?pwdmhrh 提取碼&#xff1a;mhrh 我們之前已經算是入門了gcc&#xff0c;那我們的下一站就是Makefile&…

http和https請求總結

http請求是不安全的請求的端口是80&#xff0c;https請求是安全的請求的端口是443 但是請求安全也不是絕對的。 要想先了解https就的先說幾個概念 1、證書 2、加密算法 openssl TLS/SSL 3、協議x509協議 http傳輸數據都是明文&#xff0c;在數據傳輸的過程會經過很長的鏈路…

C#面: 能夠將非靜態的方法覆寫成靜態方法嗎?

在C#中&#xff0c;不能將非靜態方法覆寫成靜態方法。這是因為靜態方法是屬于類的&#xff0c;而非靜態方法是屬于類的實例的。覆寫&#xff08;重寫&#xff09;是指在派生類中重新實現基類中的虛方法或抽象方法&#xff0c;以改變其行為。而靜態方法是無法被派生類所繼承的&a…

嵌入式學習(Day 51:ARM指令/匯編與c語言函數相互調用)

1.Supervisor模式與SVC模式 Supervisor模式是ARM處理器的一個特權工作模式&#xff0c;允許執行特權指令和訪問特權資源。SVC模式&#xff08;Supervisor Call&#xff09;是與Supervisor模式相關的一個功能或指令&#xff0c;用于從用戶模式切換到Supervisor模式&#xff0c;…