在現代微服務架構中,容器化自動化流水線是必備技能。本文將帶你完成兩個關鍵步驟:

  1. Spring Boot 項目容器化 —— 使用多階段 Dockerfile 構建輕量、安全的運行鏡像。
  2. CI/CD 自動化 —— 藉助 GitLab CI/CD,將鏡像自動構建並推送到 Harbor 私有倉庫。

參考閲讀:Java Spring Boot 項目 Docker 容器化部署教程


一、Spring Boot 項目容器化

1. Dockerfile 多階段構建

# 構建階段
FROM maven:3.9.6-eclipse-temurin-17 AS builder
WORKDIR /build
COPY . .
RUN --mount=type=cache,target=/root/.m2 mvn -B clean package -DskipTests
# 運行階段
FROM eclipse-temurin:17-jre-alpine
RUN addgroup -S sdkj && adduser -S sdkj -G sdkj
WORKDIR /app
COPY --from=builder /build/target/*.jar ./app.jar
RUN mkdir -p /app/logs && chown -R sdkj:sdkj /app/logs
ENV TZ=Asia/Shanghai
ENV JAVA_OPTS="-Xms512m -Xmx1024m"
ENV SPRING_PROFILE=prod
EXPOSE 48087
USER sdkj
ENTRYPOINT ["sh", "-c"]
CMD ["exec java $JAVA_OPTS -jar app.jar $ARGS"]

關鍵點:

  • 多階段構建:減少最終鏡像體積
  • 非 root 用户:提升安全性
  • 日誌目錄賦權:避免 logback 報錯
  • 環境變量可覆蓋:靈活配置 JVM 與 Profile

二、GitLab CI/CD 自動化構建與推送 Harbor

參考閲讀:Spring Boot 項目 GitLab CI/CD 自動構建並推送到 Harbor 教程

1. 環境準備

  • GitLab Runner(Docker executor,掛載宿主機 Docker)
  • Harbor 私有倉庫(已創建項目與機器人賬號)
  • GitLab CI/CD 變量配置:
  • HARBOR_USER / HARBOR_PASS
  • CI_REGISTRY = 192.168.0.12:5080

2. .gitlab-ci.yml 核心配置

stages:
- build
- push
variables:
DOCKER_HOST: unix:///var/run/docker.sock
DOCKER_BUILDKIT: "1"
REGISTRY: 192.168.0.12:5080
PROJECT: ayy-server
IMAGE_NAME: ayy-server-java17
.docker-base: &docker-base
image: docker:20.10.24
before_script:
- echo "$HARBOR_PASS" | docker login -u "$HARBOR_USER" --password-stdin $REGISTRY
build-test:
<<: *docker-base
stage: build
script:
- export IMAGE_TAG="test-${CI_COMMIT_SHORT_SHA}"
- docker build -t $REGISTRY/$PROJECT/$IMAGE_NAME:$IMAGE_TAG .
- echo "IMAGE_TAG=$IMAGE_TAG" > build.env
artifacts:
reports:
dotenv: build.env
only:
- main
push-test:
<<: *docker-base
stage: push
dependencies: [build-test]
script:
- docker push $REGISTRY/$PROJECT/$IMAGE_NAME:$IMAGE_TAG
only:
- main

3. 流程説明

  • main 分支:構建並推送測試鏡像(test-* 標籤)
  • tag 發佈:構建並推送生產鏡像(vX.Y.Z + prod-latest
  • 緩存鏡像:利用 BuildKit 內聯緩存加速二次構建
  • 清理策略:推送後清理 Runner 本地鏡像,避免磁盤膨脹

三、完整流程回顧

  1. 編寫 Dockerfile —— 多階段構建、非 root、安全可配置
  2. 本地驗證 —— docker build + docker run
  3. 配置 GitLab Runner —— 掛載宿主機 Docker,信任 Harbor 證書
  4. 編寫 CI/CD 流水線 —— 分支/標籤策略、緩存加速、推送 Harbor
  5. 驗證與上線 —— Harbor 中查看鏡像,部署到測試/生產環境

四、總結

通過本文,讀者可以從零到一完成:

  • Spring Boot 項目容器化(Dockerfile 最佳實踐)
  • CI/CD 自動化(GitLab Runner + Harbor 推送)

最終實現 代碼提交 → 自動構建 → 鏡像推送 → 部署上線 的完整閉環。