搭建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
相关推荐
雪域迷影3 小时前
PostgreSQL Docker Error – 5432: 地址已被占用
数据库·docker·postgresql
福大大架构师每日一题4 小时前
22.1 k8s不同role级别的服务发现
容器·kubernetes·服务发现
莹雨潇潇4 小时前
Docker 快速入门(Ubuntu版)
java·前端·docker·容器
tangdou3690986555 小时前
1分钟搞懂K8S中的NodeSelector
云原生·容器·kubernetes
tangdou3690986558 小时前
Docker系列-5种方案超详细讲解docker数据存储持久化(volume,bind mounts,NFS等)
docker·容器
later_rql8 小时前
k8s-集群部署1
云原生·容器·kubernetes
漫无目的行走的月亮11 小时前
在Docker中运行微服务注册中心Eureka
docker
大G哥13 小时前
记一次K8S 环境应用nginx stable-alpine 解析内部域名失败排查思路
运维·nginx·云原生·容器·kubernetes
大道归简14 小时前
Docker 命令从入门到入门:从 Windows 到容器的完美类比
windows·docker·容器
zeruns80214 小时前
如何搭建自己的域名邮箱服务器?Poste.io邮箱服务器搭建教程,Linux+Docker搭建邮件服务器的教程
linux·运维·服务器·docker·网站