手把手教你搭建Docker私有仓库Harbor

news2024/9/21 22:42:06
1、什么是Docker私有仓库

Docker私有仓库是用于存储和管理Docker镜像的私有存储库。Docker默认会有一个公共的仓库Docker Hub,而与Docker Hub不同,私有仓库是受限访问的,只有授权用户才能够上传、下载和管理其中的镜像。这种私有仓库可以部署在本地云环境中,用于组织内部开发、测试和生产环境中的容器镜像管理。保证数据安全性。

2、Docker有哪些私有仓库

以下是一些常见的Docker私有仓库:

  • Harbor:作为一个企业级的Docker Registry服务,Harbor提供了安全、可信赖的镜像存储和管理功能。它支持RBAC权限控制、镜像复制、镜像签名、漏洞扫描等功能。

  • Docker Trusted Registry (DTR):由Docker官方推出的企业级Docker私有仓库服务,与Docker Engine紧密集成,支持高度的安全性和可靠性。

  • Portus:一个开源的Docker镜像管理和认证服务,提供用户管理、团队管理、镜像审核等功能,与Docker Registry兼容。

  • Nexus Repository Manager:虽然主要是用于构建和管理Java组件,但也可以用作Docker私有仓库。它具有强大的存储管理和权限控制功能。

  • GitLab Container Registry:GitLab集成了容器注册表功能,允许您存储、管理和分发Docker镜像。这是GitLab自带的功能,无需额外部署。

  • AWS Elastic Container Registry (ECR):如果使用AWS云服务,可以考虑使用AWS ECR作为私有仓库。它与AWS的其他服务集成紧密,对AWS用户来说是一个方便的选择。

本篇使用Harbor搭建Docker私有仓库。

3、Harbor简介

Harbor是一个开源的企业级Docker Registry服务,它提供了一个安全、可信赖的仓库来存储和管理Docker镜像。Harbor翻译为中文名称为"庇护;居住;"。可以理解为是Docker镜像的"居住环境"或者是镜像的"庇护所"。Harbor最初由VMware公司开发,旨在解决企业级Docker镜像管理的安全和可信任性问题。VMware于2016年发布,在2017年,VMware将Harbor开源,这使得更广泛的社区和组织可以自由地使用和贡献代码。Harbor是一个成熟、功能丰富且安全可靠的企业级Docker Registry服务,为企业容器化应用的部署和管理提供了强大的支持。

Harbor官网地址:Harbor (goharbor.io)

Github开源地址:GitHub - goharbor/harbor: An open source trusted cloud native registry project that stores, signs, and scans content.

4、Harbor下载

4.1、通过Linux命令下载
wget https://github.com/goharbor/harbor/releases/download/v2.10.0/harbor-offline-installer-v2.10.0.tgz

4.2、GitHub下载

下载地址:https://github.com/goharbor/harbor/releases 下载离线版本

下载成功后,把包通过 xftp 上传到服务器。

4.3、解压

解压文件

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

5、启动Harbor

5.1、修改配置文件

复制harbor.yml.tmpl 文件并重命名为harbor.yml修改此配置文件,需要设置hostname、端口、数据库密码等。

cp harbor.yml.tmpl harbor.yml #拷贝

vim harbor.yml

修改配置文件:

#修改hostname的值,如果没有域名就使用本机IP地址
hostname: 192.168.42.133

#配置启动端口号
# http related config 
http:
  # port for http, default is 80. If https enabled, this port will redirect to https port
  port: 5000

# 如果没有申请证书,需要隐藏https
#https:
  # https port for harbor, default is 443
#  port: 443
  # The path of cert and key files for nginx
#  certificate: /your/certificate/path
#  private_key: /your/private/key/path

#启动成功后,admin用户登录密码
# Remember Change the admin password from UI after launching Harbor.
harbor_admin_password: AdminHarbor12345

5.2、启动

配置文件修改成功后,执行 install.sh 脚本进行安装harbor

./install.sh 

启动报错:

[Step 0]: checking if docker is installed ...

Note: docker version: 26.1.3

