Docker Harbor私有仓库部署

目录

Harbor概述

        Harbor的功能

        harbor核心组件

                harbor和registry区别

Harbor私有仓库的部署

              Harbor.cfg 配置文件中参数详解

                 通过本机IP登录harbor

总结


Harbor概述

        Harbor 是一个开源注册表,它使用策略和基于角色的访问控制来保护工件,确保图像被扫描并且没有漏洞,并将图像标记为可信。Harbor 是一个 CNCF 毕业项目,它提供合规性、性能和互操作性,以帮助您跨云原生计算平台(如 Kubernetes 和 Docker)一致且安全地管理工件。

Harbor被部署为多个Docker容器,因此可以部署在任何支持Docker 的 Linux发行版,(registry为其核心组件),Harbor 比 registry相比好处是: harbor 支持多种功能、图形化界面管理、多用户权限、角色管理机制、安全机制服务端主机需要安装 Python、Docker和 Docker Compose。(web环境支持的是PY语言,故需要安装Python)

        Harbor的功能

基于角色的访问控制(Role based access control):用户和存储库通过“项目”组织,用户可以对项目下的图像拥有不同的权限。

基于策略的图像复制(Policy based images replication):图像可以在多个注册表实例之间复制(同步),并在错误时自动重试。 非常适合负载均衡、高可用性、多数据中心、混合和多云场景。  

漏洞扫描(Vulnerability Scanning):港口定期扫描图像,并警告用户漏洞。  

LDAP/AD支持(LDAP/AD support):Harbor与企业现有LDAP/AD集成,实现用户认证和管理。  

图像删除和垃圾回收(Image deletion & garbage collection):可以删除图像并回收其空间。  

Notary:可以保证图像的真实性。

图形用户门户(Graphical user portal):用户可以轻松浏览,搜索库和管理项目。

审计(Auditing):跟踪存储库的所有操作。 

RESTful API:大多数管理操作的RESTful API,易于与外部系统集成。

易于部署:提供在线和离线安装程序。

        harbor核心组件

Proxy:他是一个nginx的前端代理,代理Harbor的registry,UI, token等服务。

db:负责储存用户权限、审计日志、Dockerimage分组信息等数据。

UI:提供图形化界面,帮助用户管理registry上的镜像, 并对用户进行授权。

job sevice:job sevice是负责镜像复制工作的,他和registry通信,从一个registry pull镜像然后push到另一个registry,并记录job_log。

Adminserver:是系统的配置管理中心附带检查存储用量,ui和jobserver启动时候回需要加载adminserver的配置。

Registry:镜像仓库,负责存储镜像文件。

Log:为了帮助监控Harbor运行,负责收集其他组件的log,供日后进行分析。

                harbor和registry区别

        Registry是Dcoker官方的一个私有仓库镜像,可以将本地的镜像打标签进行标记然后push到以Registry起的容器的私有仓库中。企业可以根据自己的需求,使用Dokcerfile生成自己的镜像,并推到私有仓库中,这样可以大大提高拉取镜像的效率。

        虽然说Harbor和Registry都是Docker的镜像仓库,但是Harbor作为更多企业的选择,肯定harbor功能更为强大一点。

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

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

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

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

4.良好的安全机制

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

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

ps:harbor和registry区别仅用于知识的积累。

Harbor私有仓库的部署

环境配置

192.168.37.107         docker、docker-compose、harbor-offline-v1.1.2

server端安装docker-compose

[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 /usr/local/bin]# chmod +x docker-compose
[root@harbor /usr/local/bin]# ls
docker-compose

在线安装harbor

[root@harbor ~]# wget https://github.com/vmware/harbor/releases/download/v1.2.2/harbor-online-installer-v1.2.2.tgz

 解压到/usr/local

[root@harbor ~]# tar -zxf harbor-online-installer-v1.2.2.tgz -C /usr/local/

harbor目录下的文件

