Docker--harbor私有仓库部署与管理

  • Harbor简介
    • 什么是Harbor
    • Harbor 的特性
    • Harbor的构成
  • Harbor部署
    • 关于Harbor.cfg 配置文件中有两类参数:所需参数和可选参数
  • 维护管理Harbor

Harbor简介

什么是Harbor

Harbor是VMware公司开源的企业级Docker Registry 项目,其目标是帮助用户迅速搭建一个 企业级的Docker Registry 服务。
Harbor以Docker 公司开源的Registry 为基础,提供了图形管理UI、基于角色的访问控制(Role Based AccessControl)、AD/LDAP集成、以及审计日志(Auditlogging)等企业用户需求的功能,同时还原生支持中文。
Harbor的每个组件都是以Docker 容器的形式构建的,使用docker - compose来对它进行部署。用于部署Harbor 的docker- compose模板位于harbor/ docker-compose.yml。

Harbor 的特性

1、基于角色控制:用户和仓库都是基于项目进行组织的,而用户在项目中可以拥有不同的权限。
2、基于镜像的复制策略:镜像可以在多个Harbor实例之间进行复制(同步),
3、支持LDAP/AD: Harbor 可以集成企业内部有的AD/LDAP (类似数据库的一-张表),用于对已经存在的用户认证和管理。
4、镜像删除和垃圾回收:镜像可以被删除,也可以回收镜像占用的空间。
5、图形化用户界面:用户可以通过浏览器来浏览,搜索镜像仓库以及对项目进行管理。
6、审计管理:所有针对镜像仓库的操作都可以被记录追溯,用于审计管理。
7、支持RESTful API: RESTful API提供给管理员对于Harbor 更多的操控,使得与其它管理软件集成变得更容易。
8、Harbor和docker registry的关系: Harbor实质上是对docker registry做了封装,扩展了自己的业务模板。

Harbor的构成

Harbor在架构上主要有Proxy、 Registry、 Core services、 Database ( Harbor-db)、Log collector ( Harbor-log)、Job services
六个组件。1.Proxy: Harbor 的Registry、UI、Token 服务等组件,都处在nginx 反向代理后边。该代理将来自浏览器、docker clients .的请求转发到后端不同的服务上。2.Registry:负责储存Docker 镜像,并处理Docker push/pull 命令。由于要对用户进行访问控制,即不同用户对Docker镜像有不同的读写权限,Registry 会指向一个Token 服务,强制用户的每次Docker pull/push 请求都要携带一个合法的Token,Registry会通过公钥对Token 进行解密验证。3.Core services: Harbor的核心功能,主要提供以下3个服务:
1) UI (harbor-ui) :提供图形化界面,帮助用户管理Registry. 上的镜像(image) ,并对用户进行授权。
2) WebHook: 为了及时获取Registry.上 image状态变化的情况,在Registry上配置Webhook, 把状态变化传递给UI模块。
3) Token 服务:负责根据用户权限给每个Docker push/pull 命令签发Token。 Docker 客户端向Registry 服务发起的请求,如果不包含Token, 会被重定向到Token 服务,获得Token 后再重新向Registry 进行请求。4.Database (harbor-db) :为core services提 供数据库服务,负责储存用户权限、审计日志、Docker镜像分组信息等数据。5.Job services:主要用于镜像复制,本地镜像可以被同步到远程Harbor实例上。6.Log collector (harbor-log) :负责收集其他组件的日志到一个地方。Harbor的每个组件都是以Docker 容器的形式构建的,因此,使用Docker Compose 来对它进行部署。
总共分为7个容器运行,通过在docker- compose . yml所在目录中执行docker-compose ps命令来查看,
名称分别为: nginx、harbor-jobservice、harbor-ui、harbor-db、harbor-adminserver、registry、harbor-log。
其中harbor-adminserver主要是作为一个后端的配置数据管理,并没有太多的其他功能。harbor-ui所要操作的所有数据都通过harbor:-adminserver这样一个数据配置管理中心来完成。

Harbor部署

服务器 ip 所需服务
Harbor服务器 192.168.154.80 docker-ce、docker- compose、harbor-offline-v1.2.2
client服务器 192.168.154.30 docker-ce .

1.部署Docker -Compose 服务
下载或者上传Docker -Compose
Docker -Compose安装包:
链接:https://pan.baidu.com/s/1RprxV9sAWlAU9TLZ0oJyCw
提取码:d3lh
–来自百度网盘超级会员V3的分享

chmod +x /usr/local/bin/docker-compose
docker-compose -v

