简介:本文详细介绍了在 Kubernetes 环境下搭建 Docker 容器与 Harbor 私有镜像仓库的完整流程,并提供了 SpringBoot 应用的部署与配置指南,帮助开发者实现高效、安全的容器化应用管理。
在 Kubernetes(K8s)环境下,容器化应用的部署与管理已成为企业IT架构的主流趋势。Docker 作为容器技术的标杆,提供了轻量级、可移植的应用运行环境;而 Harbor 作为开源的企业级私有镜像仓库,则为容器镜像的安全存储与分发提供了可靠保障。结合 SpringBoot 应用的快速开发特性,三者共同构成了现代化应用部署的黄金组合。
# Ubuntu 示例sudo apt-get updatesudo apt-get install -y docker-ce docker-ce-cli containerd.iosudo systemctl enable dockersudo systemctl start docker
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3chmod 700 get_helm.sh./get_helm.sh
helm repo add harbor https://helm.goharbor.iohelm repo update
kubectl create namespace harbor# 使用 NFS 示例(需提前配置 NFS 服务器)kubectl create -f nfs-storageclass.yaml
编辑 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" # 初始管理员密码
helm install harbor harbor/harbor -n harbor -f harbor-values.yaml
kubectl get pods -n harbor# 等待所有 Pod 状态变为 Running
访问 Harbor UI:https://<harbor-ingress-ip>,使用默认账号 admin 与配置的密码登录。
# 使用多阶段构建减少镜像体积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"]
docker build -t springboot-demo:latest .
docker login https://<harbor-domain># 输入用户名与密码
docker tag springboot-demo:latest <harbor-domain>/library/springboot-demo:latestdocker push <harbor-domain>/library/springboot-demo:latest
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"
apiVersion: v1kind: Servicemetadata:name: springboot-demo-servicespec:selector:app: springboot-demoports:- protocol: TCPport: 80targetPort: 8080type: ClusterIP
kubectl apply -f deployment.yamlkubectl apply -f service.yamlkubectl get pods # 检查 Pod 状态kubectl port-forward svc/springboot-demo-service 8080:80 # 本地访问测试
在 Deployment 中配置 imagePullPolicy:
spec:containers:- name: springbootimage: <harbor-domain>/library/springboot-demo:latestimagePullPolicy: IfNotPresent # 或 Always
在 Harbor 中启用漏洞扫描:
若 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
通过本文的指南,开发者可在 K8s 环境下高效搭建 Docker + Harbor 私有镜像仓库,并完成 SpringBoot 应用的容器化部署,为企业的数字化转型提供坚实的技术支撑。