K8s环境下的Docker+Harbor私有仓库:SpringBoot部署指南

一、环境准备与背景介绍

1.1 为什么要搭建私有镜像仓库?

在企业级应用开发中,使用私有镜像仓库能够提高安全性、控制访问权限、加速镜像拉取速度,并方便团队统一管理镜像版本。Harbor作为一款开源的企业级Docker Registry,提供了用户管理、访问控制、审计日志等高级功能,非常适合在K8s环境中作为私有镜像仓库使用。

1.2 K8s与Docker的关系

Kubernetes(K8s)是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用。Docker则是一种轻量级的容器化技术,广泛应用于应用的打包和运行。在K8s环境中,Docker作为容器运行时,负责运行容器化的应用。

1.3 准备工作

  • K8s集群:确保已有一个可用的K8s集群,可以是Minikube(本地开发用)、Kind(Kubernetes in Docker)或云服务商提供的托管K8s服务。
  • Docker:在所有节点上安装Docker,作为容器运行时。
  • Helm:可选,用于简化K8s应用的部署和管理。
  • Harbor:用于搭建私有镜像仓库。

二、搭建Harbor私有镜像仓库

2.1 下载Harbor

从Harbor的GitHub仓库(https://github.com/goharbor/harbor/releases)下载最新版本的Harbor安装包。

2.2 配置Harbor

解压下载的Harbor安装包,编辑harbor.yml配置文件,主要修改以下参数:

  1. hostname: your.harbor.domain # 修改为你的域名或IP
  2. http:
  3. port: 80 # HTTP访问端口
  4. # HTTPS配置(可选但推荐)
  5. # https:
  6. # port: 443
  7. # certificate: /path/to/your/certificate.pem
  8. # private_key: /path/to/your/private_key.pem
  9. harbor_admin_password: Harbor12345 # 管理员密码
  10. database:
  11. password: root123 # 数据库密码

2.3 安装Harbor

执行以下命令安装Harbor:

  1. ./install.sh

安装完成后,访问http://your.harbor.domain(或HTTPS配置的地址),使用默认管理员账号admin和配置的密码登录。

2.4 配置Docker信任Harbor

在所有需要推送或拉取Harbor镜像的节点上,编辑或创建/etc/docker/daemon.json文件,添加Harbor的CA证书(如果使用HTTPS)并配置insecure-registries(如果使用HTTP):

  1. {
  2. "insecure-registries": ["your.harbor.domain"] # 如果使用HTTP
  3. // "tls-verify": false, // 不推荐,仅用于测试
  4. // 如果使用HTTPS且自签名证书,需将CA证书添加到Docker的信任链中
  5. }

重启Docker服务:

  1. systemctl restart docker

三、构建SpringBoot应用的Docker镜像

3.1 编写Dockerfile

在SpringBoot项目的根目录下创建Dockerfile

  1. # 使用官方OpenJDK基础镜像
  2. FROM openjdk:8-jdk-alpine
  3. # 设置工作目录
  4. WORKDIR /app
  5. # 复制构建好的jar包到容器中
  6. COPY target/your-springboot-app.jar /app/your-springboot-app.jar
  7. # 暴露应用运行的端口
  8. EXPOSE 8080
  9. # 运行应用
  10. ENTRYPOINT ["java", "-jar", "/app/your-springboot-app.jar"]

3.2 构建Docker镜像

在项目根目录下执行:

  1. docker build -t your.harbor.domain/library/your-springboot-app:latest .

3.3 推送镜像到Harbor

登录Harbor:

  1. docker login your.harbor.domain

输入用户名和密码后,推送镜像:

  1. docker push your.harbor.domain/library/your-springboot-app:latest

四、在K8s中部署SpringBoot应用

4.1 创建K8s Deployment

创建deployment.yaml文件:

  1. apiVersion: apps/v1
  2. kind: Deployment
  3. metadata:
  4. name: your-springboot-app
  5. spec:
  6. replicas: 3
  7. selector:
  8. matchLabels:
  9. app: your-springboot-app
  10. template:
  11. metadata:
  12. labels:
  13. app: your-springboot-app
  14. spec:
  15. containers:
  16. - name: your-springboot-app
  17. image: your.harbor.domain/library/your-springboot-app:latest
  18. ports:
  19. - containerPort: 8080

4.2 创建K8s Service

创建service.yaml文件:

  1. apiVersion: v1
  2. kind: Service
  3. metadata:
  4. name: your-springboot-app
  5. spec:
  6. selector:
  7. app: your-springboot-app
  8. ports:
  9. - protocol: TCP
  10. port: 80
  11. targetPort: 8080
  12. type: LoadBalancer # 或NodePort,根据需求选择

4.3 应用K8s配置

执行以下命令应用配置:

  1. kubectl apply -f deployment.yaml
  2. kubectl apply -f service.yaml

4.4 验证部署

查看Deployment和Pod状态:

  1. kubectl get deployments
  2. kubectl get pods

查看Service的外部访问地址(如果是LoadBalancer类型):

  1. kubectl get services

五、总结与优化建议

5.1 总结

本文详细介绍了在K8s环境下搭建Docker与Harbor私有镜像仓库的完整流程,并指导如何将SpringBoot应用部署至K8s集群。通过搭建私有镜像仓库,提高了应用部署的安全性和效率。

5.2 优化建议

  • 使用HTTPS:为Harbor配置HTTPS,提高数据传输的安全性。
  • 镜像标签管理:使用语义化版本控制(SemVer)管理镜像标签,便于版本追踪和回滚。
  • 自动化构建与部署:结合CI/CD工具(如Jenkins、GitLab CI)实现镜像的自动化构建和部署。
  • 资源限制与调优:根据应用的实际需求,合理设置K8s Pod的资源请求和限制,避免资源浪费或不足。
  • 监控与日志:集成Prometheus和Grafana进行监控,使用ELK或Fluentd进行日志收集和分析,提高系统的可观测性。

通过以上步骤和优化建议,你可以在K8s环境中高效地搭建Docker与Harbor私有镜像仓库,并成功部署SpringBoot应用。