搭建Docker私服镜像仓库Harbor

news2024/10/7 4:31:42

1、概述

Harbor是由VMware公司开源的企业级的Docker Registry管理项目,它包括权限管理(RBAC)、LDAP、日志审核、管理界面、自我注册、镜像复制和中文支持等功能。

Harbor 的所有组件都在 Dcoker 中部署,所以 Harbor 可使用 Docker Compose 快速部署。

由于 Harbor 是基于 Docker Registry V2 版本,所以 docker 版本必须 > = 1.10.0 docker-compose >= 1.6.0

Harbor的目标是帮助用户迅速搭建一个企业级的Docker registry服务。它以Docker公司开源的registry为基础,额外提供了如下功能:

  • 基于角色的访问控制(Role Based Access Control)
  • 基于策略的镜像复制(Policy based image replication)
  • 镜像的漏洞扫描(Vulnerability Scanning)
  • AD/LDAP集成(LDAP/AD support)
  • 镜像的删除和空间清理(Image deletion & garbage collection)
  • 友好的管理UI(Graphical user portal)
  • 审计日志(Audit logging)
  • RESTful API
  • 部署简单(Easy deployment)

1.1 架构图

Harbor的每个组件都是以Docker容器的形式构建的,可以使用Docker Compose来进行部署。如果环境中使用了kubernetes,Harbor也提供了kubernetes的配置文件。

Harbor大概需要以下几个容器组成:ui(Harbor的核心服务)、log(运行着rsyslog的容器,进行日志收集)、mysql(由官方mysql镜像构成的数据库容器)、Nginx(使用Nginx做反向代理)、registry(官方的Docker registry)、adminserver(Harbor的配置数据管理器)、jobservice(Harbor的任务管理服务)、redis(用于存储session)。

Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器,整体架构还是很清晰的。架构图如下:
在这里插入图片描述

2、安装docker

Harbor要依赖Docker,所以要先安装,见:Ubuntu20.04安装Docker

3、下载Harbor

访问harbor release page,下载Harbor软件tgz压缩包。
在这里插入图片描述

4、解压

tar -zxvf harbor-offline-installer-v2.9.4.tgz

解压后出现一个 hardor 的文件夹,进去之后查看
在这里插入图片描述
此时还没有 harbor.yml 和 docker-compose.yml,复制一份harbor.yml.tmpl ,然后进行修改

cp harbor.yml.tmpl harbor.yml

主要改下面地方,填上hostname,port,注释掉https相关
在这里插入图片描述

5、安装

在当前 harbor 目录下执行./install.sh
在这里插入图片描述
等待安装成功。会出现上面提到的 docker-compose.yml文件,里面包含了harbor依赖的镜像和对应容器创建的信息。
在这里插入图片描述
在这里插入图片描述

6、安装docker-compose

# 安装
curl -L "https://github.com/docker/compose/releases/download/v2.27.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

# 授权
chmod +x /usr/local/bin/docker-compose

7、执行docker-compose

在harbor的目录下执行以下命令

# 启动
docker-compose up -d

# 停止
docker-compose down

启动后使用docker ps -a查看harbor相关容器启动情况(总计9个):
在这里插入图片描述

8、访问

根据上面的配置的IP,访问 http://172.28.168.223:5180
在这里插入图片描述
默认用户 和登录密码 可以从 harbor.yml 中找到,官网有个地方也有说明

admin / Harbor12345

在这里插入图片描述
登录成功
在这里插入图片描述

9、使用

9.1 创建用户和项目

首先有一个 public 的 library 项目,在里面创建对应的用户即可pull 和 push镜像,也可以创建其它项目
在这里插入图片描述

9.2 docker配置 harbor

结合docker实现镜像上传和下载,在/etc/docker/daemon.json添加以下内容
IP为harbor的IP地址和端口,端口如果是80可省略

# 仓库IP地址和端口,或者是域名,要加上http或https
"insecure-registries":["http://172.28.168.223:5180"],
 "registry-mirrors":["http://172.28.168.223:5180"]

在这里插入图片描述

  • registry-mirrors:配置的是阿里云镜像加速,该文的问题不需要配置该项
  • insecure-registries:允许 Docker 客户端连接到没有使用 HTTPS 或使用了自签名证书的 Docker 镜像仓库
    registry-mirrors:必须配置你的harbor仓库!!!否则可能造成,docker login是成功的,但是push镜像时出现相同的问题

重启docker:service docker restart
重启harbor

# 停止
docker-compose down

# 启动
docker-compose up -d

9.3 登录仓库

