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配置文件,主要修改以下参数:
hostname: your.harbor.domain # 修改为你的域名或IP
http:
port: 80 # HTTP访问端口
# HTTPS配置(可选但推荐)
# https:
# port: 443
# certificate: /path/to/your/certificate.pem
# private_key: /path/to/your/private_key.pem
harbor_admin_password: Harbor12345 # 管理员密码
database:
password: root123 # 数据库密码
2.3 安装Harbor
执行以下命令安装Harbor:
./install.sh
安装完成后,访问http://your.harbor.domain(或HTTPS配置的地址),使用默认管理员账号admin和配置的密码登录。
2.4 配置Docker信任Harbor
在所有需要推送或拉取Harbor镜像的节点上,编辑或创建/etc/docker/daemon.json文件,添加Harbor的CA证书(如果使用HTTPS)并配置insecure-registries(如果使用HTTP):
{
"insecure-registries": ["your.harbor.domain"] # 如果使用HTTP
// "tls-verify": false, // 不推荐,仅用于测试
// 如果使用HTTPS且自签名证书,需将CA证书添加到Docker的信任链中
}
重启Docker服务:
systemctl restart docker
三、构建SpringBoot应用的Docker镜像
3.1 编写Dockerfile
在SpringBoot项目的根目录下创建Dockerfile:
# 使用官方OpenJDK基础镜像
FROM openjdk:8-jdk-alpine
# 设置工作目录
WORKDIR /app
# 复制构建好的jar包到容器中
COPY target/your-springboot-app.jar /app/your-springboot-app.jar
# 暴露应用运行的端口
EXPOSE 8080
# 运行应用
ENTRYPOINT ["java", "-jar", "/app/your-springboot-app.jar"]
3.2 构建Docker镜像
在项目根目录下执行:
docker build -t your.harbor.domain/library/your-springboot-app:latest .
3.3 推送镜像到Harbor
登录Harbor:
docker login your.harbor.domain
输入用户名和密码后,推送镜像:
docker push your.harbor.domain/library/your-springboot-app:latest
四、在K8s中部署SpringBoot应用
4.1 创建K8s Deployment
创建deployment.yaml文件:
apiVersion: apps/v1
kind: Deployment
metadata:
name: your-springboot-app
spec:
replicas: 3
selector:
matchLabels:
app: your-springboot-app
template:
metadata:
labels:
app: your-springboot-app
spec:
containers:
- name: your-springboot-app
image: your.harbor.domain/library/your-springboot-app:latest
ports:
- containerPort: 8080
4.2 创建K8s Service
创建service.yaml文件:
apiVersion: v1
kind: Service
metadata:
name: your-springboot-app
spec:
selector:
app: your-springboot-app
ports:
- protocol: TCP
port: 80
targetPort: 8080
type: LoadBalancer # 或NodePort,根据需求选择
4.3 应用K8s配置
执行以下命令应用配置:
kubectl apply -f deployment.yaml
kubectl apply -f service.yaml
4.4 验证部署
查看Deployment和Pod状态:
kubectl get deployments
kubectl get pods
查看Service的外部访问地址(如果是LoadBalancer类型):
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应用。