Harbor 是一个开源的、符合企业级标准的容器镜像仓库,用于存储、签名和扫描 Docker 镜像。它由 VMware(现为 VMware by Broadcom)开发并贡献给云原生计算基金会(CNCF)。
Harbor 的核心功能:
-
镜像存储与管理:
- 提供集中化的镜像仓库,支持多项目、多租户管理。
- 支持 Docker 和 OCI(Open Container Initiative)镜像。
-
基于角色的访问控制 (RBAC):
- 可以为用户或用户组分配不同的权限(如读取、推送、管理等),确保镜像访问的安全性。
-
镜像漏洞扫描:
- 集成 Clair、Trivy 等开源扫描器,自动扫描镜像中的安全漏洞,并提供风险等级报告。
-
镜像签名与内容信任:
- 支持使用 Notary 实现镜像签名,确保镜像的来源可信,防止被篡改。
-
镜像复制(同步):
- 支持在多个 Harbor 实例之间或与其他镜像仓库(如 Docker Hub、Azure Container Registry 等)之间复制镜像,适用于多数据中心、混合云或灾备场景。
-
图形化用户界面 (Web UI):
- 提供直观的 Web 界面,方便用户管理项目、镜像、用户和策略。
-
AD/LDAP 集成:
- 支持与企业现有的 LDAP 或 Active Directory 集成,实现统一身份认证。
-
审计日志:
- 记录所有用户操作,便于审计和问题排查。
-
Helm Chart 仓库:
- 支持存储和管理 Helm Charts(Kubernetes 应用包),实现应用部署的模板化。
-
策略管理:
- 支持设置镜像保留策略、复制策略、自动扫描策略等。
Harbor 的典型应用场景:
- 企业私有镜像仓库:替代公开的 Docker Hub,用于存储企业内部开发的应用镜像,保障代码和数据安全。
- CI/CD 集成:与 Jenkins、GitLab CI、Tekton 等持续集成/持续部署工具集成,实现自动化构建、推送和部署。
- 多环境镜像分发:通过镜像复制功能,将开发环境构建的镜像同步到测试、预生产、生产等环境。
- 安全合规:通过漏洞扫描和镜像签名,满足企业安全审计和合规要求。
一、安装系统依赖
1. 更新软件包列表并安装基础工具
sudo apt update
sudo apt install -y ca-certificates curl gnupg lsb-release
2. 安装 Docker 使用shell脚本自动安装
#!/bin/bash
# Ubuntu 系统全自动安装 Docker 脚本
# 支持 Ubuntu 20.04/22.04/24.04
# 作者:LoneEon
set -e # 遇到错误立即退出
echo "🚀 开始安装 Docker 环境..."
# 检查是否为 root 用户,避免权限问题
if [ "$(id -u)" -ne 0 ]; then
echo "❌ 请使用 root 用户运行此脚本,或使用 sudo 执行。"
exit 1
fi
# 获取当前登录用户名(用于加入 docker 组)
CURRENT_USER=$(logname 2>/dev/null || echo $SUDO_USER)
if [ -z "$CURRENT_USER" ] || [ "$CURRENT_USER" = "root" ]; then
echo "⚠️ 当前为 root 用户,建议切换为普通用户后运行脚本。"
echo "💡 若继续,请确保后续手动将用户加入 docker 组。"
read -p "是否继续?[y/N]: " -n 1 -r
echo
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
exit 1
fi
CURRENT_USER="root"
fi
# 1. 安装依赖
echo "🔧 安装依赖包..."
apt update -qq > /dev/null
apt install -y apt-transport-https ca-certificates gnupg software-properties-common > /dev/null
# 2. 添加阿里云 GPG 密钥
echo "🔐 添加阿里云 GPG 密钥..."
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# 3. 添加阿里云 Docker 仓库
echo "📦 配置阿里云 Docker 仓库..."
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu \
$(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
# 4. 安装 Docker
echo "📥 安装 Docker 引擎..."
apt update -qq > /dev/null
apt install -y docker-ce docker-ce-cli containerd.io > /dev/null
# 5. 创建 daemon.json 配置文件
echo "⚙️ 配置国内镜像加速与日志策略..."
cat > /etc/docker/daemon.json << 'EOF'
{
"registry-mirrors": [
"https://docker.1ms.run",
"https://docker.xuanyuan.me",
"https://registry.docker-cn.com",
"https://docker.mirrors.ustc.edu.cn",
"https://hub-mirror.c.163.com",
"https://mirror.baidubce.com"
],
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
},
"storage-driver": "overlay2",
"dns": ["8.8.8.8", "8.8.4.4"]
}
EOF
# 6. 创建 docker 用户组并添加当前用户
echo "👥 配置用户组,实现免 sudo 使用 Docker..."
groupadd -f docker
usermod -aG docker "$CURRENT_USER"
# 7. 启动并启用 Docker 服务
echo "🔄 启动并设置开机自启 Docker 服务..."
sudo systemctl daemon-reload
sudo systemctl enable docker --now > /dev/null
sudo systemctl restart docker
# 8. 验证安装
echo "✅ 验证 Docker 安装..."
if ! docker --version; then
echo "❌ Docker 安装失败,请检查日志。"
exit 1
fi
# 运行 hello-world 测试
echo "🧪 运行测试容器 hello-world..."
docker run --rm hello-world > /dev/null 2>&1 && echo "🎉 Docker 安装成功!" || {
echo "⚠️ hello-world 测试失败,但 Docker 可能已安装,请检查网络或镜像源。"
}
# 提示用户重新登录以应用组权限
echo
echo "--------------------------------------------------"
echo "✅ Docker 安装完成!"
echo "📌 当前用户 '$CURRENT_USER' 已加入 docker 组。"
echo "💡 请退出终端并重新登录,或执行:"
echo " newgrp docker"
echo " 或重新登录系统以使用 'docker' 命令无需 sudo。"
echo "--------------------------------------------------"
3. 验证 Docker 安装
docker --version
docker compose version
docker run hello-world