2.部署Harbor服务
(1)下载或上传Harbor 安装程序
链接:https://pan.baidu.com/s/1e3bz4TYA5M-usP2eRewS5A
提取码:qpkv
–来自百度网盘超级会员V3的分享

tar zxvf harbor-offline-installer-v1.2.2.tgz -C /usr/local/

(2)修改harbor安装的配置文件

vim /usr/local/harbor/harbor.cfghostname = 192.168.154.80   #5行修改,设置为Harbor服务器的IP地址或者域名harbor_admin password = Harbor12345  #59行指定管理员的初始密码,默认的用户名/密码是admin/Harbor12345

关于Harbor.cfg 配置文件中有两类参数:所需参数和可选参数

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

参数 说明
hostname 用于访问用户界面和register 服务。它应该是目标机器的IP地址或完全限定的域名(FQDN),例如192.168.154.80 或hub.sk.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 时才应用。
secretkey_path 用于在复制策略中加密或解密远程register密码的密钥路径。

2、可选参数:这些参数对于更新是可选的,即用户可以将其保留为默认值,并在启动Harbor后在WebUI.上进行更新。如果进入Harbor.cfg,只会在第一次启动Harbor 时生效,随后对这些参数的更新,Harbor.cfg 将被忽略。
注意:如果选择通过UI设置这些参数,请确保在启动Harbor后立即执行此操作。具体来说,必须在注册或在Harbor中创建任何新用户之前设置所需的auth_mode。当系统中有用户时(除了默认的admin用户),auth_mode不能被修改。

参数 说明
Email Harbor需要该参数才能向用户发送“密码重置"电子邮件,并且只有在需要该功能时才启用。请注意,在默认情况下SSL.连接时没有启用。如果SMTP服务器需要SSL, 但不支持STARTTLS, 那么应该通过设置启用SSL email_ssl = TRUE。
harbour_admin password 管理员的初始密码,只在Harbour 第一次启动时生效。之后,此设置将被忽略,并且应在UI中设置管理员的密码。请注意,默认的用户名/密码是admin/Harbor12345。
auth_mode 使用的认证类型,默认情况下,它是db_auth, 即凭据存储在数据库中。对于LDAP身份验证,请将其设置为ldap_auth。
self_registration 启用/禁用用户注册功能。禁用时,新用户只能由Admin用户创建,只有管理员用户可以在Harbour中创建新用户。注意:当auth_mode设置为1dap_auth时,自注册功能将始终处于禁用状态,并且该标志被忽略。
Token_expiration 由令牌服务创建的令牌的到期时间(分钟),默认为30分钟。
project_creation_restriction 用于控制哪些用户有权创建项目的标志。默认情况下,每个人都可以创建一个项目。如果将其值设置为"adminonly", 那么只有admin 可以创建项目。
verify_remote_cert: 打开或关闭,默认打开。此标志决定了当Harbor与远程register 实例通信时是否验证SSL/TLS 证书。将此属性设置为off 将绕过SSL/TLS验证,这在远程实例具有自签名或不可信证书时经常使用。

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

3.启动Harbor

cd /usr/local/harbor/
./install.sh

4.查看Harbor 启动镜像

docker-compose ps

5.创建一个新项目

(1)浏览器访问: http://192.168.154.80 登录Harbor WEB UI界面,默认的管理员用户名和密码是admin/Harbor12345
(2)输入用户名和密码脊录界面后可以创建一个新项目。占击"+项日"按钮
(3)填写项目名称为“my-sk", 点击“确定”按钮,创建新项日
(4)此时可使用Docker 命令在本地通过127.0.0.1 来登录和推送镜像。默认情况下,Registry 服务器在端口80上侦听。登录Harbor
docker login -u admin -p Harbor12345 http://127.0.0.1下载镜像进行测试
docker pull nginx将镜像打标签
格式: docker tag镜像:标签仓库IP/项目 名称/镜像名:标签
docker tag nginx:latest 127.0.0.1/my-sk/nginx:v1上传镜像到Harbor
docker push 127.0.0.1/my-sk/nginx:v1(5)在Harbor 界而myproject-sk目录下可看见此镜像及相关信息


6.在其他客户端上传镜像
以上操作都是在Harbor 服务器本地操作。如果其他客户端登录到Harbor, 就会报如下错误。出现这问题的原因为Docker Registry
交互默认使用的是HTTPS, 但是搭建私有镜像默认使用的是HTTP 服务,所以与私有镜像交互时出现以下错误。

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

(1)在Docker客户端配置操作

解决办法是:在Docker server 启动的时候,增加启动参数,默认使用HTTP访问。

