关于Harbor私有仓库的搭建及使用

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 关于Harbor私有仓库的搭建及使用

在这里插入图片描述

一、介绍

Harbor,是一个英文单词,意思是港湾,港湾是干什么的呢,就是停放货物的,而货物呢,是装在集装箱中的,说到集装箱,就不得不提到Docker容器,因为docker容器的技术正是借鉴了集装箱的原理。所以,Harbor正是一个用于存储Docker镜像的企业级Registry服务。
Registry是Dcoker官方的一个私有仓库镜像,可以将本地的镜像打标签进行标记然后push到以Registry起的容器的私有仓库中。企业可以根据自己的需求,使用Dokcerfile生成自己的镜像,并推到私有仓库中,这样可以大大提高拉取镜像的效率。

二、Harbor核心组件解释

  • Proxy:他是一个nginx的前端代理,代理Harbor的registry,UI, token等服务。
  • db:负责储存用户权限、审计日志、Dockerimage分组信息等数据。
  • UI:提供图形化界面,帮助用户管理registry上的镜像, 并对用户进行授权。
  • jobsevice:jobsevice是负责镜像复制工作的,他和registry通信,从一个registry pull镜像然后push到另一个registry,并记录job_log。
  • Adminserver:是系统的配置管理中心附带检查存储用量,ui和jobserver启动时候回需要加载adminserver的配置。
  • Registry:镜像仓库,负责存储镜像文件。
  • Log:为了帮助监控Harbor运行,负责收集其他组件的log,供日后进行分析。

三:Harbor和Registry的比较

Harbor和Registry都是Docker的镜像仓库,但是Harbor作为更多企业的选择,是因为相比较于Regisrty来说,它具有很多的优势。

1.提供分层传输机制,优化网络传输
Docker镜像是是分层的,而如果每次传输都使用全量文件(所以用FTP的方式并不适合),显然不经济。必须提供识别分层传输的机制,以层的UUID为标识,确定传输的对象。
2.提供WEB界面,优化用户体验
只用镜像的名字来进行上传下载显然很不方便,需要有一个用户界面可以支持登陆、搜索功能,包括区分公有、私有镜像。
3.支持水平扩展集群
当有用户对镜像的上传下载操作集中在某服务器,需要对相应的访问压力作分解。
4.良好的安全机制
企业中的开发团队有很多不同的职位,对于不同的职位人员,分配不同的权限,具有更好的安全性。
5.Harbor提供了基于角色的访问控制机制,并通过项目来对镜像进行组织和访问权限的控制。kubernetes中通过namespace来对资源进行隔离,在企业级应用场景中,通过将两者进行结合可以有效将kubernetes使用的镜像资源进行管理和访问控制,增强镜像使用的安全性。尤其是在多租户场景下,可以通过租户、namespace和项目相结合的方式来实现对多租户镜像资源的管理和访问控制。

=================== 安装步骤 =================

环境:

IP 版本 服务
192.168.1.10 CentOS Linux release 7.6.1810 (Core) docker、docker-compose、harbor
#包含Harbor安装包和Docker-compose工具
链接:https://pan.baidu.com/s/18qnMOV50PxxpwXIDP7dimg 
提取码:rqz6 

①安装docker

配置Docker的Yum源

echo -e "[docker] \nname=docker \nbaseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/x86_64/stable/ \nenabled=1 \ngpgcheck=1 \ngpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg" >> /etc/yum.repos.d/docker.repo

安装docker 这个默认是最新版本

yum -y install docker-ce

配置阿里云加速 拉取镜像的速度会快

