Harbor私有镜像仓库搭建

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: Harbor是由VMware开发的开源镜像仓库管理系统,具有以下一些主要特点和功能:1.镜像管理Harbor可以存储、管理镜像,支持访问控制、镜像复制、镜像删除等功能。2.角色访问控制可以创建用户和设置角色控制镜像的访问权限,例如只读或读写权限。3.镜像复制支持在多个Harbor实例之间复制镜像,保证分布式部署可以访问相同镜像。4.镜像安全扫描可以配置镜像安全扫描,检测镜像中的漏洞或风险。5.镜像签名与信任支持内容信任机制,确保镜像来源可信的同时保护镜像内容不被篡改。6.策略管理可以对用户访问、镜像复制和其他操作设置灵活的策略。

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进入配置文件进行修改

harbor.png

一 、修改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"]
  • 和加速源地址用逗号隔开
    ```bash

    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服务器

docker-login.png

---

---


问题
harbor-start.png

  • 如果在启动或者重启 harbor.service时
  • 一直卡着不动,不结束这条命令
  • 这时候就可以去浏览器访问一下harbor,如果可以访问的就是启动成功了
  • 直接ctrl+c 结束这条命令就可以用了
相关实践学习
通过容器镜像仓库与容器服务快速部署spring-hello应用
本教程主要讲述如何将本地Java代码程序上传并在云端以容器化的构建、传输和运行。
Kubernetes极速入门
Kubernetes(K8S)是Google在2014年发布的一个开源项目,用于自动化容器化应用程序的部署、扩展和管理。Kubernetes通常结合docker容器工作,并且整合多个运行着docker容器的主机集群。 本课程从Kubernetes的简介、功能、架构,集群的概念、工具及部署等各个方面进行了详细的讲解及展示,通过对本课程的学习,可以对Kubernetes有一个较为全面的认识,并初步掌握Kubernetes相关的安装部署及使用技巧。本课程由黑马程序员提供。 &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情:&nbsp;https://www.aliyun.com/product/kubernetes
目录
相关文章
|
6月前
|
Kubernetes Cloud Native 应用服务中间件
云原生|kubernetes|kubernetes集群使用私有镜像仓库拉取镜像(harbor或者官方的registry私有镜像仓库)
云原生|kubernetes|kubernetes集群使用私有镜像仓库拉取镜像(harbor或者官方的registry私有镜像仓库)
1047 0
|
4天前
|
运维 Linux Docker
安装Harbor镜像仓库
本文介绍了如何在Linux系统上安装和配置Harbor镜像仓库。首先通过阿里云镜像源安装Docker,然后下载并解压Harbor离线安装包。配置Harbor服务的相关参数。最后,通过运行安装脚本完成Harbor的安装,并进行基本的测试,包括登录、构建和推送Docker镜像。文章还提供了相关资源链接,方便读者进一步了解和学习。
16 2
|
1月前
|
Kubernetes Ubuntu NoSQL
harbor镜像仓库自建
harbor镜像仓库自建
|
4月前
|
数据可视化 Linux 数据安全/隐私保护
Harbor私有镜像仓库搭建
Harbor私有镜像仓库搭建
64 3
|
3月前
|
Docker 容器
docker: 搭建 harbor 镜像仓库
docker: 搭建 harbor 镜像仓库
|
6月前
|
存储 API 数据安全/隐私保护
企业级Docker镜像仓库Harbor部署与使用
企业级Docker镜像仓库Harbor部署与使用
|
6月前
|
存储 安全 数据库
搭建Harbor镜像仓库
搭建Harbor镜像仓库
312 2
|
6月前
|
JavaScript Devops Java
DevOps搭建(一)-安装Harbor镜像仓库详细步骤
DevOps搭建(一)-安装Harbor镜像仓库详细步骤
104 0
|
6月前
|
Shell Linux 开发工具
搭建自己的Docker Harbor镜像仓库(2)-- 使用篇
搭建自己的Docker Harbor镜像仓库(2)-- 使用篇
183 1
|
6月前
|
Docker 容器
搭建自己的Docker Harbor镜像仓库(1)--- 安装篇
搭建自己的Docker Harbor镜像仓库(1)--- 安装篇
183 1