搭建Docker私服镜像仓库Harbor

1、概述

Harbor是由VMware公司开源的企业级的Docker Registry管理项目,它包括权限管理(RBAC)、LDAP、日志审核、管理界面、自我注册、镜像复制和中文支持等功能。

Harbor 的所有组件都在 Dcoker 中部署,所以 Harbor 可使用 Docker Compose 快速部署。

由于 Harbor 是基于 Docker Registry V2 版本,所以 docker 版本必须 > = 1.10.0 docker-compose >= 1.6.0

Harbor的目标是帮助用户迅速搭建一个企业级的Docker registry服务。它以Docker公司开源的registry为基础,额外提供了如下功能:

  • 基于角色的访问控制(Role Based Access Control)
  • 基于策略的镜像复制(Policy based image replication)
  • 镜像的漏洞扫描(Vulnerability Scanning)
  • AD/LDAP集成(LDAP/AD support)
  • 镜像的删除和空间清理(Image deletion & garbage collection)
  • 友好的管理UI(Graphical user portal)
  • 审计日志(Audit logging)
  • RESTful API
  • 部署简单(Easy deployment)

1.1 架构图

Harbor的每个组件都是以Docker容器的形式构建的,可以使用Docker Compose来进行部署。如果环境中使用了kubernetes,Harbor也提供了kubernetes的配置文件。

Harbor大概需要以下几个容器组成:ui(Harbor的核心服务)、log(运行着rsyslog的容器,进行日志收集)、mysql(由官方mysql镜像构成的数据库容器)、Nginx(使用Nginx做反向代理)、registry(官方的Docker registry)、adminserver(Harbor的配置数据管理器)、jobservice(Harbor的任务管理服务)、redis(用于存储session)。

Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器,整体架构还是很清晰的。架构图如下:

2、安装docker

Harbor要依赖Docker,所以要先安装,见:Ubuntu20.04安装Docker

3、下载Harbor

访问harbor release page,下载Harbor软件tgz压缩包。

或命令下载

powershell 复制代码
wget https://github.com/goharbor/harbor/releases/download/v2.9.4/harbor-offline-installer-v2.9.4.tgz

4、解压

shell 复制代码
tar -zxvf harbor-offline-installer-v2.9.4.tgz

解压后出现一个 hardor 的文件夹,进去之后查看

此时还没有 harbor.yml 和 docker-compose.yml,复制一份harbor.yml.tmpl ,然后进行修改

shell 复制代码
cp harbor.yml.tmpl harbor.yml

主要改下面地方,填上hostname,port,注释掉https相关

5、安装

在当前 harbor 目录下执行./install.sh

等待安装成功。会出现上面提到的 docker-compose.yml文件,里面包含了harbor依赖的镜像和对应容器创建的信息。

6、安装docker-compose

shell 复制代码
# 安装
curl -L "https://github.com/docker/compose/releases/download/v2.27.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

# 授权
chmod +x /usr/local/bin/docker-compose

7、执行docker-compose

在harbor的目录下执行以下命令

shell 复制代码
# 启动
docker-compose up -d

# 停止
docker-compose down

启动后使用docker ps -a查看harbor相关容器启动情况(总计9个):

8、访问

根据上面的配置的IP,访问 http://172.28.168.223:5180

默认用户 和登录密码 可以从 harbor.yml 中找到,官网有个地方也有说明

text 复制代码
admin / Harbor12345

登录成功

9、使用

9.1 创建用户和项目

首先有一个 public 的 library 项目,在里面创建对应的用户即可pull 和 push镜像,也可以创建其它项目

9.2 docker配置 harbor

结合docker实现镜像上传和下载,在/etc/docker/daemon.json添加以下内容
IP为harbor的IP地址和端口,端口如果是80可省略

# 仓库IP地址和端口,或者是域名,要加上http或https
"insecure-registries":["http://172.28.168.223:5180"],
 "registry-mirrors":["http://172.28.168.223:5180"]
  • registry-mirrors:配置的是阿里云镜像加速,该文的问题不需要配置该项
  • insecure-registries:允许 Docker 客户端连接到没有使用 HTTPS 或使用了自签名证书的 Docker 镜像仓库
    registry-mirrors:必须配置你的harbor仓库!!!否则可能造成,docker login是成功的,但是push镜像时出现相同的问题

重启docker:service docker restart

重启harbor

shell 复制代码
# 停止
docker-compose down

# 启动
docker-compose up -d

9.3 登录仓库

shell 复制代码
docker login -u 'admin' -p 'Harbor12345'  http://172.28.168.223:5180

9.2 上传镜像到harbor

在上传镜像前,需要为镜像打上标签,命令如下:

shell 复制代码
docker tag <image_name> <harbor_host>/<project_name>/<image_name>:<tag>

以redis镜像为例:

shell 复制代码
docker tag redis:5.0.10 172.28.168.223:5180/library/redis:5.0.10

上传镜像,命令如下:

shell 复制代码
docker push <harbor_host>/<project_name>/<image_name>:<tag>

上传redis镜像到harbor

shell 复制代码
docker push 172.28.168.223:5180/library/redis:5.0.10

登录harbor控制台查看,在library项目下有redis镜像

9.3 harbor拉取镜像

先删除上面本地的redis镜像172.28.168.223:5180/library/redis:5.0.10

shell 复制代码
docker rmi 172.28.168.223:5180/library/redis:5.0.10

拉取镜像的命令

shell 复制代码
# image_name是要拉取的镜像名称,project_name是Harbor中的项目名称,tag是镜像的版本号
docker pull <harbor_host>/<project_name>/<image_name>:<tag>

拉取redis镜像

shell 复制代码
docker pull 172.28.168.223:5180/library/redis:5.0.10
相关推荐
x2lab1 小时前
国产化 ARM 环境mysql-mariadb 部署
arm开发·mysql·docker·mariadb
mit6.8242 小时前
[Docker#9] 存储卷 | Volume、Bind、Tmpfs | -v/mount | MySQL 灾难恢复 | 问题
linux·运维·docker·容器·架构
qq_167401512 小时前
Docker 组添加用户,设置允许普通用户操作 docker
docker·容器
Z1eaf_complete2 小时前
Docker的基础使用
运维·docker·容器·云计算
李少兄4 小时前
Docker 命令总结:从入门到入土
docker·容器·eureka
想学习java初学者5 小时前
Docker compose部署elasticsearch(单机版)
运维·docker·容器
WEIII6 小时前
MySQL 主从复制原理与搭建实践
后端·mysql·docker
微刻时光7 小时前
Docker部署Nginx
运维·nginx·docker·容器·经验
小安运维日记7 小时前
CKA认证 | Day3 K8s管理应用生命周期(上)
运维·云原生·容器·kubernetes·云计算·k8s
陈小肚7 小时前
k8s 1.28.2 集群部署 docker registry 接入 MinIO 存储
docker·容器·kubernetes