Docker私有镜像仓库Harbor

文章目录

      • 一、Harbor概述
      • 二、Harbor和Registry的比较
      • 三、Harbor核心组件解释
      • 四、Harbor配置文件所需参数
      • 五、Harbor部署
        • 1、环境介绍
        • 2、Harbor服务器配置
      • 六、Harbor基本操作
        • 1、镜像的上传/拉取
        • 2、client节点镜像上传/拉取
        • 3、创建 Harbor 用户

一、Harbor概述

  • Habor是由VMWare公司开源的容器镜像仓库。事实上,Habor是在Docker-Registry上进行了相应的企业级扩展,从而获得了更加广泛的应用;
  • 这些新的企业级特性包括:管理用户界面,基于角色的访问控制,AD/LDAP集成以及审计日志等,足以满足基本企业需求。
  • 官方地址:https://goharbor.io/

二、Harbor和Registry的比较

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

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

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

  3. 支持水平扩展集群
    当有用户对镜像的上传下载操作集中在某服务器,需要对相应的访问压力作分解。

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

  5. Harbor提供了基于角色的访问控制机制,并通过项目来对镜像进行组织和访问权限的控制。
    kubernetes中通过namespace来对资源进行隔离,在企业级应用场景中,通过将两者进行结合可以有效将kubernetes使用的镜像资源进行管理和访问控制,增强镜像使用的安全性。尤其是在多租户场景下,可以通过租户、namespace和项目相结合的方式来实现对多租户镜像资源的管理和访问控制。

三、Harbor核心组件解释

Docker私有镜像仓库Harbor_第1张图片

  • 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配置文件所需参数

这些参数需要在配置文件 Harbor.cfg 中设置。如果用户更新它们并运行 install.sh脚本重新安装 Harbour,参数将生效。具体参数如下:

  • hostname:用于访问用户界面和 register 服务。它应该是目标机器的 IP 地址或完全限 定的域名(FQDN)
    例如:192.168.195.128 或 hub.aaa.cn。不要使用 localhost 或 127.0.0.1 为主机名。
  • ui_url_protocol:(http 或 https,默认为 http)用于访问 UI
    和令牌/通知服务的协议。如果公证处于启用状态,则此参数必须为 https。
  • max_job_workers:镜像复制作业线程。
  • db_password:用于db_auth 的MySQL数据库root 用户的密码。
  • customize_crt:该属性可设置为打开或关闭,默认打开。打开此属性时,准备脚本创建私钥和根证书,用于生成/验证注册表令牌。
    当由外部来源提供密钥和根证书时,将此属性设置为 off。
  • ssl_cert:SSL 证书的路径,仅当协议设置为 https 时才应用。
  • ssl_cert_key:SSL 密钥的路径,仅当协议设置为 https 时才应用。
  • secretkey_path:用于在复制策略中加密或解密远程 register 密码的密钥路径。

五、Harbor部署

  • Harbor 被部署为多个 Docker 容器,因此可以部署在任何支持 Docker 的 Linux 发行版 上。
  • 服务端主机需要安装 Python、Docker 和 Docker Compose

1、环境介绍

  • Harbor服务器:192.168.5.129
  • 节点服务器:192.168.5.233

2、Harbor服务器配置

部署Docker-ce引擎docker引擎部署,点此跳

  1. 下载 compose编排工具和Harbor 安装程序
[root@harbor ~]# curl -L https://github.com/docker/compose/releases/download/1.21.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
[root@harbor ~]# chmod 755 docker-compose 
[root@harbor ~]# cp -p docker-compose /usr/local/bin/
[root@harbor ~]# wget http:// harbor.orientsoft.cn/harbor-1.2.2/harbor-offline-installer-v1.2.2.tgz
[root@harbor ~]# tar zxvf harbor-offline-installer-v1.2.2.tgz -C /usr/local/
  1. 配置 Harbor 参数文件
[root@harbor ~]# vim /usr/local/harbor/harbor.cfg
###修改第五行为本机ip
hostname = 192.168.5.129
  1. 启动 Harbor
[root@harbor ~]# sh /usr/local/harbor/install.sh
Now you should be able to visit the admin portal at http://192.168.5.129. 
For more details, please visit https://github.com/vmware/harbor .
  1. 输入本机ip和账号密码即可登录网页版harbor

Docker私有镜像仓库Harbor_第2张图片

六、Harbor基本操作

1、镜像的上传/拉取

添加项目并且填写项目名称
Docker私有镜像仓库Harbor_第3张图片
Docker私有镜像仓库Harbor_第4张图片
此时可使用 Docker 命令在本地通过 127.0.0.1 来登录和推送镜像。默认情况下, Register 服务器在端口 80 上侦听。

[root@harbor harbor]# docker login -u admin -p Harbor12345 http://127.0.0.1
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
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

从公有仓库下载镜像然后上传到harbor私有仓库

##下载镜像
[root@harbor harbor]# docker pull httpd
##更改镜像标签
[root@harbor harbor]# docker tag httpd 127.0.0.1/myjob/httpd:v1
##查看镜像
[root@harbor harbor]# docker images
REPOSITORY                  TAG                 IMAGE ID            CREATED             SIZE
127.0.0.1/myjob/httpd       v1                  b2c2ab6dcf2e        13 hours ago        166MB
httpd                       latest              b2c2ab6dcf2e        13 hours ago        166MB
.......省略其它镜像信息
###上传镜像到harbor
[root@harbor harbor]# docker push 127.0.0.1/myjob/httpd:v1

登录harbor网页查看镜像信息
Docker私有镜像仓库Harbor_第5张图片

2、client节点镜像上传/拉取

节点服务器在登录Harbor仓库上进行传和下载时会报错,出现这问题的原因 Docker Registry 交互默认使用的是 HTTPS,但是搭建私有镜 像默认使用的是 HTTP 服务,所以与私有镜像交互时出现以下错误。

root@client ~]# docker login  -u admin -p Harbor12345 http://192.168.5.129
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
Error response from daemon: Get https://192.168.5.129/v2/: dial tcp 192.168.5.129:443: connect: connection refused

解决:

[root@client ~]# vim /usr/lib/systemd/system/docker.service
##修改14行
ExecStart=/usr/bin/dockerd -H fd:// --insecure-registry 192.168.5.129 --containerd=/run/containerd/containerd.sock

Docker私有镜像仓库Harbor_第6张图片
重启服务尝试下载镜像

[root@client ~]# systemctl daemon-reload 
[root@client ~]# systemctl restart docker

[root@client ~]# docker login  -u admin -p Harbor12345 http://192.168.5.129
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
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@client ~]# docker pull 192.168.5.129/myjob/httpd:v1
[root@client ~]# docker images   ##镜像已成功下载
REPOSITORY                  TAG                 IMAGE ID            CREATED             SIZE
192.168.5.129/myjob/httpd   v1                  b2c2ab6dcf2e        14 hours ago        166MB               
                         

查看harbor的日志可以看见上传下载记录
Docker私有镜像仓库Harbor_第7张图片

3、创建 Harbor 用户

Docker私有镜像仓库Harbor_第8张图片
Docker私有镜像仓库Harbor_第9张图片
Docker私有镜像仓库Harbor_第10张图片
Docker私有镜像仓库Harbor_第11张图片
Docker私有镜像仓库Harbor_第12张图片
在client节点上用abc用户登录

##注销登录
[root@client ~]# docker logout 192.168.5.129
Removing login credentials for 192.168.5.129
##使用abc账号登录
[root@client ~]# docker login 192.168.5.129
Username: abc
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

你可能感兴趣的:(Docker/K8S)