k8s进阶_Harbor镜像仓库

一: 简介

  • 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
相关推荐
vibecoding774 小时前
GitHub 2026 年 7 月热榜:累计 Star 总榜与月度飙星榜
人工智能·github·ai编程
江湖有缘4 小时前
Docker实战 | 使用Docker部署Donetick任务与家务管理应用
运维·docker·容器
Pniubi4 小时前
Gitee&GitHub同步仓库教程
gitee·github
TunerT_TQ4 小时前
GitHub深度工程评测:AI 系统提示词泄露知识库深度评测:6万星system_prompts_leaks情报资产背后,藏着什么?
人工智能·chatgpt·github·提示词工程·#valhalla静态工程审阅·systemprompt·大模型工程
键盘鼓手苏苏5 小时前
AI 音频生成流水线:异步任务要有进度和取消
云原生·kubernetes·k8
InfinitePlus5 小时前
Git基本操作-命令行
git
雨辰AI5 小时前
K8s 达梦数据守护集群部署|容器化高可用生产落地指南
云原生·容器·kubernetes
茉莉玫瑰花茶6 小时前
TCP 全连接队列与 tcpdump 抓包
git·github·tcp·tcpdump
张忠琳6 小时前
【NPU】Ascend Docker Runtime v26.0.1 之一 runtime/main.go — 超深度分析
云原生·容器·架构·kubernetes·npu·docker-runtime