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

2022-11-21 18:39:13 浏览数 (1)

一、介绍

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

代码语言:javascript复制
#包含Harbor安装包和Docker-compose工具
链接:https://pan.baidu.com/s/18qnMOV50PxxpwXIDP7dimg 
提取码:rqz6 

①安装docker

配置Docker的Yum源

代码语言:javascript复制
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 这个默认是最新版本

代码语言:javascript复制
yum -y install docker-ce

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

代码语言:javascript复制
echo {"registry-mirrors": ["https://h78bv2ra.mirror.aliyuncs.com"]} >> /etc/docker/daemon.json

启动docker

代码语言:javascript复制
systemctl daemon-reload
systemctl start docker

版本信息

代码语言:javascript复制
docker --version
Docker version 19.03.13, build 4484c46d9d

②安装docker-compose

代码语言:javascript复制
下载docker-compose工具
cd /usr/bin/

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

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

③安装Harbor私有仓库

Harbor下载地址

代码语言:javascript复制
#解压
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文件指定私有仓库地址

代码语言:javascript复制
[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端口 关闭防火墙或打开端口

代码语言:javascript复制
systemctl stop firewalld

④测试:

登录一下,防止后面上传镜像失败

代码语言:javascript复制
[root@localhost harbor]# docker login 192.168.1.10
Username: admin
Password: 12345#文件设置的密码
Login Succeeded #出现则为成功

修改镜像标签测试上传

代码语言:javascript复制
#随便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仓库默认端口

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

代码语言:javascript复制
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文件指定私有仓库地址

代码语言:javascript复制
[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界面

登录一下,防止后面上传镜像失败

代码语言:javascript复制
[root@localhost harbor]# docker login 192.168.1.10:9090
Username: admin
Password: 12345#文件设置的密码
Login Succeeded #出现则为成功

修改镜像标签测试上传

代码语言:javascript复制
#随便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界面看一下

成功

0 人点赞