百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT技术 > 正文

企业级Docker仓库Harbor安装、管理与使用

wptr33 2024-11-12 14:21 17 浏览

1. 环境准备

1.1. 硬件

注意: 磁盘大小需要根据实际使用场景来确定

1.2. 软件

1.3. 网络

2. Harbor配置

2.1. Harbor程序下载

可以通过Harbor的https://github.com/goharbor/harbor/releases下载。

2.2. 解压压缩包

tar xvf harbor-online-installer-<version>.tgz

2.3. 修改配置文件

解压压缩包会得到harbor文件夹,harbor.cfg配置文件位于文件夹根目录。在harbor.cfg中有两类参数,必需参数和可选参数。

· 必要参数:需要在配置文件中设置这些参数。如果用户更新harbor.cfg并运行install.sh脚本以重新安装Harbor,更改的参数将生效。

· 可选参数:这些参数对于更新是可选的,即用户可以将它们保留为默认值,并在启动Harbour后在Web UI上更新它们。如果已经配置harbor.cfg,这些参数只会在首次启动Harbour时生效。harbor.cfg将忽略对这些参数的后续修改。

注意:如果您选择通过UI设置这些参数,请务必在Harbour启动后立即执行此操作。特别是,您必须在Harbour中注册或创建新用户之前,设置所需的auth_mode。当系统中有用户时(除默认管理员用户外),无法更改auth_mode。

参数如下所述 - 请注意,至少需要更改hostname参数。

2.4. 必需参数

· hostname:

目标主机的主机名,用于访问UI和Harbor服务。它应该是目标主机的IP地址或域名(FQDN),例如,192.168.1.10或reg.yourdomain.com。不要使用localhost或127.0.0.1作为主机名,因为外部客户端需要访问Harbor服务!

· ui_url_protocol :

( http或https。默认为http)用于访问UI和令牌/通知服务的协议。如果启用了公证,则此参数必须为https。默认情况下,这是http。要设置https协议,请参阅使用HTTPS访问配置Harbor。

· db_password:

用于db_auth的MySQL数据库的root密码。生产环境请修改此密码

· max_job_workers :

(默认值为3)作业服务中的最大复制工作数。对于每个镜像复制作业,程序将存储库的所有标记同步到远程目标。增加此数量可以在系统中实现更多并发复制作业。但是,由于每个复制进程都消耗一定的网络/CPU/IO资源,请根据主机的硬件资源仔细选择该参数的值。

· customize_crt:

(on或off,默认为on),如果此属性on,准备脚本创建私钥和根证书,用于生成/验证registry的令牌。当外部源提供密钥和根证书时,将此属性设置为off。

· ssl_cert:

SSL证书的路径,仅在协议设置为https时应用

· ssl_cert_key:

SSL密钥的路径,仅在协议设置为https时应用

· secretkey_path:

用于加密或解密复制策略中远程Harbor密码的密钥路径。

· log_rotate_count:

日志文件在被删除之前会被轮转log_rotate_count次。如果count为0,则删除旧版本而不是轮转。

· log_rotate_size:

仅当日志文件大于log_rotate_size字节时才会轮转日志文件。如果大小后跟k,则假定大小以千字节为单位。如果使用M,则大小以兆字节为单位,如果使用G,则大小为千兆字节。尺寸100,尺寸100k,尺寸100M和尺寸100G都是有效的。

2.5. 可选参数

Email settings:

Harbor需要这些参数才能向用户发送"密码重置"电子邮件,并且仅在需要该功能时才做配置。另外,请注意,在默认情况下SSL连接没有启用,如果您的SMTP服务器需要SSL,那么您应该通过设置email_ssl = TRUE参数来启用SSL,但不支持STARTTLS。如果电子邮件服务使用自签名证书或不受信任证书,则需要设置email_insecure = true。

