前言
Harbor是企业级Docker私有镜像仓库,其底层基于Docker容器引擎与Docker Compose多容器编排,在官方原生Registry的基础上,补充了UI管理、权限控制、安全加密等企业级增强功能,是企业容器化部署中镜像存储、管理的核心工具。
一、核心定位
Harbor 本质 是 企业级 Docker 私有镜像仓库,底层是:Docker Registry(官方原生仓库)+ 一堆增强组件 + Docker Compose 编排 ,官方原生 registry 只有存镜像、拉推镜像裸功能,没界面、没权限、没日志、没漏洞扫描,Harbor 就是给原生 Registry 套了一层企业级管理壳
二、Harbor 底层架构核心组件
整个 Harbor 全部跑在 Docker 容器里,用 docker compose 统一管理启停。
Registry(底层存储核心)真正存镜像层文件的组件,就是官方原版
registry。所有你 push /pull 的镜像,最终都存在它这里,磁盘落地到服务器data_volume目录。UI Portal(前端页面)网页控制台,你登录、建项目、管理镜像、看日志,都是访问这个前端。
Core(核心服务)Harbor 大脑,负责权限校验、项目管理、角色控制、转发请求。你网页操作、docker 登录鉴权,全由它调度。
Database(数据库)默认用 PostgreSQL,存:账号密码、项目权限、镜像元数据、日志、配置信息 (不存镜像二进制,只存信息)。
Redis做缓存、会话存储、任务队列,提速页面和接口响应。
Nginx(反向代理入口)统一入口,承接 80/443 端口,把请求转发给 UI、Core、Registry;同时承载 HTTPS 证书、路由分发。
Notary、Trivy(可选)镜像签名、漏洞扫描,安全增强组件,底层也是独立容器。
三,搭建 Harbor 底层逻辑
1. 先打底:装 Docker + Docker Compose
Harbor 不裸装系统,全部容器化运行,必须依赖 Docker 做容器引擎,Compose 做多容器编排(一次性启动所有组件容器)
相当于先租场地、配齐基础水电 + 请大管家,Harbor 不单独裸装在系统上,所有组件必须住 Docker 的房间里;Compose 就是总管家,能一次性把所有岗位人员全部安排上岗
2. 离线包本质是什么?
下载的 harbor-offline.tgz:
里面打包了所有 Harbor 组件的镜像压缩包
解压后是配置文件、安装脚本、模板配置
就是一整套快递园装修材料 + 所有工作人员打包压缩包:里面预装了所有组件的程序安装包、配置模板、一键开工脚本,不用现场再到处找人找材料
3. 配置 harbor.yml 底层逻辑
你改的几个关键配置,背后作用:
hostname:整个仓库访问域名 / IP,Nginx、证书、Docker 客户端都要跟它对齐
类似给快递园定唯一门牌地址,大门、通行证、访客都必须认这个地址
https 证书:Nginx 挂载证书,实现 HTTPS 加密访问
相当于给大门办合法安全通行证,保证来往通信不被偷看、不被篡改
harbor_admin_password:写入数据库的默认管理员密码
给最高管理员设门卫钥匙,记进花名册
data_volume:指定镜像持久化存储目录,容器删了镜像文件还在宿主机磁盘
划定专属库房固定区域,就算拆了临时办公室,库房里的包裹还在,不会丢
4. 执行 install.sh 干了什么底层事?
导入离线包里所有 Harbor 镜像到本地 Docker
根据
harbor.yml自动生成docker-compose.yml编排文件自动创建网络、挂载目录、启动所有组件容器
初始化数据库、创建 admin 账号、初始化项目
就比如一键开工装修 + 全员到岗:导入所有工作人员程序、根据你定的规矩自动生成管理制度、建好内部通道、分配好办公库房场地、一次性全员上岗,同时建好花名册、创建超级管理员、预留公共储物区。
5. 开机自启 systemd 底层逻辑
只是封装了:开机自动执行 docker compose up -d依赖 docker 服务先启动,再拉起 Harbor 所有容器。
四、Docker 拉 / 推镜像 底层流程
你执行
docker login 仓库IPDocker 先连 Harbor Nginx 443 端口
Nginx 转发给 Core 服务做账号密码鉴权
鉴权通过后,push 镜像 → 最终落到 Registry 存储
元数据(镜像名、版本)写入 PostgreSQL
五、学习重点
首先我们要知道Harbor是容器化部署,所有组件如 Registry、UI、数据库等,都跑在Docker容器中,对CPU、内存要求高于普通服务,如镜像拉推、存储需消耗资源。
像80(HTTP)、443(HTTPS)是Harbor的核心访问端口:Nginx作为反向代理,统一承接这两个端口的请求,必须确保端口放行,就比如防火墙需开放,云服务器需配置安全组
磁盘建议用SSD:镜像由多个层组成,拉推时需要频繁读写磁盘,SSD能大幅提升速度,避免卡顿
六、搭建步骤
第一步:安装Docker + Docker Compose
这一步我们需要安装Docker、Docker compose 以及设置开机启自起
首先,我们要明白Harbor的所有组件(Registry、UI、Core等)都以Docker容器形式运行,Docker是 容器引擎 ,负责创建、运行、管理容器,是搭建Harbor的基础,没有Docker,Harbor无法启动
其次Harbor包含多个独立组件(10+容器),单独启动每个容器繁琐且易出错,Compose(v2插件版)用于 多容器编排,可以通过一个配置文件,一次性启动、停止所有Harbor组件,简化部署
至于开机自启的意义是Docker服务必须先于Harbor启动,设置Docker开机自启,避免后续Harbor开机自启时因Docker未启动而失败
执行命令
# 1. 更新系统软件源,确保获取最新的软件包列表(避免安装旧版本)
sudo apt update
# 安装依赖包,用于后续添加Docker官方源(ca-certificates保证证书验证,curl用于下载文件)
sudo apt install -y ca-certificates curl gnupg lsb-release
# 2. 导入Docker官方GPG密钥(验证Docker软件包的合法性,防止恶意软件)
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# 3. 添加Docker官方软件源(告诉系统从哪里下载Docker,避免用Ubuntu默认的旧版本)
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 4. 安装Docker核心组件和Compose插件(核心操作)
sudo apt update # 再次更新源,确保加载Docker官方源
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
# 5. 启动Docker服务,并设置开机自启(确保系统重启后Docker能自动运行,为Harbor提供容器引擎)
sudo systemctl start docker
sudo systemctl enable docker
# 6. 验证安装是否成功(检查版本,确认服务正常)
docker --version
docker compose version执行结果

