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

CentOS 7 搭建 Harbor2.4.1 Docker镜像仓库

wptr33 2025-03-26 17:48 25 浏览

上一篇文章我们使用了 registry 镜像来搭建Docker私有镜像仓库,但是使用体验不是很好,没有一个可管理的UI界面,管理很麻烦。

本篇文章将介绍一个新的搭建Docker镜像仓库的工具叫做 Harbor。Harbor 拥有一个易于管理的UI,提供多语言的切换,支持项目管理、日志记录、用户管理、仓库管理等等,是大多数人选择自建Docker镜像仓库的重要选择之一。

Harbor介绍

官网:https://goharbor.io/

GitHub地址:
https://github.com/goharbor/harbor

官方安装文档:
https://goharbor.io/docs/2.4.0/install-config/

安装要求

安装Harbor会部署多个Docker容器,因此在部署前需要确定你得Linux主机是否安装Docker和Docker Compose.

硬件需求

Resource

Minimum

Recommended

CPU

2 CPU

4 CPU

Mem

4 GB

8 GB

Disk

40 GB

160 GB

软件需求

Software

Version

Description

Docker engine

Version 17.06.0-ce+ or higher

安装文档参考:CentOS 7 安装 Docker-CE 并配置阿里云加速器

Docker Compose

Version 1.18.0 or higher

安装文档参考:docker-compose容器编排

Openssl

Latest is preferred

Used to generate certificate and keys for Harbor
yum install -y openssl openssl-devel

开放端口

需要开放以下端口:

Port

Protocol

Description

443

HTTPS

Harbor portal and core API accept HTTPS requests on this port. You can change this port in the configuration file.

4443

HTTPS

Connections to the Docker Content Trust service for Harbor. Only required if Notary is enabled. You can change this port in the configuration file.

80

HTTP

Harbor portal and core API accept HTTP requests on this port. You can change this port in the configuration file.

下载 Harbor 并解压

在Harbor的github发布页面下载Harbor在线安装包或离线安装包。

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

配置对 Harbor 的 Https 访问

默认情况下,Harbor不附带证书,也可以部署,但是是通过http访问,未进行加密,所以需要配置为使用https来访问,保证访问的安全性。

要配置https,就必须创建SSL证书,可以使用受信任的第三方CA签发的证书,比如 Let's Encrypt,也可以使用自签名的证书。

下面介绍如果使用自签名证书,这里假设我访问 Harbor 的域名是 harbor.chenxie.net ,并且已经配置好了DNS解析,域名已经指向我的这台机器。(直接添加 192.168.92.147 harbor.chenxie.net 到 /etc/hosts)

生成证书颁发机构证书

1. 生成 CA 证书私钥

openssl genrsa -out ca.key 4096

2. 生成 CA 证书

修改下面 -subj 中的信息为你自己的。

openssl req -x509 -new -nodes -sha512 -days 3650 \
 -subj "/C=CN/ST=Chengdu/L=Chengdu/O=example/OU=Personal/CN=harbor.chenxie.net" \
 -key ca.key \
 -out ca.crt

生成服务器证书

证书通常包含一个 .crt 文件和一个 .key 文件,比如 harbor.chenxie.net.crt 和 harbor.chenxie.net.key

1. 生成私钥

openssl genrsa -out harbor.chenxie.net.key 4096

2. 生成证书签名请求(CSR)

修改下面 -subj 中的信息为你自己的。

openssl req -sha512 -new \
    -subj "/C=CN/ST=Chengdu/L=Chengdu/O=example/OU=Personal/CN=harbor.chenxie.net" \
    -key harbor.chenxie.net.key \
    -out harbor.chenxie.net.csr

3. 生成 x509 v3 扩展文件

cat > v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names

[alt_names]
DNS.1=harbor.chenxie.net
DNS.2=chenxie.net
DNS.3=harbor
EOF