echo {\"registry-mirrors\": [\"https://h78bv2ra.mirror.aliyuncs.com\"]} >> /etc/docker/daemon.json

启动docker

systemctl daemon-reload
systemctl start docker

版本信息

docker --version
Docker version 19.03.13, build 4484c46d9d

②安装docker-compose

下载docker-compose工具
cd /usr/bin/

导入下载好的docker-compose
chmod +x docker-compose

查看版本
docker-compose --version
docker-compose version 1.25.4, build 8d51620a

③安装Harbor私有仓库

Harbor下载地址

#解压
tar -zxf harbor-offline-installer-v1.6.3.tgz
#修改配置文件
vi harbor/harbor.cfg
hostname = 192.168.1.10 修改为本机IP
harbor_admin_password = 12345 登录harbor仓库的密码
#其他配置根据自己需要进行修改
进行安装harbor
cd harbor && ./install.sh
查看安装情况
[root@localhost harbor]# docker ps
CONTAINER ID        IMAGE                                    COMMAND                  CREATED             STATUS                    PORTS                                                                NAMES
9fffb15a7822        goharbor/nginx-photon:v1.6.3             "nginx -g 'daemon of…"   54 minutes ago      Up 54 minutes (healthy)   0.0.0.0:443->443/tcp, 0.0.0.0:4443->4443/tcp, 0.0.0.0:80->80/tcp   nginx
6391b340e503        goharbor/harbor-jobservice:v1.6.3        "/harbor/start.sh"       54 minutes ago      Up 54 minutes                                                                                  harbor-jobservice
b2c17914ae7a        goharbor/harbor-ui:v1.6.3                "/harbor/start.sh"       55 minutes ago      Up 54 minutes (healthy)                                                                        harbor-ui
07856849920b        goharbor/registry-photon:v2.6.2-v1.6.3   "/entrypoint.sh /etc…"   55 minutes ago      Up 55 minutes (healthy)   5000/tcp                                                             registry
761546a6e0cb        goharbor/redis-photon:v1.6.3             "docker-entrypoint.s…"   55 minutes ago      Up 55 minutes             6379/tcp                                                             redis
794635b0d59c        goharbor/harbor-adminserver:v1.6.3       "/harbor/start.sh"       55 minutes ago      Up 54 minutes (healthy)                                                                        harbor-adminserver
12ea34cd31b8        goharbor/harbor-db:v1.6.3                "/entrypoint.sh post…"   55 minutes ago      Up 55 minutes (healthy)   5432/tcp                                                             harbor-db
a939a7d12646        goharbor/harbor-log:v1.6.3               "/bin/sh -c /usr/loc…"   55 minutes ago      Up 55 minutes (healthy)   127.0.0.1:1514->10514/tcp                                            harbor-log
#安装好后默认的端口是80

修改docker.service文件指定私有仓库地址

[root@localhost ~]# find / -name docker.service -type f
/usr/lib/systemd/system/docker.service
[root@localhost ~]# vi /usr/lib/systemd/system/docker.service
#ExecStart尾部添加地址
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --insecure-registry=http://192.168.1.10
#重启docker
systemctl daemon-reload  && systemctl restart docker
#查看一下harbor状态是否正常(如果正常跳过)
#不正常状态下操作如下:
cd harbor && docker-compose down && docker-compose up -d

访问web界面默认80端口
关闭防火墙或打开端口

systemctl stop firewalld

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

④测试:

登录一下,防止后面上传镜像失败
[root@localhost harbor]# docker login 192.168.1.10
Username: admin
Password: 12345#文件设置的密码
Login Succeeded #出现则为成功

修改镜像标签测试上传

#随便pull一个镜像
[root@localhost ~]# docker pull mysql
[root@localhost ~]# docker tag mysql 192.168.1.10/hello/mysql  #修改标签格式:ip地址/项目名称/自定义
#上传
[root@localhost ~]# docker push 192.168.1.10/hello/mysql
The push refers to repository [192.168.1.10/hello/mysql]
9b0377a95c0e: Pushed 
af6e790b8237: Pushed 
060fef62a228: Pushed 
7f893b7c04ac: Pushed 
7832ac00d41e: Pushed 
15b463db445c: Pushed 
c21e35e55228: Pushed 
36b89ee4c647: Pushed 
9dae2565e824: Pushed 
ec8c80284c72: Pushed 
329fe06a30f0: Pushed 
d0fe97fa8b8c: Mounted from test/nginx 
latest: digest: sha256:c7788fdc4c04a64bf02de3541656669b05884146cb3995aa64fa4111932bec0f size: 2828
#上传成功/web界面看一下

在这里插入图片描述

搭建成功




关于修改Harbor仓库默认端口

如果仓库已经搭建成功了先停止一下

cd harbor && docker-compose down #停止关闭
修改配置文件
[root@localhost ~]# vi harbor/docker-compose.yml
找到端口号
    ports:
      - 9090:80   #默认80:80 修改主机9090映射容器80
      - 443:443
      - 4443:4443
保存退出
还需要修改一个配置文件,否则上传文件会失败
[root@localhost ~]# vi harbor/common/templates/registry/config.yml
找到该字段,在$public_url:添加端口号
auth:
  token:
    issuer: harbor-token-issuer
    realm: $public_url:9090/service/token
    rootcertbundle: /etc/registry/root.crt
    service: harbor-registry
保存退出
cd harbor && ./install.sh #重新安装 会读取修改的配置
搭建成功 docker ps 可以看到端口映射成功
[root@localhost harbor]# docker ps
CONTAINER ID        IMAGE                                    COMMAND                  CREATED             STATUS                 PORTS                                                                NAMES
9fffb15a7822        goharbor/nginx-photon:v1.6.3             "nginx -g 'daemon of…"   2 hours ago         Up 2 hours (healthy)   0.0.0.0:443->443/tcp, 0.0.0.0:4443->4443/tcp, 0.0.0.0:9090->80/tcp   nginx

修改docker.service文件指定私有仓库地址

[root@localhost ~]# find / -name docker.service -type f
/usr/lib/systemd/system/docker.service
[root@localhost ~]# vi /usr/lib/systemd/system/docker.service
#ExecStart尾部添加地址
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --insecure-registry=http://192.168.1.10:9090
#重启docker
systemctl daemon-reload  && systemctl restart docker
#查看一下harbor状态是否正常(如果正常跳过)
#不正常状态下操作如下:
cd harbor && docker-compose down && docker-compose up -d

测试

web界面
在这里插入图片描述

登录一下,防止后面上传镜像失败
[root@localhost harbor]# docker login 192.168.1.10:9090
Username: admin
Password: 12345#文件设置的密码
Login Succeeded #出现则为成功

修改镜像标签测试上传

#随便pull一个镜像
[root@localhost ~]# docker pull nginx
[root@localhost ~]# docker tag nginx 192.168.1.10:9090/hello/nginx  #修改标签格式:ip地址:端口/项目名称/自定义
#上传
[root@localhost harbor]# docker push 192.168.1.10:9090/hello/nginx
The push refers to repository [192.168.1.10:9090/hello/nginx]
7b5417cae114: Mounted from test/nginx 
aee208b6ccfb: Mounted from test/nginx 
2f57e21e4365: Mounted from test/nginx 
2baf69a23d7a: Mounted from test/nginx 
d0fe97fa8b8c: Mounted from hello/mysql 
latest: digest: sha256:34f3f875e745861ff8a37552ed7eb4b673544d2c56c7cc58f9a9bec5b4b3530e size: 1362
#上传成功/web界面看一下

在这里插入图片描述

成功

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
存储 网络安全 数据安全/隐私保护
Docker harbor私有仓库部署与管理-2
Docker harbor私有仓库部署与管理
165 0
|
应用服务中间件 nginx 数据安全/隐私保护
Docker harbor私有仓库部署与管理-1
Docker harbor私有仓库部署与管理
198 0
|
2月前
|
应用服务中间件 nginx 数据安全/隐私保护
使用Harbor搭建Docker私有仓库
Harbor是一款开源的企业级Docker仓库管理工具,分为私有与公有仓库两种类型,其中私有仓库被广泛应用于运维场景。Harbor提供图形化界面,便于直观操作,并且其核心组件均由容器构建而成,因此安装时需预先配置Docker及docker-compose。Harbor支持基于项目的用户与仓库管理,实现细粒度的权限控制;具备镜像复制、日志收集等功能,并可通过UI直接管理镜像,支持审计追踪。部署Harbor涉及配置文件调整、登录认证等步骤,并可通过客户端进行镜像的上传、拉取等操作。系统内置多种角色,包括受限访客、访客、开发者、维护人员及管理员,以满足不同场景下的使用需求。
128 0
|
3月前
|
Docker 容器
docker: 搭建 harbor 镜像仓库
docker: 搭建 harbor 镜像仓库
|
5月前
|
Ubuntu 关系型数据库 PostgreSQL
部署harbor
在Ubuntu 22.04 LTS环境下,部署Harbor私有仓库的步骤包括:确保已安装Docker(版本24.0.6),参考官方v2.5.3安装指南,注意避免在NFS4挂载磁盘上部署以防止PostgreSQL相关问题。首先,生成SSL证书,然后更新Docker配置并重启服务。解压并配置Harbor离线安装包,修改`harbor.yml`,执行`prepare`和`install.sh`脚本,最后将Harbor设置为系统服务。
177 0
|
6月前
|
存储 安全 数据库
搭建Harbor镜像仓库
搭建Harbor镜像仓库
317 2
|
数据库 数据安全/隐私保护 Docker
Docker harbor私有仓库部署与管理-3
Docker harbor私有仓库部署与管理
155 0
|
11月前
|
应用服务中间件 数据安全/隐私保护 nginx
搭建harbor
通过harbor在线包搭建harbor服务
100 1
|
JSON 安全 Java
docker本地私有仓库搭建
docker本地私有仓库搭建
169 0
|
Docker 容器
Harbor部署 1
Harbor部署
下一篇
无影云桌面