vim /usr/lib/systemd/system/docker.service
13行修改
ExecStart=/usr/bin/dockerd -H fd:// --insecure-registry 192.168.154.80 --containerd=/run/containerd/containerd. sock
或
ExecStart=/usr/bin/dockerd --insecure-registry 192.168.154.80

重启Docker, 再次登录

systemctl daemon-reload
systemctl restart docker

再次登录Harbor

docker login -u admin -p Harbor12345 http://192.168.154.80WARNING! Using --password via the CLI is insecure. Use --password-stdin.
WARNING! Your password will be stored unencrypted in /root/.docker/config. json.
Login Succeeded将自动保存凭据到/root/.docker/config. json,下次登录时可直接使用凭据登录Harbor

下载镜像进行测试

docker pull 192.168.154.80/my-sk/nginx:v1

上传镜像进行测试

docker pull cirros
docker tag cirros:latest 192.168.154.80/my-sk/cirros:v2docker push 192.168.154.80/my-sk/cirros:v2

(2)刷新Harbor 的Web 管理界而进行查看,会发现my-sk项目里而有两个镜像

维护管理Harbor

1.通过Harbor Web创建项目

在Harbor仓库中,任何镜像在被push到regsitry 之前都必须有一个自己所属的项目。
单击“+项目”,填写项目名称,项目级别若设置为"私有",则不勾选。如果设置为公共仓库,则所有人对此项目下的镜像拥有读权限,命令行中不需要执行"Docker login"即可下载镜像,镜像操作与Docker Hub一致。

2.创建Harbor 用户
(1)创建用户并分配权限

在Web管理界面中单击系统管理->用户管理-> +用户,
填写用户名为“sk-sun",邮箱为“sk-sun@sk.com",全名为“sun”,密码为“Abc123456”,注释为“管理员”(可省略)。
附:用户创建成功后,单击左侧"...”按钮可将上述创建的用户设置为管理员角色或进行删除操作,本例不作任何设置。

(2)添加项目成员

单击项目-> myproject-sk-> 成员-> +成员,填写上述创建的用户sk-sun并分配角色为“开发人员”。
附:此时单击左侧“...”按钮仍然可对成员角色进行变更或者删除操作

(3)在客户端上使用普通账户操作镜像
删除上述打标签的本地镜像

docker rmi 192.168.154.80/myproject-sk/cirros:v2

先退出当前用户,然后使用上述创建的账户sk-sun登录

docker logout 192.168.154.80
docker login 192.168.154.80
或
docker login -u sk-sun -P Abc123456 http://192.168.154.80

下载和上传镜像进行测试

docker pull 192.168.154.80/myproject-sk/cirros:v2
docker tag cirros:latest 192.168.154.80/myproject-sk/cirros:v3
docker push 192.168.154.80/myproject-sk/cirros:v3

3.查看日志
web界面日志,操作日志按时间顺序记录用户相关操作
4.修改Harbor.cfg 配置文件
要更改Harbour的配置文件中的可选参数时,请先停止现有的Harbour实例并更新Harbor.cfg; 然后运行prepare脚本来填充配置;
最后重新创建并启动Harbour的实例。
使用docker-compose 管理Harbor 时,必须在与docker-compose. yml相同的目录中运行。

cd /usr/local/harbor
docker-compose down -Vvim harbor.cfg        #只能修改可选参数
./prepare
docker-compose up -d

如果有以下报错,需要开启防火墙firewalld 服务解决

Creating network "harbor_ harbor" with the default driver
ERROR: Failed to Setup IP tables: Unable to enable SKIP DNAT rule:
(iptables failed: iptables --wait -t nat -I DOCKER
-i br-b53c314f45e8 -j RETURN: iptables: No chain/target/match by that name.
(exit status 1))
systemctl restart firewalld. service
docker-compose up -d

5.移除Harbor服务容器同时保留镜像数据/数据库,并进行迁移

在Harbor服务器上操作
(1)移除Harbor 服务容器

cd /usr/local/harbor
docker-compose down -v

(2)把项目中的镜像数据进行打包
持久数据,如镜像,数据库等在宿主机的/data/目录下,日志在宿主机的/var/log/Harbor/目录下