在执行
sudo apt update时,若出现以下错误
这是典型的 Docker APT 源公钥缺失 问题:APT 无法验证 Docker 软件源的签名,因为系统缺少对应的公钥,为了安全默认禁用了该源,使用的版本本身兼容 Docker 源,问题根源是公钥未正确导入。
我们只需要把2.重新导入Docker官方GPG密钥 和 3. Docker 软件源,然后再次更新就好了

如果出现docker-compose-plugin 与 docker-compose-v2冲突
是因为系统里已经安装了 docker-compose-v2 包,它已经占用了/usr/libexec/docker/cli-plugins/docker-compose这个路径,而 docker-compose-plugin 安装时会尝试覆盖同一个文件,导致冲突

# 1.卸载冲突旧包
sudo apt remove -y docker-compose-v2
sudo apt autoremove -y
# 2. 清理缓存
sudo apt clean
sudo apt update
# 3. 重新安装
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin第二步:下载 Harbor 离线包
这一步是为了获取Harbor的组件
首先离线包 vs 在线包:离线包(offline)已打包所有 Harbor 组件的镜像文件,无需在线拉取(适合内网、网络差的环境);在线包(online)仅含配置和脚本,需在线下载所有镜像,速度慢且依赖网络。
其次解压目录选择:/opt 目录是 Linux 标准的 可选软件目录,权限统一,后续配置 Harbor 时,挂载目录、权限管理更方便,不建议解压到其他目录(如 /home)。
而且离线包的内容:解压后包含 harbor.yml.tmpl(配置模板)、install.sh(安装脚本)、LICENSE(许可证)等,核心是 离线镜像压缩包 ,后续安装脚本会自动导入这些镜像到本地 Docker
执行命令
# 1. 访问Harbor官网 Releases 页面,查看最新稳定版(推荐选择offline离线包,无需在线拉取镜像)
# 官网地址:https://github.com/goharbor/harbor/releases
# 本文以 v2.12.2 离线包为例,下载命令(约1.2G,根据网络速度调整)
sudo wget https://github.com/goharbor/harbor/releases/download/v2.14.3/harbor-offline-installer-v2.14.3.tgz
# 2. 解压离线包到 /opt 目录(/opt是Linux系统常用的第三方软件安装目录,便于管理)
sudo tar zxf harbor-offline-installer-v2.14.3.tgz -C /opt
# 3. 进入Harbor安装目录(后续所有配置、安装操作都在此目录执行)
cd /opt/harbor执行结果

