企业级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. 踩坑与经验分享
-
端口冲突 :如果服务器已运行Nginx或其他Web服务,建议修改Harbor端口为8080等,并在
docker login时指定端口。 -
时间同步 :Harbor内部组件依赖时间同步,务必在服务端和客户端配置ntp:
bashyum install -y ntpdate ntpdate ntp.aliyun.com -
磁盘空间 :Harbor默认数据目录在
/data,建议挂载大容量磁盘,并定期清理无用镜像。 -
高可用部署:生产环境建议使用外部数据库和Redis,并通过对象存储(如S3)存储镜像,避免单点故障。
-
镜像复制:Harbor支持跨实例复制,可以配置两地三中心架构,确保镜像高可用。
6. 总结
通过本文,你已经掌握了Harbor的完整部署流程,并成功推送了第一个镜像。Harbor作为企业级镜像仓库,不仅提供了基本的存储功能,还涵盖了安全、复制、权限管理等关键能力,是容器化落地的重要一环。下一步,可以尝试配置LDAP认证、启用镜像扫描、设置垃圾回收策略,让Harbor真正成为团队的核心基础设施。
如果你在部署中遇到问题,欢迎留言交流,我们一起探讨解决方案。