[root@harbor /usr/local]# cd harbor/
[root@harbor /usr/local/harbor]# ls
common                    docker-compose.notary.yml  harbor_1_1_0_template  install.sh  NOTICE   upgrade
docker-compose.clair.yml  docker-compose.yml         harbor.cfg             LICENSE     prepare
如果网络不稳定的话,可以离线下载

wget https://github.com/vmware/harbor/releases/download/v1.1.2/harbor-offline-installer-v1.2.2.tgz
tar xvf harbor-offline-installer-v1.2.2.tgz

配置harbor.cfg文件,第5行

[root@harbor /usr/local/harbor]# vim harbor.cfg

。。。。
  5 hostname = 192.168.37.107
。。。。

              Harbor.cfg 配置文件中参数详解

有两类参数:所需参数和可选参数

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

hostname:用于访问用户界面和register服务。它应该是目标机器的IP地址或完全限定的域名(FQDN)

PS:不要使用localhost或127.0.0.1为主机名。

ui_url_protocol: (http 或 https,默认为http)用于访问ul和令牌/通知服务的协议。如果公证处于启用状态,则此参数必须为 https。(身份验证时会向Mysql数据库进行比对,然后授予令牌)

max_ job_workers: 镜像复制作业线程。

db_password: 用于db_auth的MySQL 数据库root 用户的密码。I

customize_crt:该属性可设置为打开或关闭,默认打开。打开此属性时,准备脚本创建私钥和根证书,用于生成/验证注册表令牌。当由外部来源提供密钥和根证书时,将此属性设置为 off。

ssl_cert: ssl证书的路径,仅当协议设置为https 时才应用。

ssl_cert_key: ssl密钥的路径,仅当协议设置为 https时才应用。

secretkey_path:用于在复制策略中加密或解密远程register 密码的密钥路径。

2)可选参数
这些参数对于更新是可选的,即用户可以将其保留为默认值,并在启动 Harbor后在 web ul上进行更新。如果进入Harbor.cfg,只会在第一次启动 Harbor时生效,随后对这些参数的更新,Harbor.cfg将被忽略。

PS:如果选择通过uI设置这些参数,请确保在启动Harbour后立即执行此操作。具体来说,必须在注册或在 Harbor中创建任何新用户之前设置所需的

auth_mode 当系统中有用户时(除了默认的 admin用户) ,auth_mode不能被修改。具体参数如下:

Email: Harbor需要该参数才能向用户发送“密码重置”电子邮件,并且只有在需要该功能时才需要。

PS:在默认情况下SSL连接时没有启用。如果SMTP服务器需要SSL,但不支持STARTTLS,那么应该通过设置启用sSL email_ssl = TRUE。

harbour_admin_password:管理员的初始密码,只在Harbour第一次启动时生效。之后,此设置将被忽略,并且应U中设置管理员的密码。

PS:默认的用户名/密码是admin/Harbor12345。

auth_mode:使用的认证类型,默认情况下,它是 db_auth,即凭据存储在数据库中。对于LDAP身份验证(以文件形式验证),将其设置为 ldap_auth。

self_registration:启用/禁用用户注册功能。禁用时,新用户只能由 Admin用户创建,只有管理员用户可以在 Harbour中创建新用户。

PS:当auth_mode设置为 ldap_auth时,自注册功能将始终处于禁用状态,并且该标志被忽略。

Token_expiration:由令牌服务创建的令牌的到期时间(分钟),默认为30分钟。

project_creation_restriction:用于控制哪些用户有权创建项目的标志。默认情况下,每个人都可以创建一个项目。如果将其值设置为“adminonly”,那么只有admin可以创建项目。

verify_remote_ceit:打开或关闭,默认打开。此标志决定了当Harbor与远程 register实例通信时是否验证SSL/TLS 证书。将此属性设置为 off 将绕过SSL/TLS验证,这在远程实例具有自签名或不可信证书时经常使用。

另外,默认情况下,Harbor将镜像存储在本地文件系统上。在生产环境中,可以考虑使用其他存储后端而不是本地文件系统,
如S3、Openstack Swif、Ceph 等。但需要更新common/templates/registry/config.yml文件。

