一: 简介
- Harbor是由VMware公司中国团队开源的企业级的 Docker Registry管理项目,它包括权限管理(RBAC)、LDAP、日志审核、管理界面、自我注册、镜像复制和中文 支持等功能。
- Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器。它的主要作用是帮助用户解决Docker镜像存储、镜像安全以及大规模分发的需求。Harbor提供了基于角色的访问控制、跨地域镜像复制、图形化界面、镜像漏洞扫描、统一身份认证以及审计等核心功能,极大地增强了Docker Registry的功能性。
- Harbor 不是一个单一的 Docker 容器,而是一个企业级的镜像仓库完整解决方案。
markdown
docker包含以下组件:
nginx:做反向代理、负载均衡,处理所有前端请求
registry:Harbor 的核心,负责镜像的存储和管理
postgres:存储 Harbor 的所有配置数据、用户信息、项目信息、权限规则等
redis:做缓存,提升 Harbor 的访问性能
core:Harbor 的核心业务服务,处理核心逻辑
portal:Harbor 的前端页面,提供可视化操作界面
jobservice:处理镜像的复制、扫描、垃圾回收等异步任务
clair:负责镜像漏洞扫描(安全检测核心)
二: 搭建步骤
1.0 安装 Docker Compose(推荐 v2.20.0)
docker compose介绍:
- docker run 命令,只能启动单个 Docker 容器,它解决不了「多容器协同」的核心问题(顺序启动,容器内网通信,专属存储卷,一键启动所有容器,容器的生命周期如单个容器自动重启)
- Docker Compose 是 Docker 官方推出的单机多容器编排工具 ,它的核心能力就是: 1.用一个统一的 YAML 配置文件(docker-compose.yml),定义所有需要的容器、容器的依赖关系、网络配置、存储配置、环境变量、启动规则等所有信息; 2.用一条简单的命令,就能一键完成「创建 + 启动 + 配置」所有容器的全部流程; 3.同样用一条命令,就能一键停止、重启、删除所有容器; 4.为所有容器自动创建专属的内部网络,让容器之间可以直接通过「容器名」互相访问,无需手动配置 IP。
- 对 Harbor 来说:Docker Compose 是「唯一的运行引擎」
- Harbor 的官方安装包,本质就是一个精心编写好的 docker-compose.yml 文件 + 一些配置脚本。
2.0 下载二进制文件(上传到/usr/local/bin/下)
bash
# 1.0
sudo curl -L "https://github.com/docker/compose/releases/download/v2.20.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 2.0 赋予权限
chmod +x /usr/local/bin/docker-compose
# 3.0 验证安装
docker-compose --version
3.0 下载并解压 Harbor 离线包(需要了解harbor目录文件结构)
- 下载镜像
bash
# 网络故障的话,本地上传镜像
wget https://github.com/goharbor/harbor/releases/download/v2.10.3/harbor-offline-installer-v2.10.3.tgz
- 解压
bash
tar zxvf harbor-offline-installer-v2.10.3.tgz
- 进入harbor目录
bash
[root@k8s-master harbor]# pwd
/root/harbor
[root@k8s-master harbor]# ll
总用量 641820
-rw-r--r-- 1 root root 3643 7月 2 2024 common.sh
-rw-r--r-- 1 root root 657181693 7月 2 2024 harbor.v2.10.3.tar.gz # harbor所有组件镜像包
-rw-r--r-- 1 root root 13972 7月 2 2024 harbor.yml.tmpl #配置模板文件(需要复制)
-rwxr-xr-x 1 root root 1975 7月 2 2024 install.sh #一键安装脚本
-rw-r--r-- 1 root root 11347 7月 2 2024 LICENSE
-rwxr-xr-x 1 root root 1882 7月 2 2024 prepare # 环境准备脚本
[root@k8s-master harbor]#
4.0 导入harbor镜像
bash
# 导入镜像(时间较长,等待2-3分钟)
docker load -i harbor.v2.10.3.tar.gz
# 查看镜像
docker images | grep goharbor
5.0 配置harbor核心参数
- 复制模板文件为正式配置文件
bash
cp harbor.yml.tmpl harbor.yml
- 编辑配置文件(测试阶段用http)
bash
vim harbor.yml
# 1. 填写Harbor所在主机的IP或域名(必填,如192.168.255.166)
hostname: 192.168.255.166
# 2. 启用HTTP(测试环境用,生产环境需配置HTTPS)
http:
port: 8080 # 默认80端口,可修改(如8080) # 最好修改为8088
# 3. 设置Harbor管理员密码(默认admin,建议修改为复杂密码)
harbor_admin_password: admin
# 4. 设置数据存储目录(默认/data/harbor,建议保留)
data_volume: /data/harbor
# 5. 【可选】若用HTTPS,需删除注释并填写证书路径(生产环境必需)
# https:
# port: 443
# certificate: /data/cert/harbor.crt # 你的证书路径
# private_key: /data/cert/harbor.key # 你的私钥路径
- 编辑配置文件(如果这个是生产环境:生产环境启动https)
bash
# 1.0 创建证书目录
mkdir -p /data/cert
# 2.0 进入证书目录
cd /data/cert
# OpenSSL 自签 HTTPS 证书生成命令
openssl req -newkey rsa:4096 -nodes -sha256 -keyout harbor.key -x509 -days 3650 -out harbor.crt
说明:执行后按提示自定义填写证书信息
# 3.0 编辑 Harbor 主配置文件 harbor.yml 中 HTTPS 配置片段(取消注释启用)
vim /root/harbor/harbor.yml
# HTTPS完整配置,不要注释
https:
port: 443
certificate: /data/cert/harbor.crt # 对应上面生成的证书路径
private_key: /data/cert/harbor.key # 对应上面生成的私钥路径
- 每个机器都改一下docker镜像加速器地址,添加本地地址,就是harbor的地址
bash
[root@k8s-master harbor]# cat /etc/docker/daemon.json
{
"registry-mirrors": [
"https://befa3b805ed087c70672ef6f886ddc9a.d.1ms.run"
],
"insecure-registries": [
"192.168.255.166:8080" # 这个部分与我们修改harbor部分保持一致
]
}
[root@k8s-master harbor]#
6.0 一键安装harbor
bash
执行安装脚本(带漏洞扫描功能,按需添加参数)
./install.sh --with-trivy:启用镜像漏洞扫描(推荐)
最后输出seccessful表示安装成功
7.0 验证harbor部署
- 查看容器状态
bash
[root@k8s-master harbor]# docker-compose ps
- web页面进行访问
bash
http://192.168.255.166:8080/