4. 使用 v3.ext 文件为 Harbor 主机创建证书

openssl x509 -req -sha512 -days 3650 \
    -extfile v3.ext \
    -CA ca.crt -CAkey ca.key -CAcreateserial \
    -in harbor.chenxie.net.csr \
    -out harbor.chenxie.net.crt

向 Harbor 和 Docker 提供证书

生成 ca.crt , harbor.chenxie.net.crt 和 harbor.chenxie.net.key 文件之后,必须将它们提供给 Harbor和Docker并重新配置Harbor来使用到它。

1. 拷贝服务器证书和key到指定的目录

mkdir -p /data/cert
cp harbor.chenxie.net.crt /data/cert/
cp harbor.chenxie.net.key /data/cert/

2. 转换 harbor.chenxie.net.crt 为 harbor.chenxie.net.cert ,用于Docker使用。

Docker守护进程会将 .crt 文件解释为CA证书,将 .cert 文件解释为客户端证书。

openssl x509 -inform PEM -in harbor.chenxie.net.crt -out harbor.chenxie.net.cert

3. 拷贝服务器证书,key和CA文件到Docker的证书目录。

mkdir -p /etc/docker/certs.d/harbor.chenxie.net/
cp harbor.chenxie.net.cert /etc/docker/certs.d/harbor.chenxie.net/
cp harbor.chenxie.net.key /etc/docker/certs.d/harbor.chenxie.net/
cp ca.crt /etc/docker/certs.d/harbor.chenxie.net/

注意:如果你将默认的nginx端口443改为了其他端口,则创建文件夹时应该加上端口,如将443改为了8888,创建文件夹应该如下:

mkdir -p /etc/docker/certs.d/harbor.chenxie.net:8888
或
mkdir -p /etc/docker/certs.d/harbor_IP:8888

4. 重启docker

systemctl restart docker

部署或重新配置Harbor

现在我们还没有部署Harbor,所以需要配置 harbor.yml 文件并在文件中配置证书指定 hostname和https.

配置 harbor.yml

cd harbor

cp harbor.yml.tmpl harbor.yml

vim harbor.yml

配置 hostname 为: hostname: harbor.chenxie.net
配置 certificate 为:/data/cert/harbor.chenxie.net.crt
配置 private_key 为:/data/cert/harbor.chenxie.net.key

其他默认即可

运行安装脚本

我们已经配置好了 harbor.yml 文件,现在只需要运行 install.sh 即可启动安装,在线安装时间会比较长一点,请耐心等待。

安装 Harbor 有几种不同的配置安装方式:

  • Just Harbor, without Notary, Trivy or Chart Repository Service
  • Harbor with Notary
  • Harbor with Trivy
  • Harbor with Chart Repository Service
  • Harbor with two or all three of Notary, Trivy, and Chart Repository Service

第一种方式(默认):

Just Harbor, without Notary, Trivy or Chart Repository Service.

也就是只安装 Harbor,不安装 Notary, Trivy or Chart Repository Service.

直接运行 install.sh 即可:

./install.sh

安装成功之后即可使用配置的地址进行访问
https://harbor.chenxie.net/ 进行访问,访问时会报证书错误,忽略即可,因为是自签证书。

默认管理账户为:

用户名:admin
密 码:Harbor12345

命令行登录和推送镜像测试:

1. 在后台新建一个项目,比如:myproject

2. 使用Docker命令登录Harbor,给镜像打Tag,然后推送到Harbor

a. 登录

[root@localhost ~]# docker login harbor.chenxie.net
Username: admin
Password: 
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

b. 拉取一个ubuntu镜像,重新打tag并推送到Harbor

[root@localhost ~]# docker pull ubuntu
[root@localhost ~]# docker tag ubuntu harbor.chenxie.net/myproject/ubuntu:v1.0
[root@localhost ~]# docker push harbor.chenxie.net/myproject/ubuntu:v1.0

