Docker——3.Harbor 核心架构与原理详解
Harbor 核心架构与原理详解Harbor 是一个企业级的私有容器镜像仓库采用微服务架构。所有组件均以容器方式运行并由docker-compose进行统一编排。核心组件分层Harbor 的架构主要分为四层各司其职1.接入层harbor-nginx系统的反向代理入口。它统一处理所有 HTTP/HTTPS 请求转发给后端服务并负责静态资源管理和上传限制。2.业务层harbor-portalWeb 前端界面提供可视化的运维和管理功能。harbor-core核心业务逻辑处理中心负责用户/项目管理、权限控制、元数据维护等。harbor-jobservice任务调度服务处理镜像同步、漏洞扫描、垃圾回收等异步任务。3.存储层harbor-registry原生 Docker Registry负责镜像文件的实际存储和推拉交互。harbor-registryctlRegistry 的控制器管理镜像生命周期操作如删除、垃圾回收。harbor-postgresqlPostgreSQL 数据库持久化存储用户、项目、权限、镜像标签等所有元数据。harbor-redisRedis 缓存用于缓存会话和热点数据提升系统响应速度。4.安全扩展层harbor-trivy集成的漏洞扫描器用于检测镜像中的操作系统包和应用依赖漏洞。核心交互流程以镜像推送为例当用户执行docker push命令时请求的完整链路如下docker push→nginx接收请求 →core进行鉴权校验 → 转发给registry→registry将镜像文件写入存储 →core更新数据库中的元数据 → 记录操作审计日志。Harbor 部署全流程准备依赖包docker-compose-linux-x86_64harbor-offline-installer-v2.11.0.tgz存放在/root目录即可下载地址https://download.csdn.net/download/qq_44769717/931942091. 安装 Docker Compose# 移动二进制文件到系统路径mv-v/root/docker-compose-linux-x86_64 /usr/local/bin/docker-compose# 赋予执行权限chmod700 /usr/local/bin/docker-compose# 验证安装版本docker-compose--version2. 安装 Harbor# 解压离线安装包tar-xvzfharbor-offline-installer-v2.11.0.tgz# 进入 Harbor 目录cdharbor# 复制配置文件模板cp-avharbor.yml.tmpl harbor.yml3. 配置 Harbor (使用 sed)使用sed命令来自动化修改harbor.yml配置文件以符合你的要求。# 编辑harbor.ymlvim/root/harbor/harbor.yml# 1. 修改主机名 (hostname) 为自己的 IP# 修改第5行hostnamehostname:192.168.2.123# 2. 注释掉 HTTPS 相关配置 (从 https: 行开始到 strong_ssl_ciphers: false 行结束)# 修改注释第13行、15行、17行、18行修改如下:13# https:14# https port for harbor, default is 44315# port: 44316# The path of cert and key files for nginx17# certificate: /your/certificate/path18# private_key: /your/private/key/path19# enable strong ssl ciphers (default: false)20# strong_ssl_ciphers: false# 3. 修改管理员密码# 修改第47行的管理员密码用户登录harborharbor_admin_password: lengmoxi# 4. 修改数据卷路径3修改第66行的data_volum指定数据卷的路径 data_volume: /data/harbor# 5.查看是否修改成功grep-n-Ehostname:|harbor_admin_password:|data_volume:harbor.yml|grep-vendpointsed-n13p;15p;17p;18pharbor.yml4. 初始化与安装# 文件初始化生成 docker-compose.yml 等文件./prepare# 出现Successfully called func: create_root_cert 则成功# 一键安装./install.sh# 出现✔ ----Harbor has been installed and started successfully.---- 则成功# 查看组件状态确认所有服务都已启动docker-composeps5. 配置 Docker 客户端为了让 Docker 客户端能够与你的 Harbor 仓库通信需要进行以下配置。# 添加 Harbor 地址到 Docker 的不安全仓库列表cat/etc/docker/daemon.jsonEOF { registry-mirrors: [ https://672tq9h17eavbw.xuanyuan.run, https://672tq9h17eavbw.xuanyuan.dev ], insecure-registries: [http://192.168.2.123] } EOFcat/etc/docker/daemon.json# 重新加载配置并重启 Docker 服务systemctl daemon-reload systemctl restartdockerimage.pngpos_idimg-yjcpREyJ-1785229964188)6. 部署后测试# 先重启docker-composedocker-composerestart# 1. 登录 Harbor (先登录才能推送)dockerlogin http://192.168.2.123# 用户名: admin# 密码: lengmoxi(在harbor.yml中修改密码)# 出现Login Succeeded 则成功# 2. 拉取一个测试镜像dockerpull centos:7# 3. 上传前需要为镜像打标签dockertag centos:7192.168.2.123/library/centos:v1.0# 4. 上传镜像到 Harbordockerpush192.168.2.123/library/centos:v1.0# 不报错有上传的进度条则成功# 5. 删除本地镜像从harbor上进行拉取# 先删除本地镜像dockerrmi192.168.2.123/library/centos:v1.0# 再重新拉取dockerpull192.168.2.123/library/centos:v1.07. 在网页中查看# 浏览器访问 http://192.168.2.123 # 用户名: admin # 密码: lengmoxi(在harbor.yml中修改密码)高级配置与实操1. 打开 Harbor 的扫描功能此功能由harbor-trivy组件提供在标准安装后默认启用。可以在 Harbor 的 Web 界面中进入一个项目点击“扫描”按钮来对镜像进行漏洞扫描。# 停止当前 Harbor docker-compose down #重新安装并启用 Trivy ./install.sh --with-trivy # 进入页面进行扫描 http://192.168.2.123 # 用户名: admin # 密码: lengmoxi(在harbor.yml中修改密码)扫描2. 新建仓库在 Harbor 的 Web 界面中操作点击“新建项目”。创建名为base-images的项目用于存放基础镜像如 CentOS, Ubuntu。再次点击“新建项目”。创建名为app-images的项目用于存放应用镜像。创建完成测试登录 Harbor在执行推送前必须使用管理员账号登录到本地 Docker 客户端。dockerlogin http://192.168.2.123# 用户名: admin# 密码: lengmoxi (根据你之前的配置)注意如果提示Error response from daemon请确保/etc/docker/daemon.json中已正确添加了insecure-registries: [http://192.168.2.123]并重启了 Docker (systemctl restart docker)。准备测试镜像我们需要拉取一个基础镜像并将其标签修改为符合 Harbor 项目规范的格式。Harbor 的镜像命名规则通常为IP地址/项目名称/镜像名:版本。测试基础镜像 (base-images)我们将centos:7推送到刚才创建的base-images项目中。# 1. 打标签 (Tagging)# 格式: Harbor IP/项目名/镜像名:版本号dockertag centos:7192.168.2.123/base-images/centos:v1.0# 2. 推送镜像dockerpush192.168.2.123/base-images/centos:v1.0测试应用镜像 (app-images)为了区分测试找一个简单的应用镜像如 Nginx推送到app-images项目。# 1. 拉取 Nginx 镜像dockerpull nginx:latest# 2. 打标签dockertag nginx:latest192.168.2.123/app-images/nginx:v1.0# 3. 推送镜像dockerpush192.168.2.123/app-images/nginx:v1.0验证结果命令行反馈如果看到类似v1.0: digest: sha256:xxx size: xxx的输出说明推送成功。Web 界面验证刷新浏览器中的 Harbor 页面点击左侧的base-images和app-images项目你应该能看到刚才上传的镜像列表。3. 设置 SSL 证书使用 HTTPS 连接前提准备需要准备好 SSL 证书文件.crt和私钥文件.key。假设它们位于/data/cert/目录下文件名为server.crt和server.key。要准备 SSL 证书文件.crt和私钥文件.key你需要使用 OpenSSL 工具生成自签名证书。以下是完整的操作步骤适用于你的 Harbor 服务器 IP192.168.2.123第一步创建证书存放目录mkdir-pv/data/certcd/data/cert第二步生成 CA 私钥openssl genrsa-outca.key4096第三步生成 CA 证书openssl req-x509-new-nodes-sha512-days3650\-subj/CCN/STShanxi/LDatong/OMyCompany/OUIT/CN192.168.2.123\-keyca.key\-outca.crt第四步生成服务器私钥openssl genrsa-outserver.key4096第五步生成服务器证书签名请求CSRopenssl req-sha512-new\-subj/CCN/STShanxi/LDatong/OMyCompany/OUIT/CN192.168.2.123\-keyserver.key\-outserver.csr第六步生成服务器证书.crtopenssl x509-req-sha512-days3650\-extfile(printfsubjectAltNameDNS:192.168.2.123,IP:192.168.2.123)\-CAca.crt-CAkeyca.key-CAcreateserial\-inserver.csr\-outserver.crt第七步验证生成的文件ls-l/data/cert/# 应该看到以下文件# ca.crt ca.key server.crt server.key server.csr第八步验证生成的文件修改harbor.yml配置文件# 编辑文件harbor.ymlvimharbor.yml# 1. 启用 HTTPS 模块# 需要把 harbor.yml 里关于 HTTPS 的注释符号 # 去掉。# 第14行启用 https:# 第15行启用 port: 443# 第17行启用 certificate 路径# 第18行启用 private_key 路径整体如下13https:14# https port for harbor, default is 44315port:44316# The path of cert and key files for nginx17certificate: /data/cert/server.crt18private_key: /data/cert/server.key19# enable strong ssl ciphers (default: false)20# strong_ssl_ciphers: false# 2.修改证书路径# 修改 certificate 路径 修改为自己的/data/cert/server.crt# 修改 private_key 路径 修改为自己的/data/cert/server.key# 3.添加 ssl_cert 配置# 在第19行就是 private_key 行之后插入 ssl_cert 配置ssl_cert: /data/cert/server.crt 整体配置如下:13https:14# https port for harbor, default is 44315port:44316# The path of cert and key files for nginx17certificate: /data/cert/server.crt18private_key: /data/cert/server.key19ssl_cert: /data/cert/server.crt20# enable strong ssl ciphers (default: false)21# strong_ssl_ciphers: false# 4.注释80端口# 注释第8行和第10行整体配置如下:8# http:9# port for http, default is 80. If https enabled, this port will redirect to https port10# port: 80# 5. 验证并启动grep-n-E^[0-9]*https:|^[0-9]* port:|^[0-9]* certificate:|^[0-9]* private_key:|^[0-9]* ssl_cert:|^[0-9]*# http:|^[0-9]* # port: 80harbor.yml注意 第 19 行 ssl_cert 必须存在并且它前面的空格数要和 certificate、private_key 保持一致。重新部署 Harbor# 停止并移除现有容器docker-composedown-v# 重新准备配置文件./prepare# 重新启动服务docker-composeup-d配置 Docker 客户端信任证书为了让 Docker 客户端信任你的自签名或私有 CA 签发的证书需要将.crt文件复制到 Docker 的证书目录。# 创建证书目录mkdir-p/etc/docker/certs.d/192.168.2.123# 复制证书文件 (假设证书在 /data/cert/server.crt)cp-av/data/cert/server.crt /etc/docker/certs.d/192.168.2.123/ca.crt# 重启 Docker 服务systemctl restartdocker4. 测试完成 HTTPS 配置后使用新的地址进行测试。# 重启docker-composedocker-composestart# 1. 登出dockerlogouthttp://192.168.2.123# 2. 使用 HTTPS 地址登录dockerlogin https://192.168.2.123# 3. 为新项目打标签并推送dockertag centos:7192.168.2.123/base-images/centos:v1.0dockerpush192.168.2.123/base-images/centos:v1.0总结本次操作完成了 Harbor 私有镜像仓库的从零到一部署与进阶配置。原理掌握深入理解了 Harbor 基于微服务的四层架构接入、业务、存储、安全及其核心组件Nginx, Core, Registry, PostgreSQL 等的协同工作原理。部署实践成功安装了 Docker Compose 和 Harbor并通过sed命令高效地完成了harbor.yml的自动化配置包括主机名、密码、数据卷等。功能验证通过推送centos:7镜像验证了 Harbor 的基本推拉功能正常。完成确认了漏洞扫描功能已集成。创建了base-images和app-images两个项目以实现镜像分类管理。完成了从 HTTP 到 HTTPS 的升级通过配置 SSL 证书增强了通信安全性并让 Docker 客户端信任了该证书。规划了用于梳理架构的思维导图。整个过程涵盖了从理论到实践再到安全加固的完整流程成功搭建了一个功能完备、安全可靠的私有镜像仓库。