Harbor私有镜像仓库搭建

举报
Pterosaur 发表于 2023/08/28 00:06:16 2023/08/28
【摘要】 Harbor 介绍Harbor是由VMware开发的开源镜像仓库管理系统,具有以下一些主要特点和功能:1.镜像管理Harbor可以存储、管理镜像,支持访问控制、镜像复制、镜像删除等功能。2.角色访问控制可以创建用户和设置角色控制镜像的访问权限,例如只读或读写权限。3.镜像复制支持在多个Harbor实例之间复制镜像,保证分布式部署可以访问相同镜像。4.镜像安全扫描可以配置镜像安全扫描,检测镜...

Harbor

介绍

Harbor是由VMware开发的开源镜像仓库管理系统,具有以下一些主要特点和功能:

1.镜像管理

Harbor可以存储、管理镜像,支持访问控制、镜像复制、镜像删除等功能。

2.角色访问控制

可以创建用户和设置角色控制镜像的访问权限,例如只读或读写权限。

3.镜像复制

支持在多个Harbor实例之间复制镜像,保证分布式部署可以访问相同镜像。

4.镜像安全扫描

可以配置镜像安全扫描,检测镜像中的漏洞或风险。

5.镜像签名与信任

支持内容信任机制,确保镜像来源可信的同时保护镜像内容不被篡改。

6.策略管理

可以对用户访问、镜像复制和其他操作设置灵活的策略。

7.LDAP/AD集成

支持LDAP和AD对用户进行统一认证管理,方便与企业目录服务集成。

8.审计日志

详细记录用户和系统的操作日志,用于审计跟踪。

9.RESTful API

提供开放API接口服务,便于与其他系统集成。

10.高可用性

支持多节点负载均衡部署,保证服务的高可用性。

综上,Harbor提供全面的镜像管理功能,有助于构建私有Docker镜像仓库服务。

组件

Harbor是开源的企业级镜像仓库管理平台,主要由以下几个组件组成:

  1. Proxy (Nginx):接收Docker客户端请求,转发给后端组件处理
  2. Registry:镜像存储和分发服务,默认是Docker Registry开源项目
  3. Core:管理后台服务,处理镜像管理、访问控制、策略等功能
  4. Jobservice:运行后台定时任务,比如镜像复制、GC等
  5. Database:后端数据库,保存镜像及相关元数据
  6. UI:基于AngularJS的Web界面
  7. Log: 日志服务,收集其他组件日志

工作原理

  1. Docker客户端将镜像推送和拉取请求发送到Harbor Proxy
  2. Proxy将请求转发到Harbor Registry处理
  3. Registry会调用Core服务进行安全认证、策略检查等
  4. Core服务从数据库加载元数据,并与Jobservice协调执行后台任务
  5. Registry访问存储后端保存镜像或返回镜像内容
  6. Proxy将Registry返回的结果响应给Docker客户端
  7. 用户还可以通过Web UI管理镜像、用户、项目等信息

通过核心服务统一管理认证、授权、策略等功能,使Harbor成为易于使用的安全镜像管理平台。

  • harbor是基于compose部署的,所有需要有docker和compose环境

安装部署

安装环境

IP docker version docker-compose version 内核 centos
192.168.9.100 24.0.5 v2.20.3 6.4.12-1.el7.elrepo.x86_64 7.9

环境准备


#关闭swap

`临时`
swapoff -a


`永久` 
`vim进入fstab把这行加井号注释掉`

vim /etc/fstab

#/dev/mapper/centos-swap swap                    swap    defaults        0 0

# 设置主机名
hostnamectl set-hostname harbor
bash

# 关闭防火墙 Selinux
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i '/SELINUX/s/enforcing/disabled/' /etc/selinux/config


#CentOS/RHEL系统上配置NTP时间同步服务的:

yum -y install ntp
#安装ntp软件包。

systemctl enable ntpd
#设置ntp服务开机自启。

systemctl start ntpd
#启动ntp服务。