ls /data/registry/docker/registry/v2/repositories/myproject-sk
cd /data/registry/docker/registry/v2/repositories/myproject-sk
tar zcvf sk-registry.tar.gz ./*

6.如需重新部署,需要移除Harbor 服务容器全部数据

cd /usr/local/harbor
docker-compose down -v
rm -r /data/database
rm -r /data/registry

Docker--harbor相关推荐

  1. Docker Harbor概述及构建

    目录 一.Docker Harbor概述 1.1 Harbor的优势 1.2 Harbor的核心组件 1.2.1 Proxy 1.2.2 Registry 1.2.3 Core services 1. ...

  2. 安装使用docker harbor作为私有docker服务器的操作步骤及遇到的问题

    安装使用docker harbor作为私有docker服务器的操作步骤及遇到的问题 一.ubuntu18.04安装docker harbor步骤及遇到的问题 二.关于docker commit及doc ...

  3. Docker harbor私有仓库部署与管理

    Docker harbor私有仓库部署与管理. 前言 一.什么是Harbor 二.Harbor的特性 三.Harbor的构成 四.Harbor部署 4.1 环境准备 4.2 部署Docker Comp ...

  4. Docker Harbor

    目录 一.Docker Harbor概述 1.Harbor的优势 2.Harbor知识点 3.Docker私有仓库架构 二.Harbor构建Docker私有仓库 1.环境配置 2.案例需求 3.部署d ...

  5. Docker -- Harbor介绍

    Harbor Docker Harbor 部署私有仓库.它以 Registry 为基础,提供了对用户友好的管理界面,可以帮助我们快速搭建一个企业级的 Docker Registry 服务.Harbor ...

  6. 肝2022世界杯,怒写企业级镜像私仓Docker+Harbor实践

    2022-12-09 揭幕2022卡塔尔世界杯4强角逐的第一天,越来越精彩了 同时记录程序猿的成长~ 1.背景 由于期望搭建一个企业级CICD的环境,开始尝试常规的gitlab+jenkins+k8s ...

  7. 【赵强老师】什么是Docker Harbor

    先看视频. [赵强老师]什么是Docker Harbor 什么是Harbor? Docker容器应用的开发和运行离不开可靠的镜像管理,虽然Docker官方也提供了公共的镜像仓库,但是从安全和效率等方面 ...

  8. docker Harbor 问题

    1:prepare失败 KeyError: 'data_volume' 解决:https://blog.csdn.net/u011709380/article/details/114258655 将h ...

  9. docker Harbor

    1:prepare失败 KeyError: 'data_volume' 解决:https://blog.csdn.net/u011709380/article/details/114258655 将h ...

  10. docker harbor 域名_超详细的搭建docker私服Harbor教程

    概述 "集装箱"是Docker设计哲学之所在,它让一台物理机(或者虚拟机)同时运行多个相互隔离的应用变得更为轻松简朴,固然这一切照样多亏Linux的相关底层手艺,固然,也包罗OS ...

最新文章

  1. pytorch 多GPU训练
  2. 一个高性能RPC框架原理剖析
  3. 认证服务器的搭建_OAuth2.0分布式系统环境搭建
  4. wxWidgets:拖放概述
  5. ARKit文档翻译之AROrientationTrackingConfiguration类
  6. SAP SD数据库表一览
  7. 【语义分割】PSPNet:Pyramid Scene Parsing Network
  8. Restrictions查询用法
  9. 多项目开发下的dll文件管理
  10. linux时间轮 Timing-Wheel的实现
  11. 别以为JDK8有了红黑树,HashMap就不会有死循环问题!
  12. PT短网址缩短还原网站源码,php版+html版
  13. charles浏览器抓包https_十分钟学会Charles抓包(iOS的http/https请求)
  14. 35. 内容协商和转码
  15. Atitit 项目管理之时间管理之道 attilax著 艾龙 著 1. 项目活动的分解和定义 1 2. 第2章|项目活动定义与活动排序 13 1 3. 项目活动资源需求估计 2 4. 里程碑节点 2
  16. 暴风电视刷鸿蒙系统刷机包,暴风电视蓝屏怎么解决
  17. 过极验滑块破解-小米商城app过滑块
  18. [网易]2018校园招聘编程题真题集合
  19. 可以将 UI 设计图直接生成代码,简直太神奇了,这真的是解放了程序员生产力吗?...
  20. xcopy 复制目录及子目录

热门文章

  1. 解决ie8下onpropertychange事件间歇性失效的问题
  2. 基于Java的QQ屏幕截图工具的设计与实现(论文+PPT+源码)
  3. 【C语言】游戏项目:《疯狂赛车》,每个人都要加油活下去
  4. STM32单片机—编码器测速
  5. beego 接口签名(时间戳+toke)
  6. Echarts之圆饼图用法
  7. 机器学习之---马尔可夫随机场实例
  8. Halcon2019软件安装教程
  9. jsp九大内置对象及作用是什么!
  10. java 聊天室开源_用java WebSocket做一个聊天室