K8s 环境下 Docker + Harbor 私有仓库全攻略:SpringBoot 部署指南
2025.10.10 18:46浏览量:2简介:本文详细介绍了在 Kubernetes 环境下搭建 Docker 容器与 Harbor 私有镜像仓库的完整流程,并提供了 SpringBoot 应用的部署与配置指南,帮助开发者实现高效、安全的容器化应用管理。
一、背景与需求分析
在 Kubernetes(K8s)环境下,容器化应用的部署与管理已成为企业IT架构的主流趋势。Docker 作为容器技术的标杆,提供了轻量级、可移植的应用运行环境;而 Harbor 作为开源的企业级私有镜像仓库,则为容器镜像的安全存储与分发提供了可靠保障。结合 SpringBoot 应用的快速开发特性,三者共同构成了现代化应用部署的黄金组合。
1.1 为什么需要私有镜像仓库?
- 安全性:避免将敏感镜像暴露在公共仓库(如 Docker Hub)中,降低数据泄露风险。
- 效率:私有仓库可部署在企业内网,加速镜像拉取速度,提升部署效率。
- 合规性:满足金融、医疗等行业对数据隐私的严格要求。
1.2 Kubernetes 与 Docker 的协同优势
- 资源隔离:K8s 通过 Pod 实现应用资源的隔离与调度。
- 弹性伸缩:基于 Horizontal Pod Autoscaler(HPA)动态调整应用实例数量。
- 高可用:通过多节点部署与健康检查机制确保应用持续可用。
二、环境准备与工具安装
2.1 基础环境要求
- Kubernetes 集群:至少 1 个 Master 节点与 2 个 Worker 节点(生产环境建议更多)。
- Docker:版本 19.03+(支持 BuildKit 加速镜像构建)。
- Harbor:版本 2.0+(支持 Helm Chart 存储与漏洞扫描)。
- 存储后端:NFS、Ceph 或云存储(如 AWS EBS、阿里云盘)。
2.2 工具安装步骤
2.2.1 安装 Docker
# Ubuntu 示例sudo apt-get updatesudo apt-get install -y docker-ce docker-ce-cli containerd.iosudo systemctl enable dockersudo systemctl start docker
2.2.2 安装 Helm(用于 Harbor 部署)
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3chmod 700 get_helm.sh./get_helm.sh
三、Harbor 私有镜像仓库搭建
3.1 Harbor 核心组件
- Core Services:提供 API 与用户界面。
- Registry:存储与分发镜像。
- Database:存储元数据(如项目、用户、标签)。
- Job Service:执行异步任务(如镜像复制、垃圾回收)。
3.2 部署 Harbor(Helm 方式)
3.2.1 添加 Harbor Helm 仓库
helm repo add harbor https://helm.goharbor.iohelm repo update
3.2.2 创建命名空间与持久化存储
kubectl create namespace harbor# 使用 NFS 示例(需提前配置 NFS 服务器)kubectl create -f nfs-storageclass.yaml
3.2.3 自定义 Values 文件
编辑 harbor-values.yaml,关键配置如下:
expose:type: ingresstls:enabled: truecertSource: secretsecret:secretName: "harbor-tls"namespace: "harbor"persistence:persistentVolumeClaim:registry:storageClass: "nfs-client"accessMode: ReadWriteOncesize: 10Gichartmuseum:storageClass: "nfs-client"size: 5Gidatabase:internal:password: "Harbor12345" # 生产环境使用 SecretadminPassword: "Admin12345" # 初始管理员密码
3.2.4 部署 Harbor
helm install harbor harbor/harbor -n harbor -f harbor-values.yaml
3.2.5 验证部署
kubectl get pods -n harbor# 等待所有 Pod 状态变为 Running
访问 Harbor UI:https://<harbor-ingress-ip>,使用默认账号 admin 与配置的密码登录。
四、Docker 镜像构建与推送
4.1 构建 SpringBoot 应用镜像
4.1.1 编写 Dockerfile
# 使用多阶段构建减少镜像体积FROM maven:3.8.4-openjdk-11 AS buildWORKDIR /appCOPY pom.xml .RUN mvn dependency:go-offlineCOPY src ./srcRUN mvn package -DskipTestsFROM openjdk:11-jre-slimWORKDIR /appCOPY --from=build /app/target/springboot-demo.jar .EXPOSE 8080ENTRYPOINT ["java", "-jar", "springboot-demo.jar"]
4.1.2 构建镜像
docker build -t springboot-demo:latest .
4.2 推送镜像到 Harbor
4.2.1 登录 Harbor
docker login https://<harbor-domain># 输入用户名与密码
4.2.2 标记并推送镜像
docker tag springboot-demo:latest <harbor-domain>/library/springboot-demo:latestdocker push <harbor-domain>/library/springboot-demo:latest
五、K8s 部署 SpringBoot 应用
5.1 创建 Deployment 与 Service
5.1.1 Deployment YAML 示例
apiVersion: apps/v1kind: Deploymentmetadata:name: springboot-demospec:replicas: 3selector:matchLabels:app: springboot-demotemplate:metadata:labels:app: springboot-demospec:containers:- name: springbootimage: <harbor-domain>/library/springboot-demo:latestports:- containerPort: 8080resources:requests:cpu: "100m"memory: "256Mi"limits:cpu: "500m"memory: "512Mi"
5.1.2 Service YAML 示例
apiVersion: v1kind: Servicemetadata:name: springboot-demo-servicespec:selector:app: springboot-demoports:- protocol: TCPport: 80targetPort: 8080type: ClusterIP
5.2 部署与验证
kubectl apply -f deployment.yamlkubectl apply -f service.yamlkubectl get pods # 检查 Pod 状态kubectl port-forward svc/springboot-demo-service 8080:80 # 本地访问测试
六、高级配置与优化
6.1 镜像拉取策略
在 Deployment 中配置 imagePullPolicy:
spec:containers:- name: springbootimage: <harbor-domain>/library/springboot-demo:latestimagePullPolicy: IfNotPresent # 或 Always
6.2 Harbor 镜像自动扫描
在 Harbor 中启用漏洞扫描:
- 部署 Clair 或 Trivy 扫描器。
- 在项目设置中启用“自动扫描”。
6.3 K8s 镜像拉取 Secret
若 Harbor 使用自签名证书,需创建 Secret:
kubectl create secret docker-registry regcred \--docker-server=<harbor-domain> \--docker-username=<username> \--docker-password=<password> \--docker-email=<email>
在 Deployment 中引用 Secret:
spec:imagePullSecrets:- name: regcred
七、总结与最佳实践
- 安全优先:启用 Harbor 的 HTTPS、RBAC 权限控制与镜像签名。
- 自动化流程:集成 CI/CD 工具(如 Jenkins、GitLab CI)实现镜像自动构建与推送。
- 监控告警:通过 Prometheus + Grafana 监控 Harbor 与 SpringBoot 应用的性能指标。
- 备份策略:定期备份 Harbor 的数据库与存储卷,防止数据丢失。
通过本文的指南,开发者可在 K8s 环境下高效搭建 Docker + Harbor 私有镜像仓库,并完成 SpringBoot 应用的容器化部署,为企业的数字化转型提供坚实的技术支撑。

发表评论
登录后可评论,请前往 登录 或 注册