启动harbor

[root@harbor /usr/local/harbor]# sh /usr/local/harbor/install.sh

 查看harbor的镜像和容器

#####docker harbor启动镜像
[root@harbor /usr/local/harbor]# docker images
REPOSITORY                  TAG            IMAGE ID       CREATED       SIZE
vmware/registry             2.6.2-photon   c38af846a0da   4 years ago   240MB
vmware/nginx-photon         1.11.13        2971c92cc1ae   4 years ago   200MB
vmware/harbor-log           v1.2.2         36ef78ae27df   4 years ago   200MB
vmware/harbor-jobservice    v1.2.2         e2af366cba44   4 years ago   164MB
vmware/harbor-ui            v1.2.2         39efb472c253   4 years ago   178MB
vmware/harbor-adminserver   v1.2.2         c75963ec543f   4 years ago   142MB
vmware/harbor-db            v1.2.2         ee7b9fa37c5d   4 years ago   329MB

###harbor启动的容器
[root@harbor /usr/local/harbor]# docker ps -a
CONTAINER ID   IMAGE                              COMMAND                  CREATED         STATUS                   PORTS                                                                                                                 NAMES
b3730588275b   vmware/harbor-jobservice:v1.2.2    "/harbor/harbor_jobs…"   3 minutes ago   Up 3 minutes                                                                                                                                   harbor-jobservice
0fe2805ffc41   vmware/nginx-photon:1.11.13        "nginx -g 'daemon of…"   3 minutes ago   Up 3 minutes             0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp, 0.0.0.0:4443->4443/tcp, :::4443->4443/tcp   nginx
82f3593341c3   vmware/harbor-ui:v1.2.2            "/harbor/harbor_ui"      3 minutes ago   Up 3 minutes                                                                                                                                   harbor-ui
c25fc7c74391   vmware/harbor-db:v1.2.2            "docker-entrypoint.s…"   3 minutes ago   Up 3 minutes             3306/tcp                                                                                                              harbor-db
596b37337b52   vmware/registry:2.6.2-photon       "/entrypoint.sh serv…"   3 minutes ago   Up 3 minutes (healthy)   5000/tcp                                                                                                              registry
afc4ff9606f0   vmware/harbor-adminserver:v1.2.2   "/harbor/harbor_admi…"   3 minutes ago   Up 3 minutes                                                                                                                                   harbor-adminserver
8f7337ecacb3   vmware/harbor-log:v1.2.2           "/bin/sh -c 'crond &…"   3 minutes ago   Up 3 minutes             127.0.0.1:1514->514/tcp                                                                                               harbor-log

访问harbor

真机访问192.168.37.107

账号:admin

密码:Harbor12345

 

创建一个项目

 

 

 默认情况下, Register服务器在端口 80 上侦听

[root@harbor /usr/local/harbor]# ss -natp |grep 80
LISTEN     0      128          *:80                       *:*                   users:(("docker-proxy",pid=44451,fd=4))
LISTEN     0      128         :::80                      :::*                   users:(("docker-proxy",pid=44458,fd=4))

此时可使用 Docker 命令在本地通过 127.0.0.1 来登录和推送镜像