docker login -u 'admin' -p 'Harbor12345'  http://172.28.168.223:5180

在这里插入图片描述

9.2 上传镜像到harbor

在上传镜像前,需要为镜像打上标签,命令如下:

docker tag <image_name> <harbor_host>/<project_name>/<image_name>:<tag>

以redis镜像为例:

docker tag redis:5.0.10 172.28.168.223:5180/library/redis:5.0.10

在这里插入图片描述
上传镜像,命令如下:

docker push <harbor_host>/<project_name>/<image_name>:<tag>

上传redis镜像到harbor

docker push 172.28.168.223:5180/library/redis:5.0.10

在这里插入图片描述
登录harbor控制台查看,在library项目下有redis镜像
在这里插入图片描述

9.3 harbor拉取镜像

先删除上面本地的redis镜像172.28.168.223:5180/library/redis:5.0.10

docker rmi 172.28.168.223:5180/library/redis:5.0.10

拉取镜像的命令

# image_name是要拉取的镜像名称,project_name是Harbor中的项目名称,tag是镜像的版本号
docker pull <harbor_host>/<project_name>/<image_name>:<tag>

拉取redis镜像

docker pull 172.28.168.223:5180/library/redis:5.0.10

在这里插入图片描述

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

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

相关文章

实战中使用 QEMU 进行内网穿透

前言 阅读 https://xz.aliyun.com/t/14052 《使用 QEMU 进行内网穿透&#xff1f;》 https://securelist.com/network-tunneling-with-qemu/111803/ 《Network tunneling with… QEMU?》 我将此项技术应用到实战中&#xff0c;取得不错的效果&#xff0c;但是也遇到很多坑&am…

Redis 实战之监视器

监视器 成为监视器向监视器发送命令信息总结 成为监视器 发送MONITOR 命令可以让一个普通客户端变为一个监视器&#xff0c; 该命令的实现原理可以用以下伪代码来实现&#xff1a; def MONITOR():# 打开客户端的监视器标志client.flags | REDIS_MONITOR# 将客户端添加到服务器…

【LeetCode:2391. 收集垃圾的最少总时间 + 二分】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

用python进行接口测试(详细教程)

前言 其实我觉得接口测试很简单&#xff0c;比一般的功能测试还简单&#xff0c;现在找工作好多公司都要求有接口测试经验&#xff0c;也有好多人问我什么是接口测试&#xff0c;本着不懂也要装懂的态度&#xff0c;我会说&#xff1a;所谓接口测试就是通过测试不同情况下的入…

4.5网安学习第四阶段第五周回顾(个人学习记录使用)

本周重点 ①部署域环境&#xff08;Win2008&#xff09; ②域组策略 ③域内信息收集 ④(重点)哈希传递攻击PTH ⑤MS14-068 提权漏洞 ⑥黄金票据伪造 ⑦白银票据伪造 ⑧ZeroLogon (CVE-2020-1472) 漏洞复现 本周主要内容 ①部署域环境&#xff08;Win2008&#xff09;…

【信道编码】2 卷积码、状态转移图、状态转移表、网格表示和码字路径

【信道编码】2 卷积码、状态转移图、状态转移表、网格表示和码字路径 写在最前面例题先行&#xff0c;原理随后示例&#xff1a;输入为01011100状态转移表状态转移图 卷积码的原理原理与结构工作流程误差纠正 &#xff08;2,1,2&#xff09;卷积编码器工作原理结构和示例状态转…

微信小程序按钮去除边框线

通常我们去掉按钮边框直接设置 border:0 但是在小程序中无效&#xff0c;设置outline:none也没用&#xff0c;当然可能你会说加权重无效 实际上该样式是在伪元素::after内&#xff0c;主要你检查css 还看不到有这个关系&#xff0c;鹅厂就是坑多 类样式::after {border: non…

odoo16 图标替换系列

1、网友标签标签 修改文件&#xff1a;addons/web/static/src/webclient/webclient.js 修改内容&#xff1a; 我把 "odoo" 替换成了 "RH" this.title.setParts({ zopenerp: "RH" }); // zopenerp is easy to grep2、修改登陆界面 技术/视图/L…

代码复现|subprocess.run()导致报错“FileNotFoundError: [WinError 2] 系统找不到指定的文件“

一 问题描述 记录复现&#xff08;windows平台下&#xff0c;机器学习算法&#xff09;代码遇到的问题。 根据控制台信息提示&#xff0c;定位到问题所在&#xff1a;sp.run()导致报错“FileNotFoundError: [WinError 2] 系统找不到指定的文件“。 定位报错位置如下&#xff0c…

