Harbor:打造docker私有镜像库

part 1. Harbor概览

harbor:我们的使命是成为 Kubernetes 值得信赖的云原生存储库

        为什么要使用Harbor?

Harbor是VMware公司开源的企业级容器镜像仓库管理平台,它提供了比基本Docker Registry更丰富的功能,特别适合企业环境使用。提供了镜像存储、签名、扫描、复制和图表管理等功能。

Harbor还包含了许多企业级功能,如:基于角色的访问控制(RBAC),LDAP集成,镜像复制,管理界面,自我注册,中文支持等

Harbor通过这些组件的协同工作,提供了一个全面的容器镜像和Helm图表管理解决方案。

Harbor的一些关键方面:

        1. 用途

Harbor主要用于存储和管理Docker容器镜像,但它的功能远不止于此。它还可以管理Helm图表,这对于Kubernetes环境非常有用。

        2. 私有化部署

虽然Docker官方提供了公共的Docker Hub,但从安全性和效率等方面考虑,企业往往需要自己的私有Registry。Harbor正是为此需求而生。 Harbor允许企业在自己的基础设施上部署私有Docker镜像仓库,这对于保护企业的知识产权和敏感信息至关重要。

        3. 用户体验

Harbor提供了直观的Web界面,使得镜像管理变得简单。用户可以轻松地上传、下载镜像,管理项目和用户权限。

对于中国的企业用户来说,Harbor的中文界面支持可以降低使用门槛,提高操作效率。

Harbor的RBAC功能允许管理员精确控制谁可以访问哪些镜像,这在多团队协作的企业环境中尤为重要。

跨区域复制: 对于地理位置分散的企业,Harbor的镜像复制功能可以确保不同地区的团队都能快速访问所需的容器镜像。

        4. 性能优化

相比于使用公共Docker Hub,使用本地部署的Harbor可以大大提高镜像的上传和下载速度,特别是在处理大型镜像时。

Harbor在处理大量并发请求和大型镜像时表现出色,适合大规模生产环境使用。

高可用: Harbor支持多节点部署,可以配置为高可用模式,确保服务的连续性。

持续集成/持续部署(CI/CD)支持: Harbor可以无缝集成到企业的CI/CD流程中,支持自动化的镜像构建、测试和部署。支持主流的CI/CD工具如Jenkins、GitLab CI等。

        5. 安全性

镜像安全扫描: Harbor集成了漏洞扫描功能,可以自动检查上传的镜像是否存在已知的安全漏洞,提高了容器环境的安全性。Harbor集成了Trivy扫描引擎,可以自动扫描上传的镜像是否存在已知漏洞。它还支持内容信任,确保只有经过签名的镜像才能被部署。

审计和合规: Harbor提供了详细的操作日志,有助于满足企业的审计要求和合规需求。

使用Harbor的典型流程包括

  1. 开发者构建并推送镜像到Harbor
  2. Harbor自动扫描镜像的安全漏洞
  3. 运维人员在Harbor中管理镜像版本和访问权限
  4. 部署系统从Harbor拉取经过验证的镜像进行部署

part 2. Harbor 安装和配置

标准的 Harbor 安装过程包括以下阶段:

1. 确保您的目标主机满足 Harbor 安装先决条件。 

首先需要准备一个满足以下条件的Linux服务器:harbor V2.5.0 配置要求

  • Docker 17.06.0-ce+ 和 Docker Compose 1.18.0+
  • 至少2GB内存和40GB磁盘空间
  • 可以访问互联网(用于下载Harbor安装包和Docker镜像)

docker-compose下载

这里下载的版本是1.29.2

sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose --version

2. 下载 Harbor 安装程序

访问Harbor的GitHub releases页面,下载v2.5.0的安装包,并解压。例如:

wget https://github.com/goharbor/harbor/releases/download/v2.5.0/harbor-online-installer-v2.5.0.tgz
tar xzvf harbor-online-installer-v2.5.0.tgz

以下是harbor的目录结构

harbor
├── LICENSE
├── common.sh
├── harbor.yml.tmpl
├── install.sh
└── prepare
  • common.sh
    • 这是一个通用的Shell脚本文件。
    • 包含了一些公共函数和变量定义,被其他脚本(如install.sh)引用。
    • 可能包含了一些辅助函数,例如错误处理、日志输出等通用功能。
  • harbor.yml.tmpl
    • 这是Harbor的配置模板文件。
    • .tmpl后缀表示这是一个模板,用户需要基于此文件创建自己的配置文件。
    • 包含了Harbor的各种配置选项,如数据库设置、存储路径、认证方式等。
    • 用户通常需要复制此文件为harbor.yml,并根据自己的需求进行修改。
  • install.sh
    • 这是Harbor的主安装脚本。
    • 负责执行整个Harbor的安装过程。
    • 包括检查环境、准备配置、下载或加载镜像、启动服务等步骤。
    • 用户通过运行这个脚本来完成Harbor的安装。
  • prepare
    • 这可能是一个可执行文件或脚本。
    • 在安装过程中被install.sh调用。
    • 主要负责准备Harbor运行所需的配置文件和环境。
    • 可能包括生成证书、配置文件转换、创建必要的目录结构等任务。

