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。