第三步:配置 HTTPS自签名证书
我们需要知道为什么要做HTTPS,其次需要去了解自签名证书的逻辑、关键禁忌以及证书文件作用
首先Docker 客户端(拉 / 推镜像)默认要求仓库使用 HTTPS(HTTP 需额外配置信任),HTTPS 通过证书加密通信,防止镜像被篡改、请求被拦截,是企业级仓库的必备配置。
其次没有第三方 CA 如阿里云、Let's Encrypt 颁发的证书时,自己生成 CA 证书,再用 CA 证书给 Harbor 服务器证书签名,本质是 自己信任自己 ,适合测试、内网环境也就是自产环境建议用第三方 CA 证书,这就是自签的逻辑
在这个期间的关键逻辑CA 证书、Harbor 证书的 CN(Common Name)必须和后续配置的 harbor.yml 中的 hostname 完全一致(比如 hostname 是 192.168.1.100,CN 就填 192.168.1.100),否则证书无效,Docker 客户端无法信任
证书文件作用就ca.key(CA 私钥)、ca.crt(CA 证书,用于客户端信任)、harbor.key(Harbor 私钥)、harbor.crt(Harbor 服务器证书,用于 HTTPS 通信)
证书这一块具体可看
此次执行命令
# 1. 创建证书存储目录
sudo mkdir -p /opt/harbor/key
cd /opt/harbor/key
# 2. 生成CA私钥(加sudo避免Permission denied)
sudo openssl genrsa -out ca.key 4096
# 3. 生成CA证书(有效期10年,按提示填写信息,Common Name填服务器IP/域名)
sudo openssl req -x509 -new -nodes -key ca.key -sha256 -days 3650 -out ca.crt
# 交互填写时:
# Country Name: CN
# State or Province Name: 直接回车留空
# Locality Name: chongqing(或自定义)
# Organization Name: yxwa(或自定义)
# Organizational Unit Name: 直接回车留空
# Common Name: 你的服务器IP,必须填对!
# Email Address: 直接回车留空
# 4. 生成服务器私钥
sudo openssl genrsa -out server.key 4096
# 5. 生成服务器证书签名请求(CSR)
sudo openssl req -new -key server.key -out server.csr
# 6. 生成服务器证书(需先创建extfile配置文件,替换为你的服务器IP/域名)
cat > server.ext << EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth, clientAuth
subjectAltName = @alt_names
[alt_names]
DNS.1=harbor.yourdomain.com
IP.1=192.168.1.100 # 替换为你的服务器IP
EOF
sudo openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt -days 3650 -sha256 -extfile server.ext
# 7. 验证证书文件
ls /opt/harbor/key执行结果

第四步:修改 Harbor 配置文件
此步骤重点
hostname 必须与证书地址一致,否则 Harbor 启动后无法正常访问。
data_volume 是镜像存储目录,必须在 SSD 磁盘上,保障拉推速度。
管理员密码需自定义,避免弱密码带来的安全风险。
执行命令
cd /opt/harbor
# 拷贝
sudo cp harbor.yml.tmpl harbor.yml
# 编辑
sudo vim harbor.yml修改以下关键配置:
# 1. 服务器IP(必须与证书Common Name和subjectAltName一致)
hostname: 172.16.11.50 # 替换为你的服务器IP
# 2. HTTPS配置(开启并指定证书路径)
https:
port: 443
certificate: /opt/harbor/key/server.crt
private_key: /opt/harbor/key/server.key
# 3. 管理员初始密码(自定义,避免使用默认密码)
harbor_admin_password: Harbor123456 # 建议改成自定义强密码
# 4. 数据存储路径(保持默认/opt/harbor/data,确保在SSD磁盘上)
data_volume: /opt/harbor/data第五步:安装并启动 Harbor
学习重点
install.sh 会自动拉取 Harbor 镜像、创建容器、配置网络,启动所有服务, 安装完成后,可通过 docker compose ps 查看所有容器状态,确保均为 Up 状态
执行命令
cd /opt/harbor
# 启动
sudo ./install.sh结果图

第六步:配置开机自启
执行命令
sudo nano /etc/systemd/system/harbor.service写入以下内容:
[Unit]
Description=Harbor Container Registry
After=docker.service
Requires=docker.service
[Service]
Type=oneshot
RemainAfterExit=yes
WorkingDirectory=/opt/harbor
ExecStart=/usr/bin/docker compose up -d
ExecStop=/usr/bin/docker compose down
[Install]
WantedBy=multi-user.target执行以下命令生效:
sudo systemctl daemon-reload
sudo systemctl enable harbor
sudo systemctl start harborsystemd 服务可确保服务器重启后 Harbor 自动启动,无需手动执行命令。 WorkingDirectory 必须指定为 /opt/harbor,否则 docker compose 无法找到配置文件
第七步:对Habor进行验证
浏览器访问ip进行验证

一般Harbor默认用户名是admin
如果忘记密码,在终端执行命令
# 进入Harbor所在文件目录下
cd /opt/harbor
# 过滤密码
grep harbor_admin_password harbor.yml登录后界面是这样

第七步:日常维护
底层基座:Docker + Docker Compose 是 Harbor 的运行基础,所有组件均以容器形式部署,在性能关键:必须使用 SSD 磁盘存储镜像,避免拉推卡顿;证书配置必须与访问 IP(172.16.11.50)一致,否则客户端无法连接, 安全要点:修改默认管理员密码、配置 HTTPS 加密通信、信任自签证书,维护要点:通过 docker compose 命令管理服务,查看日志排查问题,配置开机自启保障服务持续可用。
# 查看Harbor容器状态
cd /opt/harbor
docker compose ps
# 查看Harbor日志
docker compose logs -f harbor-core
# 重启Harbor服务
docker compose restart
# 停止Harbor服务
docker compose down
# 启动Harbor服务
docker compose up -d