3. 配置Harbor

进入解压后的目录,复制并编辑配置文件

cd harbor
cp harbor.yml.tmpl harbor.yml
vim harbor.yml# 查看自己的IP
curl ifconfig.me

部分配置文件

# Configuration file of Harbor# The IP address or hostname to access admin UI and registry service.
# DO NOT use localhost or 127.0.0.1, because Harbor needs to be accessed by external clients.
hostname: reg.mydomain.com# http related config
http:# port for http, default is 80. If https enabled, this port will redirect to https portport: 8080  # 这里我修改了# https related config
https:# https port for harbor, default is 443port: 443# The path of cert and key files for nginxcertificate: /your/certificate/pathprivate_key: /your/private/key/path# # Uncomment following will enable tls communication between all harbor components
# internal_tls:
#   # set enabled to true means internal tls is enabled
#   enabled: true
#   # put your cert and key files on dir
#   dir: /etc/harbor/tls/internal# Uncomment external_url if you want to enable external proxy
# And when it enabled the hostname will no longer used
# external_url: https://reg.mydomain.com:8433# The initial password of Harbor admin
# It only works in first time to install harbor
# Remember Change the admin password from UI after launching Harbor.
harbor_admin_password: Harbor12345# Harbor DB configuration
database:# The password for the root user of Harbor DB. Change this before any production use.password: root123# The maximum number of connections in the idle connection pool. If it <=0, no idle connections are retained.max_idle_conns: 100# The maximum number of open connections to the database. If it <= 0, then there is no limit on the number of open connections.# Note: the default number of connections is 1024 for postgres of harbor.max_open_conns: 900# The default data volume
data_volume: /data

在配置文件中,至少需要修改以下内容:

  • hostname: 设置为你的服务器域名或IP
  • harbor_admin_password: 设置管理员密码
  • 注释掉https相关组件,这里使用http

         配置安全性(可选)

为了提高安全性,建议配置HTTPS访问。这需要您有一个有效的SSL证书。配置步骤如下

Harbor docs | Configure HTTPS Access to Harbor,可根据官方文档配置

# 在harbor.yml中配置HTTPS
hostname: your_domain.com/IP
https:port: 443certificate: /your/certificate/pathprivate_key: /your/private/key/path# 然后重新运行安装脚本
./prepare
docker-compose down -v
docker-compose up -d

4. 运行安装脚本

执行安装脚本,这个过程可能需要几分钟,因为它会下载所需的Docker镜像。

注意要赋予权限,有一些提前下过的容器,要删除不然会冲突,这里我提前下过Nginx。还有要注意http的80端口是否被占用,可以修改http的端口为别的

sudo ./install.sh

这样就是成功了,后续修改了配置文件harbor.yml 要重新 install.sh,才能加载新的配置

docker ps,查看启动了哪些容器

5. 访问Harbor

安装完成后,您可以通过浏览器访问 http://your_server_ip:port来登录Harbor。默认的管理员用户名是 admin。如果你前面没修改密码,MM:Harbor12345

注意如果有添加到云服务的安全组的话,有自行配置一下,使端口通过,如果不行还需设置防火墙。这里的端口为我们前面设置的http的端口,也是上图中的nginx-photon下的8080端口

sudo ufw enable
sudo ufw allow 8080/tcp
sudo ufw status

默认的管理员用户名是 admin。如果你前面没修改密码,MM:Harbor12345

6. 使用Harbor

登录后,就可以开始创建项目、管理用户和上传Docker镜像。例如,要推送镜像到Harbor,首先进行如下配置

添加不安全注册表: 配置中添加了 "insecure-registries": ["you_server_ip"]。这告诉Docker允许与这个IP地址(ip)的不安全连接。通常,Docker要求使用HTTPS进行安全连接,但有时对于私有或测试环境,可能需要允许HTTP连接

sudo tee /etc/docker/daemon.json <<-'EOF'{"insecure-registries": ["you_server_ip:port"]
}
EOFsudo systemctl daemon-reload
sudo systemctl restart docker

