企业级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真正成为团队的核心基础设施。

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

相关推荐
小政同学4 小时前
【NFS故障】共享的文件无法执行
linux·运维·服务器
禅口魔心4 小时前
边缘网关开发计划(一):在 Rock 5T 上部署 Docker
物联网·docker·rk3588·边缘网关
AI木马人5 小时前
3.【Prompt工程实战】如何设计一个可复用的Prompt系统?(避免每次手写提示词)
linux·服务器·人工智能·深度学习·prompt
ch3nyuyu5 小时前
Ubuntu(乌班图)基础指令
linux·运维·网络
huihuihuanhuan.xin5 小时前
记一次 Docker PostgreSQL 连接认证失败的排查与解决
docker
minglie15 小时前
gcc编译器汇总
linux
挽安学长5 小时前
保姆级教程,通过GACCode使用Claude Code Desktop!
运维·服务器
firstacui6 小时前
MGRE实验
运维·服务器·网络
白菜欣7 小时前
Linux —《开发三件套:gcc/g++、gdb、make/Makefile 全解析》
linux·运维
何中应7 小时前
Grafana如何给列表设置别名
运维·grafana·监控