Harbor使用docker-compose单机容器编排方式一键安装部署,包括如下组件

  • 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都是Docker的镜像仓库,但是Harbor作为更多企业的选择,是因为相比较于Regisrty来说,它具有如下优势:

  • 提供分层传输机制,优化网络传输

Docker镜像是是分层的,而如果每次传输都使用全量文件(所以用FTP的方式并不适合),显然不经济。必须提供识别分层传输的机制,以层的UUID为标识,确定传输的对象。

  • 提供WEB界面,优化用户体验

只用镜像的名字来进行上传下载显然很不方便,需要有一个用户界面可以支持登陆、搜索功能,包括区分公有、私有镜像。

  • 支持水平扩展集群

当有用户对镜像的上传下载操作集中在某服务器,需要对相应的访问压力作分解。

  • 良好的安全机制

企业中的开发团队有很多不同的职位,对于不同的职位人员,分配不同的权限,具有更好的安全性。

  • Harbor提供了基于角色的访问控制机制,并通过项目来对镜像进行组织和访问权限的控制。

kubernetes中通过namespace来对资源进行隔离,在企业级应用场景中,通过将两者进行结合可以有效将kubernetes使用的镜像资源进行管理和访问控制,增强镜像使用的安全性。尤其是在多租户场景下,可以通过租户、namespace和项目相结合的方式来实现对多租户镜像资源的管理和访问控制。

之前两篇介绍了  使用Docker registry两种方式搭建Docker私服

                           使用Nexus3搭建Docker私服

现在开始搭建Harbor私服......

安装docker-compose version 1.24.1, build 4667896b
官网太慢,推荐通过pip 安装
yum -y install epel-release
pip --version
pip install --upgrade pip
pip install docker-compose
https://docs.docker.com/compose/install/
docker官网compose.yml文件属性详解 
地址:https://docs.docker.com/compose/compose-file/
安装
wget  https://storage.googleapis.com/harbor-releases/release-1.7.0/harbor-offline-installer-v1.7.5.tgz
https:///goharbor/harbor/releases/tag/v1.8.2

tar -zxf harbor-offline-installer-v1.7.5.tgz -D /opt

/etc/docker/daemon.json文件增加 192.168.3.34

coredns docker搭建_docker push

systemctl  restart docker

修改配置文件

解压缩之后,目录下会生成harbor.cfg文件,该文件就是Harbor的配置文件。

hostname = 192.168.3.34
ui_url_protocol = http
customize_crt = off
坑1:若有其他服务占用80/443端口,想办法调整规避
修改docker-compose.yml文件
  proxy:
     image: goharbor/nginx-photon:v1.7.5
     container_name: nginx
     restart: always
     cap_drop:
       - ALL
     cap_add:
       - CHOWN
       - SETGID
       - SETUID
       - NET_BIND_SERVICE
     volumes:
       - ./common/config/nginx:/etc/nginx:z
     networks:
       - harbor
     dns_search: .
     ports:
       - 5080:80
       - 5443:443
       - 4443:4443修改 common/templates/registry/config.yml
auth:
   token:
     issuer: harbor-token-issuer
     realm: $public_url:5080/service/token坑2:若是要改变/data目录,要全部改掉,这里使用默认路径/data
 #  ./prepare(更新配置文件,如果是重装,则先rm -rf /data再执行)#  ./
✔ ----Harbor has been installed and started successfully.----
安装完成
查看端口占用
netstat -tunlp
查看日志:
ls /var/log/harbor/
docker-compose ps

coredns docker搭建_docker push_02

docker login 192.168.3.34

username:admin     password:Harbor12345

coredns docker搭建_docker push_03

登录harbor web:

账号:admin 密码为默认:Harbor12345。密码在harbor.cfg文件中可以找到。

登录之后进入下面界面。

coredns docker搭建_docker-compose_04

测试:

上传镜像到Harbor

坑3:不能像之前docker-registry/nexus3那样打tag,否则push报错

coredns docker搭建_docker logn_05

给镜像打标签的时候, 要多一层 library, 这个是缺省的, 否则要建立好了project,才能推镜像

coredns docker搭建_docker push_06

library是缺省项目,web查看结果如下:

coredns docker搭建_coredns docker搭建_07