重启docker后,检查一下容器是否还在运行,与前面的容器对比,有些容器挂了

重新启动所有容器,docker ps查看容器状态。每次有容器挂了,就这样启动

sudo docker-compose downsudo docker-compose up -d

默认Password:Harbor12345,看到下面的条件就是登录成功了

ubuntu@ip-172-31-6-151:~/harbor$ docker login -uadmin you_server_ip:8080
Password: 
WARNING! Your password will be stored unencrypted in /home/ubuntu/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credential-storesLogin Succeeded

点击推送命令,有详细的说明

在library项目中标记镜像,

SOURCE_IMAGE[:TAG] 要推送的docker镜像

REPOSITORY[:TAG] 这里是自己民命的

docker tag SOURCE_IMAGE[:TAG] you_server_ip:8080/library/REPOSITORY[:TAG]

推送镜像到library项目

docker push you_server_ip:8080/library/REPOSITORY[:TAG]

到这你应该就创建好了自己的镜像仓库,并且可以将镜像推送上去。后续拉取镜像非常方便

注意:使用别的机器拉取我们私有的镜像,还是需要配置,不安全注册表,

问题:账户或密码忘记

这里的serect_number,是你的账户和密码经过base64处理的

cat ~/.docker/config.json{"auths": {"you_server_ip:port": {"auth": "sercet_number"}}
}

base64解码,获取账户和密码

echo "secret_number" | base64 -d

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/866652.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【TS】TypeScript 联合类型详解:解锁更灵活的类型系统

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 TypeScript 联合类型详解&#xff1a;解锁更灵活的类型系统一、联合类型的定义二…

【深海王国】小学生都能玩的语音模块?ASRPRO打造你的第一个智能语音助手(6)

Hi~ (o^^o)♪, 各位深海王国的同志们&#xff0c;早上下午晚上凌晨好呀~ 辛勤工作的你今天也辛苦啦(/≧ω) 今天大都督继续为大家带来系列——小学生都能玩的语音模块&#xff0c;帮你一周内快速学会语音模块的使用方式&#xff0c;打造一个可用于智能家居、物联网领域的语音助…

基于SpringBoot的就业信息管理系统

你好&#xff0c;我是计算机学姐码农小野&#xff01;如果你对就业信息管理系统感兴趣或有相关需求&#xff0c;欢迎私信联系我。 开发语言&#xff1a; Java 数据库&#xff1a; MySQL 技术&#xff1a; SpringBootMySql 工具&#xff1a; MyEclipse、Tomcat 系统展示…

电脑游戏录屏,3款实用软件推荐给你

在电竞游戏热潮席卷全球的今天&#xff0c;电脑游戏录屏早已不再是简单的画面捕捉&#xff0c;它成为了记录电竞风采、打造专属游戏记忆的重要手段。通过游戏录屏&#xff0c;我们可以定格游戏中的精彩瞬间&#xff0c;重温那些令人热血沸腾的电竞时刻。那么&#xff0c;在进行…

Prometheus + Grafana 监控系统搭建使用指南-mysqld_exporter 安装与配置

使用mysqld_exporter 实现Prometheus 监控Mysql 系列文章目录 Prometheus 的安装部署Grafana的安装部署Linux服务器接入Prometheus监控-Node Exporter 安装指南Prometheus 接入SpringBoot微服务监控Mysql 接入 Prometheus RocketMQ 接入Prometheus 监控ElasticSearch 接入 Pr…

Node.js实现一个文章生成器

前言 本文将从零开始&#xff0c;讲解如何使用Node.js来实现一个文章生成器 node里面有很多优秀的模块&#xff0c;现在我们就借助node的fs模块来操控文本&#xff0c;来实现我们想要的效果 效果展示 体验 fs 首先我们先创建一个json文件 里面放一些内容 接下来我们书写代码…

抖音本地生活服务商入驻要求中暗含哪些信息?入局要点都在里面了!

随着抖音外卖的正式开放&#xff0c;许多创业者对于做抖音本地生活服务商的意向愈发强烈&#xff0c;抖音本地生活服务商入驻要求及相关话题更是在多个创业者群内被翻来覆去地讨论&#xff0c;且多次刷屏。 而就抖音目前在本地生活市场的布局来看&#xff0c;其主要的重心还是…

Renderless 思想正在影响前端开发

本文由前端小伙伴方长_beezen 原创。欢迎大家踊跃投稿。 原文链接&#xff1a;https://juejin.cn/post/7385752495535472655 前言 截止到 2024 年&#xff0c;跨端应用开发所需要考虑的兼容性&#xff0c;已经涵盖了框架、平台和设备类型等多个方面&#xff0c;例如&#xff1…