ntpdate -u cn.pool.ntp.org
#从公共ntp服务器同步一次时间。

hwclock --systohc
#将系统时间同步到硬件时钟。

timedatectl set-timezone Asia/Shanghai
#设置系统时区为上海。

#这样就完成了NTP服务的安装和配置,系统时间将通过ntpd守护进程定期从ntp服务器同步,并保证系统时间的准确性。

#hwclock将最后同步的时间写入到CMOS,重启后BIOS能从硬件时钟获取正确时间。

#设置好的时区也将被保存。

#通过这组命令可以轻松配置好Linux服务器的系统时间和NTP服务。


#内核升级

#如需想内核升级至最新可参考以下命令
#CentOS 7 上安装最新版本 kernel-ml 内核的过程:

rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
#导入 elrepo 源的 GPG 公钥,用于验证软件包的签名。

rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm
#安装 elrepo 源的 rpm 包,添加 elrepo 源。

yum --enablerepo=elrepo-kernel install kernel-ml -y
#启用 elrepo 源,并安装 kernel-ml 内核包。

sed -i s/saved/0/g /etc/default/grub
#编辑 /etc/default/grub 文件,设置开机从新内核启动。

grub2-mkconfig -o /boot/grub2/grub.cfg
#更新 grub 配置。

reboot
#重启系统,以使用新的内核启动。

#总结:
#该命令的作用是添加 elrepo 源、安装最新的 kernel-ml 内核包,并更新 grub 引导来使用该内核,从而升级系统的 Linux 内核。



docker安装

(最新版本)

#----------------------------------------------------------------------------------------------------------------------------
#CentOS 7 系统的 yum 源替换为阿里云的镜像源。
#这行命令使用 wget 从阿里云镜像站下载 CentOS 7 的 yum 源 repo 文件,并保存到 /etc/yum.repos.d/CentOS-Base.repo。
#这行命令执行 yum update 来更新系统,并使用 -y 自动确认。
#由于前面已将默认的 yum 源替换为阿里云镜像源,所以 yum update 会从镜像站获取最新的 RPM 软件包进行系统更新。
#这样做的效果 使用阿里云镜像站替代默认的 yum 源服务器 、从镜像站下载软件包更快 、提高系统更新的速度
#总之,就是使用阿里云的镜像站替换掉 CentOS 默认的 yum 源,从而加速系统更新速度,提高下载效率。
#----------------------------------------------------------------------------------------------------------------------------
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
yum -y update


#首先卸载已安装的Docker
#如果你的操作系统没有安装过Docker就不需要执行卸载命令
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine


#建立仓库
## 安装Docker所需要的一些工具包
sudo yum install -y yum-utils


## 建立Docker yum仓库 
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo


#使用yum安装了最新版本的Docker CE社区版、命令行工具包及containerd.io容器运行时,完成了Docker CE的安装。
sudo yum -y install docker-ce docker-ce-cli containerd.io
#----------------------------------------------------------------------------------------------------------------------------
#默认是安装最新版,例如想指定版本为18.06.1   
#yum -y install  docker-ce-18.06.1 docker-ce-cli containerd.io

#例如已经安装想更改docker版本为18.06.1
#首先卸载
#yum -y remove docker-ce docker-ce-cli containerd.io
#重新执行安装命令
#yum -y install  docker-ce-18.06.1 docker-ce-cli containerd.io
#----------------------------------------------------------------------------------------------------------------------------


#配置加速器
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [
"https://pho7vcn8.mirror.aliyuncs.com",
"https://hub-mirror.c.163.com",
"https://reg-mirror.qiniu.com"
  ]
}
EOF
#----------------------------------------------------------------------------------------------------------------------------
#配置加速器说明
#这几个地址都是国内知名的 Docker 镜像加速器源站地址:
#https://pho7vcn8.mirror.aliyuncs.com
#这是阿里云提供的 Docker Hub 免费镜像加速地址
#ACR会为每一个账号(阿里云账号或RAM用户)生成一个镜像加速器地址,配置镜像加速器前,您也可以获取自己的镜像加速器地址,使用自己的,只要有阿里云账号就可以获取到 
# 当然如果不行去获取,直接用这个也可以