[Step 1]: checking docker-compose is installed ...
/opt/harbor/common.sh: line 119: docker-compose: command not found
✖ Failed to parse docker-compose version.

可以看到,该服务器安装的 docker 没有安装 docker-compose 插件

5.3、安装docker-compose

进入docker-compose 官网下载执行文件,地址: https://github.com/docker/compose 下载成功后,把可执行文件加入Linux 系统命令目录

cp docker-compose-linux-x86_64 /usr/local/bin/

重命名:

mv docker-compose-linux-x86_64 docker-compose

授权:

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

执行命令查看是否安装成功:

docker-compose --version

如果需要卸载,直接删除即可:

rm -f /usr/bin/docker-compose

5.4、再次启动

再次执行 ./install.sh

提示安装成功。接下来就可以访问Harbor了。访问IP+端口:http://192.168.42.133:5000

访问成功,由于Harbor是通过docker管理的,所以启动非常方便。如果首页访问成功说明Docker私有仓库已经部署成功了。

6、Harbor Web页面操作说明

默认用户名是admin,密码是启动时设置的密码:AdminHarbor12345

登录成功进入主页面了。从系统首页可以看到系统分为三个菜单:项目、日志、系统管理。

6.1、项目

项目管理顾名思义就是用来管理项目的。可以为每一个开发项目创建一个私有项目库,然后把Docker镜像存储到指定的项目中,为每个项目实现项目镜像隔离。创建项目的时候,Harbor提供了公开库(public repository)和私有库(private repository)两种类型的镜像存储空间。

通过详情信息可以看到:公开库中的镜像是对所有用户可见和可访问的,任何人都可以查看和拉取其中的镜像。而私有库中的镜像则需要登录才能访问控制,只有被授权的用户或团队才能够查看、拉取和推送镜像。 可以根据需要创建相关的项目。

项目创建成功后,可以点击进入项目。在里面可以为每个项目单独设置不同的配置信息。可以为每一个项目添加成员信息。

角色权限说明:

  • 项目管理员(Project Administrator):拥有项目的最高权限,可以对项目进行全面管理,包括创建和删除项目、管理项目成员和权限、配置项目属性、查看项目日志等。

  • 维护人员(Maintainer):类似于项目管理员,但权限稍低,通常用于协助管理项目,可以进行项目的部分管理操作,如添加和删除镜像、配置镜像的复制和同步规则等。

  • 开发者(Developer):具有对项目中镜像仓库的读写权限,可以拉取、推送和删除镜像,以及管理部分项目配置,但不能进行项目管理操作。

  • 访客(Guest):只具有对项目中镜像仓库的只读权限,可以查看镜像和元数据,但无法对镜像进行修改或删除操作。通常用于分享项目或镜像给外部团队或用户。

  • 受限访客(Restricted Guest):是一种更加受限的访客角色,通常用于提供给外部用户或系统,具有对项目中镜像仓库的只读权限,但可能会限制访问的部分内容或功能。

在右上角显示推送命令,可以通过提示命令进行docker镜像推送。

6.2、日志

日志菜单就是记录用户操作日志信息的。

6.3、系统管理

系统管理主要用来管理Harbor用户人员信息、镜像仓库的各种配置、权限和系统设置。

7、Docker命令使用私有仓库
7.1、登录

首先登录私有仓库地址:

docker login  -u admin -p AdminHarbor12345 http://192.168.42.133:5000

会报错:

WARNING! Using --password via the CLI is insecure. Use --password-stdin.
Error response from daemon: Get "https://192.168.42.133:5000/v2/": proxyconnect tcp: dial tcp 192.168.65.7:3128: connect: connection refused

docker认为这个地址是不安全的,所以需要在docker守护进程配置文件中把该地址加入安全范围。

{
  "registry-mirrors": ["https://ejes884z.mirror.aliyuncs.com"],
  "log-driver":"json-file",
  "log-opts": {"max-size":"1g", "max-file":"3"},
  "live-restore": true,
  "insecure-registries": ["192.168.42.133:5000"]
}

# insecure-registries 不安全的注册表配置一些不安全的地址信息,让Docker认为是安全的。多个地址使用 "," 分割