开发在线教育项目-在线课程视频网站开发

用了哪些技术 后端技术 springboot3 security权限框架&#xff08;后台&#xff09;mybatisPlus框架jwt生成tokeneasyexcel导入导出递归查询拦截器校验tokenredis的zset做排行榜功能redis的list做最新课程的功能redis做为缓存技术redis作为计数器&#xff0c;实时记录浏览量&…

搞定Loki+Promtail轻量级日志系统

Promtail 是 Loki 的日志收集客户端&#xff0c;它的主要功能是从各种来源收集日志并将其发送到 Loki 进行存储和查询。Promtail 的设计使其能够高效地收集和处理日志数据。 promtail-config.yaml&#xff08;配置&#xff09;: Promtail 读取配置文件&#xff08;例如 promta…

初阶数据结构二叉树练习系列(1)

这个系列的文章将带大家一起刷题&#xff0c;并且总结思路 温馨提示&#xff1a;本篇文章里的练习题仅适合刚学完二叉树的小白使用 相同的树 思路 情况分析&#xff1a;第一种情况&#xff1a;两棵树都为空 → 返回true 第二种情况&am…

C++ 引用——引用的基本语法

引用的基本使用 作用&#xff1a;给变量起别名 语法&#xff1a;数据类型 &别名 原名 示例&#xff1a; 运行结果&#xff1a;

如何利用Kimi解读Kimi的KVCache技术细节

最近Kimi公布了一篇Mooncake: Kimis KVCache-centric Architecture for LLM Serving的文章&#xff0c;详细介绍了Kimi背后的推理架构&#xff0c;因此笔者想到用Kimi解读Kimi&#xff0c;梳理相关技术要点如下&#xff0c;供大家参考&#xff1a; 文章 "Mooncake: A KVCa…

JVM原理(三):JVM对象回收判定机制与回收算法

如何判断一个对象是否存活(即是否还分配在堆中)&#xff0c;那看他是否还在用。 1. 引用计数算法 这是一种判断方式&#xff0c;相应的方法就是&#xff1a;如果一个对象被引用&#xff0c;那将被引用的对象中的一个计数器加一&#xff0c;引用失效就减一。在任何时刻引用计数…

STM32自己从零开始实操07:电机电路原理图

一、LC滤波电路 其实以下的滤波都可以叫低通滤波器。 1.1倒 “L” 型 LC 滤波电路 1.1.1定性分析 1.1.2仿真实验 电感&#xff1a;通低频阻高频的。仿真中高频信号通过电感&#xff0c;因为电感会阻止电流发生变化&#xff0c;故说阻止高频信号 电容&#xff1a;隔直通交。…

免费分享:中国三级及以上河流(附下载方法)

河流分级法的分级方法是从源头最小河流开始,称为一级河流;两条一级河流汇合成二级河流;以此类推,三级河流等等;最后是干流。本文将介绍中国三级及以上河流数据。 数据简介 1:100万中国三级及以上河流矢量数据是涵盖了全国范围内三级及以上级别河流的详细地理信息和空间分布。这…

App Store迎来了重磅更新,ASO冲榜优化或将成为不可或缺的一部分

近日App Store搜索页面迎来了重磅更新&#xff0c;苹果应用商店中搜索页面原有的热搜关键词消失了取而代之的是直接将排行榜放在了搜索顶部&#xff0c;分别是APP排行和游戏排行两部分。如下图&#xff1a; 很多人应该都是参考排行榜来下载APP的&#xff0c;这次更新之后用户在…

基于工业互联网的智能制造:未来制造业的新引擎

随着科技的飞速发展&#xff0c;工业互联网通过提供强大的数据支撑和通信基础&#xff0c;成为智能制造的重要基石。智能制造的引入&#xff0c;不仅显著提升了制造业的生产效率、降低了成本&#xff0c;而且提高了产品质量&#xff0c;满足了市场的多样化、个性化需求。 智能制…

解决问题:使用PageHelper.startPage和PageInfo实现分页,但是得到的total和传入的页面大小pageSize一样

我们需要的是total得到的数值是数据库里所有数据的条数。 1、包别引错 <!--PageHelper开始--><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>1.4.6</…

kafka 生产者

生产者 生产者负责创建消息&#xff0c;然后将其投递到Kafka中。 负载均衡 轮询策略。随机策略。按照 key 进行hash。 Kafka 的默认分区策略&#xff1a;如果指定了 key&#xff0c;key 相同的消息会发送到同一个分区&#xff08;分区有序&#xff09;&#xff1b;如果没有…