- 命令行验证镜像拉取
bash
# 1. 登录Harbor(需输入账号密码)
sudo docker login 192.168.255.166:8080 # 若端口非80,加端口:192.168.255.166:8088
# 2. 标记本地镜像(示例:标记nginx镜像)
sudo docker pull nginx:latest
sudo docker tag nginx:latest 192.168.255.166:8080/library/nginx:v1.0
# 3. 推送镜像到Harbor
sudo docker push 192.168.255.166:8080/library/nginx:v1.0
# 4. 拉取镜像(验证可用性)
sudo docker rmi 192.168.255.166:8080/library/nginx:v1.0 # 先删除本地镜像
sudo docker pull 192.168.255.166:8080/library/nginx:v1.0
三: harbor基本使用
1.0 harbor新建项目
- 填写项目名称
- 资源配额:如果写成-1表示没有限额
2.0 新建用户
-
系统管理------用户管理------添加用户------添加用户信息(如用户名,密码等)
-
我们新建的用户看不到我们仓库原因:仓库没有添加该用户访问权限
-
仓库添加用户访问权限:选择对应项目然后进入------成员------添加我们加入的成员
3.0 新用户登录
我们刚才的登录是基于在admin用户的基础上面,我们现在可以退出登录,用我们刚刚创建的用户进行登录
4.0 node1使用harbor
- 登录仓库
bash
[root@k8s-node1 ~]# docker login 192.168.255.166:8080
Username: admin
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
[root@k8s-node1 ~]#
- 下载一个镜像测试
bash
[root@k8s-node1 ~]# docker pull centos:7
7: Pulling from library/centos
2d473b07cdd5: Pull complete
Digest: sha256:be65f488b7764ad3638f236b7b515b3678369a5124c47b8d32916d6487418ea4
Status: Down
loaded newer image for centos:7
docker.io/library/centos:7
- 给镜像打tag
注意:给镜像打Tag【核心修改】必须按这个格式:harbor地址/harbor项目名/镜像名:版本
bash
[root@k8s-node1 ~]# docker tag centos:7 192.168.255.166:8080/registry1/centos:7.4
- 上传镜像到仓库(通过docker push这个命令)
bash
[root@k8s-node1 ~]# docker push 192.168.255.166:8080/registry1/centos:7.4
The push refers to repository [192.168.255.166:8080/registry1/centos]
174f56854903: Pushed
7.4: digest: sha256:dead07b4d8ed7e29e98de0f4504d87e8880d4347859d839686a31da35a3b532f size: 529
[root@k8s-node1 ~]#
- 在web界面查看镜像是否被上传

5.0 docker-compose重启
已运行过 Harbor,需先执行预处理脚本
[root@k8s-master harbor]# ./prepare
若执行
./prepare报错:先重启 Docker 服务,再重新运行./prepare
完整重启流程(重启出错时使用)
# 停止所有Harbor容器
[root@k8s-master harbor]# docker-compose down
# 后台启动Harbor服务
[root@k8s-master harbor]# docker-compose up -d
外链图片转存中...(img-lbovs1RY-1785474238677)
5.0 docker-compose重启
已运行过 Harbor,需先执行预处理脚本
[root@k8s-master harbor]# ./prepare
若执行
./prepare报错:先重启 Docker 服务,再重新运行./prepare
完整重启流程(重启出错时使用)
# 停止所有Harbor容器
[root@k8s-master harbor]# docker-compose down
# 后台启动Harbor服务
[root@k8s-master harbor]# docker-compose up -d