[root@harbor /usr/local/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(测试的话使用cirros镜像,体积小)

###拉取镜像
[root@harbor /usr/local/harbor]# docker pull cirros
Using default tag: latest
latest: Pulling from library/cirros
d0b405be7a32: Pull complete
bd054094a037: Pull complete
c6a00de1ec8a: Pull complete
Digest: sha256:1e695eb2772a2b511ccab70091962d1efb9501fdca804eb1d52d21c0933e7f47
Status: Downloaded newer image for cirros:latest
docker.io/library/cirros:latest

###镜像打标签
[root@harbor /usr/local/harbor]# docker tag cirros:latest 127.0.0.1/xiaobin/cirros:v2


##上传镜像
[root@harbor /usr/local/harbor]# docker push 127.0.0.1/xiaobin/cirros:v2
The push refers to repository [127.0.0.1/xiaobin/cirros]
984ad441ec3d: Pushed
f0a496d92efa: Pushed
e52d19c3bee2: Pushed
v2: digest: sha256:483f15ac97d03dc3d4dcf79cf71ded2e099cf76c340f3fdd0b3670a40a198a22 size: 943

此时回到harbor页面,创建的晓彬项目下有了我们上传的镜像了。

                 通过本机IP登录harbor

        以上操作都是在harbor服务器本地操作,如果其他客户端想上传镜像到harbor,需要连接至harbor服务器! 因为,Docker Registry交互默认使用的是HTTPS,但是搭建私有镜像默认使用的是HTTP服务,所以与私有镜像交互时可能会出现错误

[root@harbor /usr/local/harbor]# docker login 192.168.37.107
Username: admin
Password:
Error response from daemon: Get "https://192.168.37.107/v2/": dial tcp 192.168.37.107:443: connect: connection refused

解决方法① 修改配置文件

[root@harbor /usr/lib/systemd/system]# vim docker.service
.。。
13 ExecStart=/usr/bin/dockerd -H fd:// -insecure-registry 192.168.37.107 --containerd=/run/containerd/containerd.sock

。。。

重启docker

[root@harbor /usr/lib/systemd/system]# systemctl daemon-reload
[root@harbor /usr/lib/systemd/system]# systemctl restart docker

先登出

[root@harbor /usr/lib/systemd/system]# docker logout
Removing login credentials for https://index.docker.io/v1/

再用本机ip地址登录,可以使用docker-compose重启容器

[root@harbor /usr/local/harbor]# docker-compose down -v
Stopping registry   ... done
Stopping harbor-log ... done
Removing nginx              ... done
Removing harbor-jobservice  ... done
Removing harbor-ui          ... done
Removing harbor-db          ... done
Removing harbor-adminserver ... done
Removing registry           ... done
Removing harbor-log         ... done
Removing network harbor_harbor
[root@harbor /usr/local/harbor]# docker-compose up -d
Creating network "harbor_harbor" with the default driver
Creating harbor-log ... done
Creating registry           ... done
Creating harbor-adminserver ... done
Creating harbor-db          ... done
Creating harbor-ui          ... done
Creating harbor-jobservice  ... done
Creating nginx              ... done
[root@harbor /usr/local/harbor]# docker login -u admin -p Harbor12345 http://192.168.37.107
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

重新打上tag

[root@harbor /usr/local/harbor]# docker tag cirros:latest 192.168.37.107/xiaobin/cirros:v5
[root@harbor /usr/local/harbor]# docker push 192.168.37.107/xiaobin/cirros:v5
The push refers to repository [192.168.37.107/xiaobin/cirros]
984ad441ec3d: Layer already exists
f0a496d92efa: Layer already exists
e52d19c3bee2: Layer already exists
v5: digest: sha256:483f15ac97d03dc3d4dcf79cf71ded2e099cf76c340f3fdd0b3670a40a198a22 size: 943

刷新harbor网页查看

 解决本机ip地址不能上传harbor的一个问题就解决啦

还有一种方法就是直接添加IP地址也可以

[root@localhost /etc/docker]# vim daemon.json 
{
  "insecure-registries":["http://192.168.37.107"],
  "registry-mirrors": ["https://mf7z1s6m.mirror.aliyuncs.com"]
}

总结

        VMware开源的企业级Registry项目Harbor,以Docker公司开源的registry 为基础,提供了管理UI, 基于角色的访问控制(Role Based Access Control),AD/LDAP集成、以及审计日志(Audit logging) 等企业用户需求的功能,同时还原生支持中文,主要特点有:基于角色的访问控制、 镜像复制、图形化用户界面 、AD/LDAP 支持 、审计管理、国际化、RESTful API 、部署简单

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小柏ぁ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值