企业级Docker镜像仓库Harbor部署实战

企业级Docker镜像仓库Harbor部署实战

    • 前言
    • [1. Harbor是什么?](#1. Harbor是什么?)
    • [2. 环境准备](#2. 环境准备)
      • [2.1 服务器规划](#2.1 服务器规划)
      • [2.2 服务端基础配置](#2.2 服务端基础配置)
    • [3. 服务端部署Harbor](#3. 服务端部署Harbor)
      • [3.1 安装Docker](#3.1 安装Docker)
      • [3.2 下载并解压Harbor离线安装包](#3.2 下载并解压Harbor离线安装包)
      • [3.3 修改Harbor配置文件](#3.3 修改Harbor配置文件)
      • [3.4 安装docker-compose](#3.4 安装docker-compose)
      • [3.5 执行安装](#3.5 执行安装)
      • [3.6 配置Hosts(可选)](#3.6 配置Hosts(可选))
    • [4. 客户端配置与镜像推送](#4. 客户端配置与镜像推送)
      • [4.1 客户端安装Docker](#4.1 客户端安装Docker)
      • [4.2 配置Docker非安全仓库](#4.2 配置Docker非安全仓库)
      • [4.3 登录Harbor](#4.3 登录Harbor)
      • [4.4 推送镜像测试](#4.4 推送镜像测试)
      • [4.5 Web界面验证](#4.5 Web界面验证)
    • [5. 踩坑与经验分享](#5. 踩坑与经验分享)
    • [6. 总结](#6. 总结)

前言

在容器化浪潮中,Docker镜像的管理成为企业落地Kubernetes、DevOps的基石。虽然Docker官方提供了Registry镜像,但缺乏权限控制、镜像同步、安全扫描等企业级特性。而Harbor的出现完美解决了这些问题------它不仅是一个私有镜像仓库,更是一个完整的镜像治理平台。本文基于Harbor v2.3.1,手把手带你完成从部署到使用的完整流程,并分享一些踩坑经验。

1. Harbor是什么?

Harbor是由VMware开源、现为CNCF孵化项目的企业级镜像仓库。它在原生的Docker Registry基础上增加了:

  • 图形化管理界面:通过Web UI轻松管理项目和镜像
  • 基于角色的访问控制:支持LDAP/AD集成
  • 镜像复制与同步:跨数据中心镜像分发
  • 漏洞扫描:与Clair/Trivy集成,确保镜像安全
  • Helm Chart管理:支持Kubernetes应用包存储

下图展示了Harbor的核心组件架构:

复制代码
+--------------------+
|   Harbor Web UI    |  <-- 浏览器操作
+--------------------+
|   API Server       |  <-- REST API,供CLI/UI调用
+--------------------+
|   Core Services    |  <-- 处理用户、项目、权限、镜像元数据
+--------------------+
|   Registry         |  <-- Docker Registry 核心存储镜像
+--------------------+
|   Database         |  <-- PostgreSQL,存储用户、项目、权限信息
+--------------------+
|   Job Service      |  <-- 后台任务,如复制、清理、扫描
+--------------------+

2. 环境准备

2.1 服务器规划

主机名 角色 IP地址 操作系统
hadoop108 Harbor服务端 192.168.2.108 CentOS 7.9
hadoop109 Docker客户端 192.168.2.109 CentOS 7.9

注意:Harbor对硬件有一定要求,建议至少2核4GB内存,磁盘空间根据镜像数量规划。

2.2 服务端基础配置

hadoop108上执行:

bash 复制代码
# 关闭防火墙(或开放所需端口)
systemctl stop firewalld
systemctl disable firewalld

# 关闭SELinux
setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config

# 安装必要工具
yum install -y yum-utils device-mapper-persistent-data lvm2

3. 服务端部署Harbor

3.1 安装Docker

Harbor依赖Docker环境,这里使用离线包安装Docker 20.10.5:

bash 复制代码
# 上传离线包 docker-20.10.5-install.tar.gz 到 /opt/software
tar -xzvf docker-20.10.5-install.tar.gz
cd docker-20.10.5-install/
sh install.sh
systemctl start docker
systemctl enable docker

3.2 下载并解压Harbor离线安装包

从官网或内网源获取harbor-offline-installer-v2.3.1.tgz,上传至/opt/software

bash 复制代码
tar -xvf harbor-offline-installer-v2.3.1.tgz -C /opt/module/
cd /opt/module/harbor

3.3 修改Harbor配置文件

复制模板并编辑:

bash 复制代码
cp harbor.yml.tmpl harbor.yml
vim harbor.yml

关键修改项:

yaml 复制代码
hostname: 192.168.2.108          # 改为本机IP或域名,不要用localhost
port: 80                          # HTTP端口,若用HTTPS需配置证书

# 管理员密码(默认Harbor12345,建议修改)
harbor_admin_password: YourStrongPassword

# 数据卷目录(可根据需求调整)
data_volume: /data/harbor

# 日志配置
log:
  level: info
  rotate_count: 50
  rotate_size: 200M
  location: /var/log/harbor

注意:如果宿主机80端口已被占用,可改为其他端口,但客户端登录时需指定端口。

3.4 安装docker-compose

Harbor依赖docker-compose来编排多容器:

bash 复制代码
yum install -y docker-compose

3.5 执行安装

bash 复制代码
./install.sh

安装过程会拉取镜像并启动所有服务,看到如下输出表示成功:

复制代码
✔ ----Harbor has been installed and started successfully.----

验证容器状态:

bash 复制代码
docker-compose ps

所有服务都应为Up状态。

3.6 配置Hosts(可选)

若希望使用域名访问Harbor,可在客户端机器/etc/hosts中添加:

复制代码
192.168.2.108 hadoop108

4. 客户端配置与镜像推送

4.1 客户端安装Docker

hadoop109上执行与服务端相同的Docker安装步骤。

4.2 配置Docker非安全仓库

由于Harbor使用HTTP协议(未配置HTTPS),Docker默认禁止推送镜像到非安全仓库。需要在客户端/etc/docker/daemon.json中添加:

json 复制代码
{
  "insecure-registries": ["192.168.2.108:80"],
  "registry-mirrors": ["https://你的加速器地址"],
  "data-root": "/data/docker",
  "exec-opts": ["native.cgroupdriver=systemd"]
}

重启Docker:

bash 复制代码
systemctl restart docker

4.3 登录Harbor

bash 复制代码
docker login -u admin -p YourStrongPassword 192.168.2.108:80

登录成功后,认证信息会保存在~/.docker/config.json中。

4.4 推送镜像测试

给本地镜像打上Harbor仓库的标签:

bash 复制代码
# 假设本地已有registry:latest镜像
docker tag registry:latest 192.168.2.108:80/library/registry:latest

推送:

bash 复制代码
docker push 192.168.2.108:80/library/registry:latest

输出类似:

复制代码
The push refers to repository [192.168.2.108:80/library/registry]
...
latest: digest: sha256:0f7e785a49386d7e98c502151f9b01dc5578aa4f13078a346b2c5cf50433f663 size: 1363

4.5 Web界面验证

浏览器访问http://192.168.2.108,使用admin账号登录,在library项目中即可看到刚推送的镜像。



5. 踩坑与经验分享

  1. 端口冲突 :如果服务器已运行Nginx或其他Web服务,建议修改Harbor端口为8080等,并在docker login时指定端口。

  2. 时间同步 :Harbor内部组件依赖时间同步,务必在服务端和客户端配置ntp:

    bash 复制代码
    yum install -y ntpdate
    ntpdate ntp.aliyun.com
  3. 磁盘空间 :Harbor默认数据目录在/data,建议挂载大容量磁盘,并定期清理无用镜像。

  4. 高可用部署:生产环境建议使用外部数据库和Redis,并通过对象存储(如S3)存储镜像,避免单点故障。

  5. 镜像复制:Harbor支持跨实例复制,可以配置两地三中心架构,确保镜像高可用。


6. 总结

通过本文,你已经掌握了Harbor的完整部署流程,并成功推送了第一个镜像。Harbor作为企业级镜像仓库,不仅提供了基本的存储功能,还涵盖了安全、复制、权限管理等关键能力,是容器化落地的重要一环。下一步,可以尝试配置LDAP认证、启用镜像扫描、设置垃圾回收策略,让Harbor真正成为团队的核心基础设施。

如果你在部署中遇到问题,欢迎留言交流,我们一起探讨解决方案。

相关推荐
晚风_END1 小时前
Linux|操作系统|小技巧---vim编辑的脚本自动添加shebang 和注释
linux·运维·vim
小邓睡不饱耶1 小时前
Hadoop 3.x 企业级实战指南:从纠删码到云原生容器化
大数据·hadoop·云原生
kUhzIPVBnE1 小时前
二极管箝位型三电平逆变器与NPC三电平逆变器的主要难点及MATLAB/Simulink仿真模型研究
云原生
能源革命2 小时前
Ubuntu24.04修改ssh默认端口
linux·服务器·ssh
阿寻寻2 小时前
【云原生技术】Pod 列表新增时间字段:取值口径与获取方式
docker·云原生·kubernetes
你们补药再卷啦2 小时前
运行python项目常用工具的安装和使用(ubuntu22)
linux·运维·服务器
白云偷星子2 小时前
RHCSA笔记4
运维
Hank Nie2 小时前
操作系统实践 0 | xv6入门与配置
linux·运维·服务器·系统架构
怀旧,2 小时前
【Linux系统编程】17. 进程间通信(下)
linux·运维·microsoft