- email_server = smtp.mydomain.com
- email_server_port = 25
- email_identity =
- email_username = [sample_admin@mydomain.com](mailto:sample_admin@mydomain.com)
- email_password = abc
- email_from = admin [sample_admin@mydomain.com(mailto:sample_admin@mydomain.com)
- email_ssl = false
- email_insecure = false

· harbor_admin_password:

管理员的初始密码。此密码仅在Harbor首次启动时生效。之后将忽略此设置,并且应在UI中设置管理员密码。请注意:默认用户名/密码为admin/Harbor12345

· auth_mode:

使用的身份验证类型。默认情况下,它是db_auth,即凭据存储在数据库中。对于LDAP身份验证,请将其设置为ldap_auth。

重要信息:从现有Harbor实例升级时,必须确保在启动新版本的Harbor之前,harbor.cfg配置文件中auth_mode相同。否则,用户可能无法在升级后登录。

· ldap_url:LDAP连接URL(例如ldaps://ldap.mydomain.com)。 仅在**auth_mode**设置为ldap_auth时使用。

· ldap_searchdn:具有搜索LDAP/AD服务器权限的用户的DN(例如uid=admin,ou=people,dc=mydomain,dc=com)。

· ldap_search_pwd:ldap_searchdn指定的用户密码。

· ldap_basedn:查找用户的基本DN,例如ou=people,dc=mydomain,dc=com。 仅在**auth_mode**设置为ldap_auth时使用。

· ldap_filter:用于查找用户的搜索过滤器,例如(objectClass=person)。

· ldap_uid:用于在LDAP搜索期间匹配用户的属性,它可以是uid,cn,email或其他属性。

· ldap_scope:搜索用户的范围,0-LDAP_SCOPE_BASE,1-LDAP_SCOPE_ONELEVEL,2-LDAP_SCOPE_SUBTREE。默认值为2。

· self_registration :( on或off。默认on)启用/禁用用户自助注册功能。禁用时,新用户只能由管理员用户创建,只有管理员可以在Harbor中创建新用户。 注意:当auth_mode设置为ldap_auth时*,始终禁用自助注册功能,并忽略此设置。*

· token_expiration:令牌服务创建的令牌到期时间(以分钟为单位),默认为30分钟。

· project_creation_restriction:用于控制用户有权创建项目的设置。默认情况下,每个人都可以创建一个项目,设置为"adminonly",只有管理员才能创建项目。

2.6. 配置存储后端(可选)

默认情况下,Harbor将镜像存储在本地文件系统中。在生产环境中,您可以考虑使用其他存储后端而不是本地文件系统,如S3,OpenStack Swift,Ceph等。您需要更新的是storage文件中的部分common/templates/registry/config.yml。例如,如果您使用Openstack Swift作为存储后端,则该部分可能如下所示:

storage:
  swift:
    password: ADMIN_PASS
    authurl: http://keystone_addr:35357/v3/auth
    tenant: admin
    domain: default
    region: regionOne
    container: docker_images

注意:有关注册表存储后端的详细信息,请参阅registry配置参考。

2.7. Harbor监听自定义端口

默认情况下,Harbor监听80(HTTP)和443(HTTPS,如果已配置),您可以使用自定义命令对其进行修改。

· 对于HTTP协议

1. 修改 docker-compose.yml

将第一个80修改为自定义端口,例如8888:80。

proxy:
    image: library/nginx:1.11.5
    restart: always
    volumes:
      - ./config/nginx:/etc/nginx
    ports:
      - 8888:80
      - 443:443
    depends_on:
      - mysql
      - registry
      - ui
      - log
    logging:
      driver: "syslog"
      options:  
        syslog-address: "tcp://127.0.0.1:1514"
        tag: "proxy"

2. 修改harbor.cfg,将端口添加到参数"hostname"

hostname = 192.168.0.2:8888

3. 重新部署Harbour,参考上一节"管理harbor的生命周期"。

· 对于HTTPS协议

方法同HTTP协议

3. Harbor安装

在harbor文件夹中有install.sh脚本,一旦harbor.cfg和存储后端(可选)配置完成,就可以镜像Harbor安装。请注意,在线安装需要一些时间从Docker hub下载Harbor镜像,具体根据实际网络情况。

· 默认安装(没有Notary/Clair)

sudo ./install.sh

Harbor已与Notary和Clair集成(用于漏洞扫描)。但是,默认不安装Notary或Clair服务。

如果一切正常,您应该能够打开浏览器访问http://reg.yourdomain.com/上的管理门户(reg.yourdomain.com为harbor.cfg配置的主机名,默认管理员用户名/密码为admin/Harbor12345)。

登录管理门户并创建一个新项目,例如: myproject。然后,您可以使用docker命令登录和推送镜像。默认情况下,Harbor的默认安装使用HTTP协议,而Docker默认信任https协议。所以,要想docker命令登录和推送镜像,需要添加--insecure-registry到docker 配置文件并重启docker服务。

docker login reg.yourdomain.com
docker push reg.yourdomain.com/myproject/myrepo:mytag

· 使用Notary安装

要使用Notary服务安装Harbour,请在运行install.sh时添加参数:

sudo ./install.sh --with-notary

注意:使用notary安装,参数ui_url_protocol必须设置为"https"。

· 使用Clair安装

要使用Clair服务安装Harbour,请在运行install.sh时添加参数:

sudo ./install.sh --with-clair

· 同时安装Clair和Notary

sudo ./install.sh --with-notary --with-clair

4. 配置HTTPS访问配置Harbor

Harbor不附带任何证书,默认情况下使用HTTP来处理请求。虽然这使得设置和运行相对简单 - 特别是对于开发或测试环境 - 但不建议用于生产环境。要启用HTTPS,请参阅使用HTTPS访问Harbor。

5. Harbor的生命周期

5.1. 默认安装管理Harbor的生命周期

· 开始、停止、重启

您可以使用docker-compose来管理Harbor的生命周期。一些有用的命令列出如下(必须与docker-compose.yml在同一目录中运行)。

sudo docker-compose start/stop/restart

· 更新配置

要更改Harbour的配置,请先停止现有的Harbor实例并进行更新harbor.cfg。然后运行prepare脚本以填充配置。最后重新创建并启动Harbor的实例:

sudo docker-compose down -v
sudo vim harbor.cfg
sudo prepare
sudo docker-compose up -d

· 删除Harbor的容器,同时将镜像数据和Harbor的数据库文件保存在文件系统上

sudo docker-compose down -v

· 删除Harbor的数据库和镜像数据(用于干净的重新安装)

· rm -r /data/database
· rm -r /data/registry

5.2. 与notary或者Clair一起安装时管理Harbor的生命周期

当Harbour与Notary或者Clair一起安装时,docker-compose命令需要指定一个或者两个额外的模板文件。用于管理Harbour生命周期的docker-compose命令是:

sudo docker-compose -f ./docker-compose.yml -f ./docker-compose.notary.yml [ up|down|ps|stop|start ]
sudo docker-compose -f ./docker-compose.yml -f ./docker-compose.notary.yml -f ./docker-compose.clair.yml [ up|down|ps|stop|start ]
如果要在使用Notary安装Harbor时更改配置并重新部署Harbour,则应使用以下命令:
· sudo docker-compose -f ./docker-compose.yml -f ./docker-compose.notary.yml down -v
· sudo vim harbor.cfg
· sudo prepare --with-notary
· sudo docker-compose -f ./docker-compose.yml -f ./docker-compose.notary.yml up -d
sudo docker-compose -f ./docker-compose.yml -f ./docker-compose.notary.yml -f   ./docker-compose.clair.yml down -v
sudo vim harbor.cfg
sudo prepare --with-notary --with-clair
sudo docker-compose -f ./docker-compose.yml -f ./docker-compose.notary.yml -f   ./docker-compose.clair.yml up -d

6. 持久数据和日志文件

默认情况下,镜像数据保留在主机的/data/目录中。即使Harbor的容器被移除或重新创建,此数据仍保持不变。此外,Harbor使用rsyslog来收集每个容器的日志。默认情况下,这些日志文件存储在目标主机上的/var/log/harbor/目录中以进行故障排除。

7. 性能调整

默认情况下,Harbor将Clair容器的CPU使用率限制为150000,并避免耗尽所有CPU资源。这在docker-compose.clair.yml文件中定义,您可以根据硬件配置对其进行修改。

8. 故障排除

· 当Harbor无法正常工作时,请运行以下命令以查明Harbor的所有容器是否处于UP状态:

sudo docker-compose ps

如果容器不是UP状态,检查目录容器的日志文件/var/log/harbor。例如,如果容器harbor-ui未运行,则应查看日志文件ui.log。

相关推荐

C++企业级开发规范指南(c++开发gui)

打造高质量、可维护的C++代码标准一、前言C++作为一门功能强大的系统级编程语言,被广泛应用于操作系统、游戏引擎、高性能服务器、数据库系统等领域。知名互联网公司(如Google、Microsoft、腾...

C++|整型的最值、上溢、下溢、截断、类型提升和转换

整数在计算机内以有限字长表示,当超出最值(有限字长)时,需要截断(溢出,求模)操作。不同字长的整型具有不同的值域,混合运算时,需要类型提升和转换。1整形最值在<limit.h>中有整型的...

C++|漫谈STL细节及内部原理(c++ std stl)

1988年,AlexanderStepanov开始进入惠普的PaloAlto实验室工作,在随后的4年中,他从事的是有关磁盘驱动器方面的工作。直到1992年,由于参加并主持了实验室主任BillWo...

C++11新特性总结 (二)(c++11新特性 pdf)

1.范围for语句C++11引入了一种更为简单的for语句,这种for语句可以很方便的遍历容器或其他序列的所有元素vector<int>vec={1,2,3,4,5,6};f...

C++ STL 漫谈(c++中的stl到底指的什么)

标准模板库(StandardTemplateLibrary,STL)是惠普实验室开发的一个函数库和类库。它是由AlexanderStepanov、MengLee和DavidRMusser在...

C++学习教程_C++语言随到随学_不耽误上班_0基础

C++学习教程0基础学C++也可以,空闲时间学习,不耽误上班.2019年C语言新课程已经上线,随到随学,互动性强,效果好!带你征服C++语言,让所有学过和没有学过C++语言的人,或是正准备学习C++语...

C++遍历vector元素的四种方式(c++ 遍历vector)

vector是相同类型对象的集合,集合中的每个对象有个对应的索引。vector常被称为容器(container)。C++中遍历vector的所有元素是相当常用的操作,这里介绍四种方式。1、通过下标访问...

一起学习c++11——c++11中的新增的容器

c++11新增的容器1:array当时的初衷是希望提供一个在栈上分配的,定长数组,而且可以使用stl中的模板算法。array的用法如下:#include<string>#includ...

C++编程实战基础篇:一维数组应用之投票统计

题目描述班上有N个同学,有五位候选人“A,B,C,D,E”,请所有的同学投票并选举出班长,现在请你编写程序来他们计算候选人的得票总数,每位同学投票将以数字的形式投票“12345”分别代表五位候选人,...

C++20 新特性(6):new表达式也支持数组大小推导

new表达式也支持数组大小推导在C++17标准中,在定义并初始化静态数组时,是可以忽略数组大小,然后通过初始化数据来推导数组的大小。但使用new来定义并初始化动态数组时,并不支持这种自动推导数组大...

C++ 结构体(struct)最全详解(c++结构体用法)

一、定义与声明1.先定义结构体类型再单独进行变量定义structStudent{intCode;charName[20];charSex;intA...

自学 C++ 第 6 课 二维数组找最值

键盘输入一个m×n的二维数组,通过C++编程找出元素中的最大值,并输出其所在的位置坐标。例如,输入一个4×5的二维数组,数组元素分别为{{556623749},{578964563},...

从缺陷中学习C/C++:聊聊 C++ 中常见的内存问题

在写C/C++程序时,一提到内存,大多数人会想到内存泄露。内存泄露是一个令人头疼的问题,尤其在开发大的软件系统时。一个经典的现象是,系统运行了10天、1个月都好好的,忽然有一天宕机了:OOM(Out...

C++开发者都应该使用的十个C++11特性(上)

在C++11新标准中,语言本身和标准库都增加了很多新内容,本文只涉及了一些皮毛。不过我相信这些新特性当中有一些,应该成为所有C++开发者的常规装备。你也许看到过许多类似介绍各种C++11特性的文章。下...

深度解读C/C++指针与数组(c++指针和数组的区别)

指针和数组是密切相关的。事实上,指针和数组在很多情况下是可以互换的。例如,一个指向数组开头的指针,可以通过使用指针的算术运算或数组索引来访问数组。今天我们就来聊一聊数组和指针千丝万缕的关系;一维数组与...