企业级Docker仓库Harbor安装、管理与使用
wptr33 2024-11-12 14:21 28 浏览
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。
相关推荐
- 高性能并发队列Disruptor使用详解
-
基本概念Disruptor是一个高性能的异步处理框架,是一个轻量的Java消息服务JMS,能够在无锁的情况下实现队列的并发操作Disruptor使用环形数组实现了类似队列的功能,并且是一个有界队列....
- Disruptor一个高性能队列_java高性能队列
-
Disruptor一个高性能队列前言说到队列比较熟悉的可能是ArrayBlockingQueue、LinkedBlockingQueue这两个有界队列,大多应用在线程池中使用能保证线程安全,但其安全性...
- 谈谈防御性编程_防御性策略
-
防御性编程对于程序员来说是一种良好的代码习惯,是为了保护自己的程序在不可未知的异常下,避免带来更大的破坏性崩溃,使得程序在错误发生时,依然能够云淡风轻的处理,但很多程序员入行很多年,写出的代码依然都是...
- 有人敲门,开水开了,电话响了,孩子哭了,你先顾谁?
-
前言哎呀,这种情况你肯定遇到过吧!正在家里忙活着,突然——咚咚咚有人敲门,咕噜咕噜开水开了,铃铃铃电话响了,哇哇哇孩子又哭了...我去,四件事一起来,人都懵了!你说先搞哪个?其实这跟我们写Java多线...
- 面试官:线程池如何按照core、max、queue的执行顺序去执行?
-
前言这是一个真实的面试题。前几天一个朋友在群里分享了他刚刚面试候选者时问的问题:"线程池如何按照core、max、queue的执行循序去执行?"。我们都知道线程池中代码执行顺序是:co...
- 深入剖析 Java 中线程池的多种实现方式
-
在当今高度并发的互联网软件开发领域,高效地管理和利用线程资源是提升程序性能的关键。Java作为一种广泛应用于后端开发的编程语言,为我们提供了丰富的线程池实现方式。今天,就让我们深入探讨Java中...
- 并发编程之《彻底搞懂Java线程》_java多线程并发解决方案详解
-
目录引言一、核心概念:线程是什么?...
- Redis怎么实现延时消息_redis实现延时任务
-
一句话总结Redis可通过有序集合(ZSET)实现延时消息:将消息作为value,到期时间戳作为score存入ZSET。消费者轮询用ZRANGEBYSCORE获取到期消息,配合Lua脚本保证原子性获取...
- CompletableFuture真的用对了吗?盘点它最容易被误用的5个场景
-
在Java并发编程中,CompletableFuture是处理异步任务的利器,但不少开发者在使用时踩过这些坑——线上服务突然雪崩、异常悄无声息消失、接口响应时间翻倍……本文结合真实案例,拆解5个最容易...
- 接口性能优化技巧,有点硬_接口性能瓶颈
-
背景我负责的系统到2021年初完成了功能上的建设,开始进入到推广阶段。随着推广的逐步深入,收到了很多好评的同时也收到了很多对性能的吐槽。刚刚收到吐槽的时候,我们的心情是这样的:...
- 禁止使用这5个Java类,每一个背后都有一段"血泪史"
-
某电商平台的支付系统突然报警:大量订单状态异常。排查日志发现,同一笔订单被重复支付了三次。事后复盘显示,罪魁祸首竟是一行看似无害的SimpleDateFormat代码。在Java开发中,这类因使用不安...
- 无锁队列Disruptor原理解析_无锁队列实现原理
-
队列比较队列...
- Java并发队列与容器_java 并发队列
-
【前言:无论是大数据从业人员还是Java从业人员,掌握Java高并发和多线程是必备技能之一。本文主要阐述Java并发包下的阻塞队列和并发容器,其实研读过大数据相关技术如Spark、Storm等源码的,...
- 线程池工具及拒绝策略的使用_线程池处理策略
-
线程池的拒绝策略若线程池中的核心线程数被用完且阻塞队列已排满,则此时线程池的资源已耗尽,线程池将没有足够的线程资源执行新的任务。为了保证操作系统的安全,线程池将通过拒绝策略处理新添加的线程任务。...
- 【面试题精讲】ArrayBlockingQueue 和 LinkedBlockingQueue 区别?
-
有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步,认准...
- 一周热门
-
-
C# 13 和 .NET 9 全知道 :13 使用 ASP.NET Core 构建网站 (1)
-
程序员的开源月刊《HelloGitHub》第 71 期
-
详细介绍一下Redis的Watch机制,可以利用Watch机制来做什么?
-
假如有100W个用户抢一张票,除了负载均衡办法,怎么支持高并发?
-
如何将AI助手接入微信(打开ai手机助手)
-
Java面试必考问题:什么是乐观锁与悲观锁
-
SparkSQL——DataFrame的创建与使用
-
redission YYDS spring boot redission 使用
-
一文带你了解Redis与Memcached? redis与memcached的区别
-
如何利用Redis进行事务处理呢? 如何利用redis进行事务处理呢英文
-
- 最近发表
- 标签列表
-
- git pull (33)
- git fetch (35)
- mysql insert (35)
- mysql distinct (37)
- concat_ws (36)
- java continue (36)
- jenkins官网 (37)
- mysql 子查询 (37)
- python元组 (33)
- mybatis 分页 (35)
- vba split (37)
- redis watch (34)
- python list sort (37)
- nvarchar2 (34)
- mysql not null (36)
- hmset (35)
- python telnet (35)
- python readlines() 方法 (36)
- munmap (35)
- docker network create (35)
- redis 集合 (37)
- python sftp (37)
- setpriority (34)
- c语言 switch (34)
- git commit (34)