二、下载并安装 Harbor
1. 下载 Harbor 安装包
访问 Harbor GitHub Releases 页面
sudo wget https://ghproxy.cn/https://github.com/goharbor/harbor/releases/download/v2.11.0/harbor-offline-installer-v2.11.0.tgz
sudo tar xvf harbor-offline-installer-v2.11.0.tgz -C /usr/local/
cd /usr/local/harbor
2. 配置 Harbor (harbor.yml
)
复制示例配置文件并进行编辑:
sudo cp harbor.yml.tmpl harbor.yml
sudo vim harbor.yml
3. 关键配置项修改:
hostname: 设置 Harbor 的访问地址
hostname: harbor.xxx.com
https: 如果使用 HTTPS(强烈推荐生产环境使用),取消注释并配置证书。如果仅在内网使用 HTTP,注释掉HTTPS,需确保 Docker 客户端配置为信任 HTTP。
# https:
# port: 443
# certificate: /your/cert/path/harbor.crt
# private_key: /your/cert/path/harbor.key
可使用 Let's Encrypt 免费证书或自签名证书。
http: 如果使用 HTTP(仅限测试环境),确保端口正确。
http:
port: 80
harbor_admin_password: 设置管理员 admin
的初始密码。
harbor_admin_password: xxx.com # 设置管理员 admin 的初始密码。
- database: 通常使用内置数据库即可。
- data_volume: 设置 Harbor 数据存储路径(默认
/data
)。 - log: 配置日志级别和存储。
4. 安装 Harbor
sudo ./prepare
sudo ./install.sh
- 脚本会检查依赖、生成配置、启动 Docker Compose 服务。
- 安装成功后,会显示访问地址和初始登录信息。
5. 验证安装
- 在浏览器中访问
http://harbor.xxx.com
或https://harbor.xxx.com
。 - 使用用户名
admin
和harbor.yml
中设置的密码登录(xxx.com)。 - 登录后,将看到 Harbor 的 Web 管理界面。
三、常用操作
-
项目管理 (Projects)
- 创建项目: 在 Web 界面点击"+新建项目"。项目是镜像的逻辑分组。
- 项目类型:
- 公开 (Public): 任何用户(包括匿名用户)都可以拉取镜像。
- 私有 (Private): 只有项目成员或管理员可以拉取/推送。
- 添加成员: 在项目设置中,可以为项目添加用户并分配角色(访客、开发者、维护者、项目管理员)。
-
用户管理 (Users)
- 在"系统管理" -> "用户"中创建新用户。
- 用户可以被添加到不同的项目中。



-
推送 (Push) 镜像
-
在 Docker 客户端登录 Harbor:
docker login harbor.xxx.com # 或 IP
输入用户名和密码
-
-
给本地镜像打上 Harbor 仓库的标签:
格式: <harbor-host>/<project-name>/<image-name>:<tag>
docker tag nginx:latest harbor.xxx.com/library/nginx:latest
-
推送镜像到 Harbor:
docker push harbor.xxx.com/library/nginx:latest
-
在 Harbor Web 界面中,进入对应项目,即可看到已推送的镜像。
拉取 (Pull) 镜像
# 确保已登录(如果项目是私有的)
docker login harbor.xxx.com
# 拉取镜像
docker pull harbor.xxx.com/library/nginx:latest
管理 Harbor 服务
-
启动/停止/重启:
cd /usr/local/harbor
sudo docker compose start
sudo docker compose stop
sudo docker compose restart
查看服务状态:
sudo docker compose ps
查看日志:
sudo docker compose logs [service-name] # 如 harbor-core, registry
-
备份与恢复
- 备份: 主要备份
/data
目录(包含数据库、镜像、配置等)和harbor.yml
文件。 - 恢复: 停止 Harbor 服务,替换
/data
目录和harbor.yml
文件,然后重新安装 (./install.sh
)。
- 备份: 主要备份
四、优化 Docker - 默认使用 Harbor
方法一:配置 Docker Registry Mirror (拉取优化 - 推荐)
编辑 Docker 守护进程配置文件:
sudo mkdir -p /etc/docker
sudo vim /etc/docker/daemon.json
添加 registry-mirrors
配置:
{
"registry-mirrors": ["https://harbor.xxx.com"]
}
没有域名可以在 /etc/hosts 中添加 IP harbor.xxx.com
- 注意: 如果 Harbor 使用 HTTP,URL 应为
http://harbor.example.com
。但使用 HTTP 需要额外信任配置。
重启 Docker 服务:
sudo systemctl daemon-reload
sudo systemctl restart docker
通过将 Harbor 深度集成到您的开发与运维流程中,并利用 Docker 镜像加速和规范化的推送/拉取实践,已经为构建一个更快速、更稳定、更安全的容器化应用环境奠定了坚实的基础。持续的维护、监控和安全实践将确保这一平台长期稳定运行,成为您团队 DevOps 旅程中不可或缺的得力伙伴。现在,尽情享受私有化、可控化容器镜像管理带来的便利吧!