PyQt5中的组件

文章目录 1. 简介2. QCheckBox3. QPushButton4. QSlider5. QProgressBar6. QCalendarWidget7. QPixmap8. QLineEdit9. QSplitter10. QComboBox11. 总结 1. 简介 在PyQt5中&#xff0c;有许多不同类型的组件&#xff0c;可以用于构建各种GUI界面。以下是一些常见的PyQt5组件&am…

读写备份寄存器BKP与实时时钟RTC

文章目录 读写备份寄存器接线图代码 RTC实时时钟接线图代码 读写备份寄存器 接线图 即接个3.3v的电源到VBT引脚 代码 代码效果&#xff1a;第一次写入备份寄存器&#xff0c;下载程序后再注释掉&#xff0c;再进行下载&#xff0c;之前写入的数据还会保存在备份寄存器中&am…

Java基础入门day48

day48 JDBC调用关系 tomcat 简介 tomcat是Apache下的一个核心项目&#xff0c;免费开源&#xff0c;支持servlet和jsp。 tomcat技术先进&#xff0c;性能稳定&#xff0c;目前比较流行的web应用服务器 安装 官网&#xff1a; Apache Tomcat - Welcome! 下载 tomcat8.5 解压&a…

leetcode——链表的中间节点

876. 链表的中间结点 - 力扣&#xff08;LeetCode&#xff09; 链表的中间节点是一个简单的链表OJ。我们要返回中间节点有两种情况&#xff1a;节点数为奇数和节点数是偶数。如果是奇数则直接返回中间节点&#xff0c;如果是偶数则返回第二个中间节点。 这道题的解题思路是&a…

使用Three.js绘制快速而逼真的水

本文将利用GPUComputationRenderer来实现水波纹的绘制&#xff0c;相似的案例可以看threejs官方的GPGPU Water示例。更多精彩内容尽在数字孪生平台。 什么是 GPGPU GPGPU代表通用图形处理单元&#xff08;General-Purpose Graphic Processing Unit&#xff09;&#xff0c;意思…

护肤升级:如何选择最适合您的AI皮肤技术解决方案?

在不断变化的护肤行业中&#xff0c;人工智能技术的整合已经彻底改变了企业满足个人护肤需求的方式。了解人工智能在美容行业的重要性以及提供的解决方案&#xff0c;是选择最合适的解决方案至关重要的。领先的主要参与者之一是玩美移动&#xff0c;他们提供了一套全面的AI皮肤…

算法day04

第一题 &#xff1a; 209. 长度最小的子数组 有上题可知&#xff0c;我们会采用双指针和单调性的思路来解决 我们本题采用左右双指针从数组的0位置同向前进&#xff0c;所以将此类模型称为滑块&#xff1b; 步骤思路如下&#xff1a; 步骤一&#xff1a; 定义所有双指针都指向…

使用 Kubeadm 搭建个公网 k8s 集群(单控制平面集群)

前言 YY&#xff1a;国庆的时候趁着阿里云和腾讯云的轻量级服务器做促销一不小心剁了个手&#x1f60e;&#x1f622;&#xff0c;2 Cores&#xff0c;4G RAM 还是阔以的&#xff0c;既然买了&#xff0c;那不能不用呀&#x1f6a9;&#xff0c;之前一直想着搭建个 k8s 集群玩…

用HAL库改写江科大的stm32入门例子8-1 DMA数据转运

实验目的&#xff1a;通过DMA把buffer的数据搬运到buffer2当中 //declare a buffer to store the data uint32_t buffer[3] {1,2,3};//declare a buffer to store the data uint32_t buffer2[3] {0,0,0}; DMA&#xff1a;是个搬运数据的小助手。 相关设置&#xff1a; main…

算法练习day7

四数相加II 代码随想录 0454.四数相加II 454. 四数相加 II - 力扣&#xff08;LeetCode&#xff09; &#xff08;用时&#xff1a;0.5小时&#xff09; 思路 本道题是需要在四个数组中&#xff0c;各找一个数&#xff0c;这些数加起来能够等于0&#xff0c;那么就是答案元…

ChatGPT未来可能应用于iPhone?

苹果接即将与OpenAI达成协议 ChatGPT未来应用于iPhone 前言 就在5月11日&#xff0c;苹果公司正与OpenAI进行深入讨论&#xff0c;计划在其最新的iOS操作系统中整合OpenAI的先进技术。这一举措是苹果公司在为其产品线融入更先进的人工智能功能所做努力的一部分。 目前情况双方…