加入配置成功后,再次登录。

WARNING! Using --password via the CLI is insecure. Use --password-stdin.
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

通过输出发现登录成功。认证信息存储在 ~/.docker/config.json 文件中,只要登录信息存在,登录会一直生效不需要每次推送拉取之前都登录。

7.2、推送

重新命名镜像名称

docker tag 94543a6c1aef 192.168.42.133:5000/blog_project/nginx:1.26.0

推送

docker push 192.168.42.133:5000/blog_project/nginx:1.26.0

查看Harbor仓库,推送成功。

7.3、拉取

通过另一台服务器,使用 docker pull拉取镜像从私有仓库拉取镜像:

docker pull 192.168.42.133:5000/blog_project/nginx:1.26.0

拉取成功

查看下载数,发现已经更新了。

8、总结

关于使用Harbor搭建Docker私有仓库就介绍完毕了,如果大家有兴趣可以查看一下其他搭建方式,然后在它们之间进行对比一下看看那种方式更适合。本篇为入门级Harbor的基础使用,其他功能可以自行研究。

文章转载自:sowler

原文链接:https://www.cnblogs.com/sowler/p/18242819

体验地址:引迈 - JNPF快速开发平台_低代码开发平台_零代码开发平台_流程设计器_表单引擎_工作流引擎_软件架构

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

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

相关文章

HarmonyOS工程目录结构

应用级配置文件app.json5 应用唯一标识、版本号、应用图标、应用名称等信息 模块级配置文件module.json5 oh-package.json5 三方库的管理 其他配置 用于编译构建,包括构建配置文件、编译构建任务脚本、混淆规则文件、依赖的共享包信息等。 build-profile.json…

Java学习Day9之数据库链接java

