Ubuntu 部署 Harbor 构建企业级私有镜像仓库

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.comhttps://harbor.xxx.com
  • 使用用户名 adminharbor.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 旅程中不可或缺的得力伙伴。现在,尽情享受私有化、可控化容器镜像管理带来的便利吧!

相关推荐
胡斌附体3 小时前
docker离线部署gpt-oss-20b流程,从下载到安装再到可以使用
gpt·docker·容器·大模型·部署·记录·离线
wodongx1233 小时前
从零开始部署Android环境的Jenkins CI/CD流水线(docker环境,Win系统)
android·docker·jenkins
用户31187945592183 小时前
如何在CentOS 7上安装bzip2-1.0.6-13.el7.x86_64.rpm RPM包(详细步骤)
linux
泡沫冰@3 小时前
shell编程:sed - 流编辑器(2)
linux
Kusunoki_D3 小时前
Linux to go Ubuntu 22.04 不匹配无线网卡 MT7925 的解决方法
linux·ubuntu
oLingXi123 小时前
Unity开发CI/CD工具Jenkins的安装(Windows10)
运维·unity·ci/cd·jenkins
egoist20233 小时前
[linux仓库]解剖ELF:从文件头到进程地址空间的完美映射
linux·elf·虚拟地址空间·静态链接
忘梓.3 小时前
Linux的写作日记:Linux基础开发工具(二):vim编辑器
linux·编辑器·vim
X1A0RAN3 小时前
在Unix/Linux中bash/sh/source以及./执行脚本的区别
linux·bash·unix