#可参考文档进行获取自己的阿里云镜像加速器源站地址
[参考文档](https://developer.aliyun.com/article/1311709?spm=a2c6h.13262185.profile.8.5c251f45RfGpoL)
#---
#https://hub-mirror.c.163.com
#这是网易云提供的 Docker Hub 镜像加速地址。
#---
#https://reg-mirror.qiniu.com
#这是七牛云提供的 Docker Hub 镜像加速地址。
#---
#这些镜像源站都与官方的 Docker Hub 镜像库保持同步,但是国内用户访问它们将比访问 Docker Hub 官方站点速度更快、更稳定。
#将这些加速器地址应用到 Docker 后,在拉取镜像时会直接从源站获取,提高了镜像拉取速度。
#----------------------------------------------------------------------------------------------------------------------------


#重新加载系统管理守护进程,从而读取新的配置文件。
sudo systemctl daemon-reload


#开机自启并启动Docker
sudo systemctl enable docker --now


#测试 Docker 是否安装正常
sudo docker run hello-world

Docker-compose安装

[compose]:Releases · docker/compose (github.com)

wget  https://github.com/docker/compose/releases/download/v2.20.3/docker-compose-linux-x86_64
#使用wget命令下载Docker Compose
#可能也会网络原因可能无法执行成功,多执行几遍,或者直接去访问网站下载本地然后上传到服务器
#本人比较执着重复执行此命令三四遍吧,下载成功了/

mv docker-compose-linux-x86_64 /usr/local/bin/docker-compose
#mv命令将其移动到/usr/local/bin目录下,并改名为docker-compose

chmod a+x /usr/local/bin/docker-compose
#chmod命令使docker-compose所有用户可执行

docker-compose version
#打印docker-compose版本,确认安装成功。


#Docker-compose常用命令

docker-compose up -d               ###后台启动,如果容器不存在根据镜像自动创建

docker-compose down   -v           ###停止容器并删除容器

docker-compose start               ###启动容器,容器不存在就无法启动,不会自动创建镜像

docker-compose stop                ###停止容器


harbor下载

[harbor]:Releases · goharbor/harbor (github.com)

方法一:

下载harbor离线安装包并解压

wget  https://github.com/goharbor/harbor/releases/download/v2.8.4/harbor-offline-installer-v2.8.4.tgz
#使用wget命令下载 harbor
#可能也会网络原因可能无法执行成功,多执行几遍,或者直接去访问网站下载本地然后上传到服务器
#本人比较执着重复执行此命令三四遍吧,下载成功了/

tar zxf harbor-offline-installer-v2.8.3.tgz
#解压

方法二:

下载harbor在线安装包并解压

wget https://github.com/goharbor/harbor/releases/download/v2.8.4/harbor-online-installer-v2.8.4.tgz
#使用wget命令下载 harbor
#可能也会网络原因可能无法执行成功,多执行几遍,或者直接去访问网站下载本地然后上传到服务器
#本人比较执着重复执行此命令三四遍吧,下载成功了/

tar zxf harbor-online-installer-v2.8.3.tgz
#解压

创建 https 证书

mkdir  /https/ca  -p
chmod  -R 777 /https/ca/
cd /https/ca/
#创建证书目录,并赋予权限

openssl genrsa -des3 -out harbor.key 2048
# 生成私钥,需要设置密码:123456

openssl req -sha512 -new \
-subj "/C=CN/ST=JS/L=WX/O=zwx/OU=jhmy/CN=192.168.9.100" \
-key harbor.key \
-out harbor.csr
# 生成CA证书,需要输入密码123456

cp harbor.key  harbor.key.org
# 备份证书

openssl rsa -in harbor.key.org -out harbor.key
# 退掉私钥密码,以便docker访问

openssl x509 -req -days 100000  -in harbor.csr -signkey harbor.key -out harbor.crt
# 使用证书进行签名

配置安装harbor

配置

#进入harbor解压包里
cd  harbor/

cp  harbor.yml.tmpl harbor.yml
#利用模板重新配置文件

vim harbor.yml
#vim进入配置文件进行修改

一 、修改hostname为harbor服务器IP

二、修改ca认证指定位置

三、默认登录管理员用户名

四、管理员密码

也可以修改harbor.yml文件时修改端口号,访问的时候加修改的端口号就可以了


安装

./install.sh

harbor项目开机自启

使用 docker-compose 创建的 Harbor 这样的项目,可以通过在系统中配置 systemd unit 来实现开机自启动。

在 /etc/systemd/system 目录下创建一个 unit 文件,例如 harbor.service
unit 文件内容类似如下:

vim /etc/systemd/system/harbor.service
[Unit]
Description=Harbor
Requires=docker.service
After=docker.service

[Service]  
Type=oneshot
RemainAfterExit=yes
WorkingDirectory=/root/harbor
ExecStart=/usr/local/bin/docker-compose -f docker-compose.yml up
ExecStop=/usr/local/bin/docker-compose -f docker-compose.yml down
TimeoutStartSec=0 

[Install]
WantedBy=multi-user.target

/配置文件解释

WorkingDirectory=/root/harbor
这一条是指定harbor解压包的位置,看自己解压在哪里就指定哪里
其他直接复制使用就可以,不用修改

简单解释一下:

[Unit]段:

  • Description: 描述服务的信息
  • Requires: 当前unit依赖的其他unit,它会在当前unit之前启动
  • After: 当前unit应该晚于哪些unit启动
  • PartOf: 当前unit是哪个unit的一部分,会与之一起启动停止

[Service]段:

  • Type: 定义启动方式,oneshot表示仅启动一次
  • RemainAfterExit: 进程退出后仍认为服务处于激活状态
  • WorkingDirectory: 指定执行命令的目录路径
  • ExecStart: 启动服务的命令
  • ExecStop: 停止服务的命令
  • TimeoutStartSec:系统等待服务启动的最大秒数

[Install]段:

  • WantedBy: 定义系统targets,multi-user.target代表多用户命令行模式

所以简单来说:

  • Requires/After 定义服务启动顺序依赖
  • ExecStart/ExecStop 定义启动停止命令
  • Type/RemainAfterExit 定义服务生命周期控制
  • WantedBy 定义开机自启目标

通过这些关键配置,可以控制服务的自动化启动、关闭和依赖关系。


#重新加载系统管理守护进程,从而读取新的配置文件。
sudo systemctl daemon-reload

#设置开机自启harbor
systemctl enable harbor.service 

访问测试

因为没有修改端口,默认80,直接访问IP就可以

https://192.168.9.100

高级

继续访问192.168.9.100(不安全)



客户端配置免https

#vim进入/etc/docker/daemon.json,配置免https,

  • 指定harbor服务器地址,添加:“insecure-registries”: [“192.168.9.100:80”]
  • 和加速源地址用逗号隔开
#vim /etc/docker/daemon.json

{
"registry-mirrors": [
"https://pho7vcn8.mirror.aliyuncs.com",
"https://hub-mirror.c.163.com",
"https://reg-mirror.qiniu.com"
  ],
"insecure-registries": ["192.168.9.100:80"]
}


#重新加载系统管理守护进程,从而读取新的配置文件。
systemctl daemon-reload


#重启Docker
systemctl restart docker 

客户端登录harbor服务器






问题

  • 如果在启动或者重启 harbor.service时
  • 一直卡着不动,不结束这条命令
  • 这时候就可以去浏览器访问一下harbor,如果可以访问的就是启动成功了
  • 直接ctrl+c 结束这条命令就可以用了
【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。