package aboutdb1; import java.sql.*; import java.util.Scanner; public class newDBsystem {private static Connection getConnection() throws Exception {Class.forName("com.mysql.cj.jdbc.Driver"); // 加载MySQL JDBC驱动Connection con DriverManager.get…

阿尔泰科技工业电脑IPC-8363工控机

概述: IPC-8363是一款支持 LGA 1200 Intel 10th/11th Generation Core™ i9/i7/i5/i3, Celeron and Pentium processor 的工业电脑。配置2组独立 SO-DIMM DDR4 2666/2933MHz内存,最大可扩展至128GB。 主要技术指标: 产品图示: 系…

php 小白新手从入门到精通教程(第3版)

前言 PHP(PHP: Hypertext Preprocessor)即“超文本预处理器”,是在服务器端执行的脚本语言,尤其适用于Web开发并可嵌入HTML中。PHP语法学习了C语言,吸纳Java和Perl多个语言的特色发展出自己的特色语法,并根…

qt初入门8:下拉框,输入框模糊查询,提示简单了解 (借助QCompleter)

实现一个简单的模糊查询的逻辑,输入框能提示相关项。 主要借助qt的QCompleter 类( Qt 框架中提供的一个用于自动补全和模糊搜索的类),结合一些控件,比如QComboBox和QLineEdit,实现模糊查询的功能。 1&…

在线实习项目|泰迪智能科技企业级项目学习,暑期大数据人工智能学习

在线实习介绍 实习时间:每个项目周期七周左右 面向对象:大数据、计算机相关专业学生;大三、大四毕业年度学生 在线实习收获 1、获得项目实战技能,积累项目经验 2、获得在线实习证明 项目特点…

能源化工5G防爆终端能给行业带来什么重要作用?

在能源化工领域,5G防爆终端的引入无疑为行业带来了革命性的变革与重要作用。这些集成了先进5G通信技术和防爆设计的高端设备,不仅提升了生产作业的安全性,还极大地增强了运营效率与智能化水平。 高速、低延迟的5G网络为防爆终端提供了前所未有…

安全防御2

实验要求: 实验过程: 7,办公区设备可以通过电信链路和移动链路上网(多对多的NAT,并且需要保留一个公网IP不能用来转换): 新建电信区: 新建移动区: 将对应接口划归到各自区域: 新建…

Java(二十二)---队列

文章目录 前言1.队列(Queue)的概念2.Queue的使用3.队列的模拟实现4.循环队列5.双端队列6.面试题[1. 用队列实现栈](https://leetcode.cn/problems/implement-stack-using-queues/description/)[2. 用栈实现队列](https://leetcode.cn/problems/implement-queue-using-stacks/de…

VPN以及GRE和MGRE

VPN VPN — 是虚拟专用网络 通俗地说,就是通过虚拟的手段,将两个独立的网络,穿越一个公共网络进行连接,实现点到点专线的效果(可以理解为:一个分公司通过公网和总公司建立点到点的专线连接) 现…

innovus:如何获取clock net的route_type和clock name

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧? 拾陆楼知识星球入口 clock net的route type分为top trunk和leaf,net_type的设置方式见文章:

【06】LLaMA-Factory微调大模型——微调模型评估

上文【05】LLaMA-Factory微调大模型——初尝微调模型,对LLama-3与Qwen-2进行了指令微调,本文则介绍如何对微调后的模型进行评估分析。 一、部署微调后的LLama-3模型 激活虚拟环境,打开LLaMA-Factory的webui页面 conda activate GLM cd LLa…

汇编实验5

本实验在32位Linux虚拟机中完成(点击查看安装教程) 实验内容 二进制炸弹实际是由C语言源程序生成的可执行目标代码,主程序可参考bomb.c。运行时,会按次序提示用户输入3个不同的字符串。如果输入的字符串有误,炸弹就会…

结合金融场景的Scipy模块编程

结合金融场景的Scipy模块编程 数据链接:https://pan.baidu.com/s/1VMh8-4IeCUYXB9p3rL45qw 提取码:c6ys import numpy as np import pandas as pd import statsmodels import matplotlib.pyplot as plt from pylab import mpl mpl.rcParams[font.sans-se…

4 C 语言控制流与循环结构的深入解读

目录 1 复杂表达式的计算过程 2 if-else语句 2.1 基本结构及示例 2.2 if-else if 多分支 2.3 嵌套 if-else 2.4 悬空的 else 2.5 注意事项 2.5.1 if 后面不要加分号 2.5.2 省略 else 2.5.3 省略 {} 2.5.4 注意点 3 while 循环 3.1 一般形式 3.2 流程特点 3.3 注…

SaaS的“大模型焦虑”

随着大模型技术的兴起,SaaS行业正面临前所未有的机遇与挑战。本文深入剖析了SaaS厂商在AI化升级过程中的’大模型焦虑’,并探讨了如何通过战略性的AI应用找到自信,实现产品与服务的转型升级,为SaaS行业的AI之路提供了宝贵的思考与…

JVM之运行时数据区(一):程序计数器+本地方法栈

JVM之运行时数据区(一):程序计数器本地方法栈 1.运行时数据区概述2.程序计数器作用特点常见问题 3.本地方法接口本地方法本地接口 4.本地方法栈特点 1.运行时数据区概述 Java虚拟机定义了若干种程序运行期间会使用到的运行时数据区其中有一些…

昇思25天学习打卡营第30天 | MindNLP ChatGLM-6B StreamChat

今天是第30天,学习了MindNLP ChatGLM-6B StreamChat。 今天是参加打卡活动的最后一天,经过这些日子的测试,昇思MindSpore效果还是不错的。 ChatGLM-6B 是一个开源的、支持中英双语的对话语言模型,具有62亿参数,基于 …

业务系统核心模块资料访问性能优化实战

随着业务系统的云化转型不断推进,业务量呈现显著增长,对业务系统的性能和资源管理提出了更高要求。在这样的背景下,实现系统资源使用与性能指标的均衡成为保障生产系统高效稳定运行的核心任务。 在性能优化的范畴内,核心业务系统对…

Linux 10:进程信号

信号示例: 用户输入命令,在Shell下启动一个前台进程: 用户按[CtrlC],这个键盘输入产生一个硬件中断,被OS获取,解释成信号,发送给目标前台进程。前台进程因为收到信号,进而引起进程退出。 注意&…