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是开源的企业级镜像仓库管理平台,主要由以下几个组件组成:
- Proxy (Nginx):接收Docker客户端请求,转发给后端组件处理
- Registry:镜像存储和分发服务,默认是Docker Registry开源项目
- Core:管理后台服务,处理镜像管理、访问控制、策略等功能
- Jobservice:运行后台定时任务,比如镜像复制、GC等
- Database:后端数据库,保存镜像及相关元数据
- UI:基于AngularJS的Web界面
- Log: 日志服务,收集其他组件日志
工作原理
- Docker客户端将镜像推送和拉取请求发送到Harbor Proxy
- Proxy将请求转发到Harbor Registry处理
- Registry会调用Core服务进行安全认证、策略检查等
- Core服务从数据库加载元数据,并与Jobservice协调执行后台任务
- Registry访问存储后端保存镜像或返回镜像内容
- Proxy将Registry返回的结果响应给Docker客户端
- 用户还可以通过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就可以
高级
继续访问192.168.9.100(不安全)
---
客户端配置免https
vim进入/etc/docker/daemon.json,配置免https,
- 指定harbor服务器地址,添加:"insecure-registries": ["192.168.9.100:80"]
- 和加速源地址用逗号隔开
```bashvim /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 结束这条命令就可以用了