c. 在Harbor控制台查看

其他方式安装

请参考官方文档:
https://goharbor.io/docs/2.4.0/install-config/

相关推荐

redis的八种使用场景

前言:redis是我们工作开发中,经常要打交道的,下面对redis的使用场景做总结介绍也是对redis举报的功能做梳理。缓存Redis最常见的用途是作为缓存,用于加速应用程序的响应速度。...

基于Redis的3种分布式ID生成策略

在分布式系统设计中,全局唯一ID是一个基础而关键的组件。随着业务规模扩大和系统架构向微服务演进,传统的单机自增ID已无法满足需求。高并发、高可用的分布式ID生成方案成为构建可靠分布式系统的必要条件。R...

基于OpenWrt系统路由器的模式切换与网页设计

摘要:目前商用WiFi路由器已应用到多个领域,商家通过给用户提供一个稳定免费WiFi热点达到吸引客户、提升服务的目标。传统路由器自带的Luci界面提供了工厂模式的Web界面,用户可通过该界面配置路...

这篇文章教你看明白 nginx-ingress 控制器

主机nginx一般nginx做主机反向代理(网关)有以下配置...

如何用redis实现注册中心

一句话总结使用Redis实现注册中心:服务注册...

爱可可老师24小时热门分享(2020.5.10)

No1.看自己以前写的代码是种什么体验?No2.DooM-chip!国外网友SylvainLefebvre自制的无CPU、无操作码、无指令计数器...No3.我认为CS学位可以更好,如...

Apportable:拯救程序员,IOS一秒变安卓

摘要:还在为了跨平台使用cocos2d-x吗,拯救objc程序员的奇葩来了,ApportableSDK:FreeAndroidsupportforcocos2d-iPhone。App...

JAVA实现超买超卖方案汇总,那个最适合你,一篇文章彻底讲透

以下是几种Java实现超买超卖问题的核心解决方案及代码示例,针对高并发场景下的库存扣减问题:方案一:Redis原子操作+Lua脚本(推荐)//使用Redis+Lua保证原子性publicbo...

3月26日更新 快速施法自动施法可独立设置

2016年3月26日DOTA2有一个79.6MB的更新主要是针对自动施法和快速施法的调整本来内容不多不少朋友都有自动施法和快速施法的困扰英文更新日志一些视觉BUG修复就不翻译了主要翻译自动施...

Redis 是如何提供服务的

在刚刚接触Redis的时候,最想要知道的是一个’setnameJhon’命令到达Redis服务器的时候,它是如何返回’OK’的?里面命令处理的流程如何,具体细节怎么样?你一定有问过自己...

lua _G、_VERSION使用

到这里我们已经把lua基础库中的函数介绍完了,除了函数外基础库中还有两个常量,一个是_G,另一个是_VERSION。_G是基础库本身,指向自己,这个变量很有意思,可以无限引用自己,最后得到的还是自己,...

China&#39;s top diplomat to chair third China-Pacific Island countries foreign ministers&#39; meeting

BEIJING,May21(Xinhua)--ChineseForeignMinisterWangYi,alsoamemberofthePoliticalBureau...

移动工作交流工具Lua推出Insights数据分析产品

Lua是一个适用于各种职业人士的移动交流平台,它在今天推出了一项叫做Insights的全新功能。Insights是一个数据平台,客户可以在上面实时看到员工之间的交流情况,并分析这些情况对公司发展的影响...

Redis 7新武器:用Redis Stack实现向量搜索的极限压测

当传统关系型数据库还在为向量相似度搜索的性能挣扎时,Redis7的RedisStack...

Nginx/OpenResty详解,Nginx Lua编程,重定向与内部子请求

重定向与内部子请求Nginx的rewrite指令不仅可以在Nginx内部的server、location之间进行跳转,还可以进行外部链接的重定向。通过ngx_lua模块的Lua函数除了能实现Nginx...