Docker入门到实践(十四)Docker企业级容器镜像仓库HarBor的搭建与配置

1,741 阅读12分钟

Docker 入门到实践系列文章列表:

Docker 入门到实践 (一) docker 简介与安装
Docker 入门到实践 (二) docker 常用命令讲解
Docker 入门到实践 (三) Dockerfile 解析与镜像制作
Docker 入门到实践 (四) docker 容器数据卷与数据卷容器
Docker 入门到实践 (五) docker 数据的备份、恢复与迁移
Docker 入门到实践 (六) docker 网络模式详解以及容器间的网络通信
Docker 入门到实践 (七) docker 常用软件的安装
Docker 入门到实践 (八) 本地镜像推送到阿里云 和 下载镜像到本地
Docker 入门到实践 (九) docker 可视化界面 portainer 的安装与使用
Docker 入门到实践 (十) IDEA 集成 Docker 构建容器镜像,部署项目
Docker 入门到实践 (十一) docker 私有仓库的搭建与配置
Docker 入门到实践 (十二) docker compose 简介与安装
Docker 入门到实践 (十三) docker compose 配置文件与常用命令讲解
Docker 入门到实践 (十四) docker 企业级容器镜像仓库 HarBor 的搭建与配置

一、前言

  在上一篇文章中已经介绍了 docker compose 配置文件与常用命令, 下面正式进入到 Docker 企业级容器镜像仓库 HarBor 的搭建与配置的讲解。

二、企业级容器镜像仓库 HarBor 的介绍

  Harbor 是构建企业级私有 docker 镜像的仓库的开源解决方案,它是 Docker Registry 的更高级封装。作为一个企业级私有 docker 镜像仓库,HarBor 提供了更好的性能和安全,以提升用户使用仓库构建和运行环境传输镜像的效率,同时 HarBor 支持安装在多个仓库节点的镜像资源复制,镜像全部保存在私有仓库中, 确保数据和知识产权在公司内部网络中管控。此外,HarBor 也提供了友好的 Web UI 界面和高级的安全特性,例如:用户和角色的管理、访问控制和活动审计等。

三、HarBor 特性

  • 基于角色的访问控制:用户与 Docker 镜像仓库通过 “项目” 进行组织管理,一个用户可以对多个镜像仓库在同一命名空间(project) 里有不同的权限

  • 镜像复制:镜像可以在多个 Registry 实例中复制 (同步)。尤其适合于负载均衡,高可用,混合云和多云的场景

  • 图形化用户界面:用户可以通过浏览器来浏览,检索当前 Docker 镜像仓库,管理项目和命名空间

  • AD/LDAP 支持:Harbor 可以集成企业内部已有的 AD/LDAP,用于鉴权认证管理

  • 审计管理:所有针对镜像仓库的操作都可以被记录追溯,用于审计管理

  • 国际化:已拥有英文、中文、德文、日文和俄文的本地化版本,之后将会有更多的语言被添加进来

  • RESTful API:RESTful API 提供给管理员对于 Harbor 更多的操控,使得与其它管理软件集成变得更容易

  • 部署简单:提供在线和离线两种安装工具,也可以安装到 vSphere 平台 (OVA 方式) 虚拟设备

四、HarBor 组件介绍

  • Proxy(代理服务器):Harbor 组件,例如 Register,UI 和令牌服务都在代理服务后端,代理将来自客户端和浏览器的流量返回给后端各个服务

  • Register(仓库):负责存储 Docker Images 和处理 docker pull/push 命令。HarBor 会强制对访问 images 进行控制,register 会将客户端引导到令牌服务,以获取每次 push 和 pull 请求的有效令牌

  • Core services(核心服务):Harbor 核心功能,主要提供以下服务

    • UI(图形用户界面):提供图形化界面,帮助用户管理 registry 上的镜像 (image),并对用户进行授权

    • Token(令牌):负责根据用户的项目角色为每个 Docker push/pull 命令签发令牌。如果从 Docker 客户端发送的请求中没有令牌,注册中心会将请求重定向到 Token 令牌服务

    • Webhook:Webhook 是在注册表中配置的一种机制,可以及时获取 Registry 仓库上 image 状态的变化情况。同时,HarBor 使用 Webhook 来更新日志、启动复制以及其他一些功能

  • Database(数据库):为 Core services(核心服务) 提供数据库服务,负责储存用户权限、审计日志和 Docker image 分组信息等数据

  • Job services(Job服务):提供 Images 镜像远程复制功能,可以将本地 images 同步到其他 HarBor 实例

  • Log collector(日志采集器):帮助监控 Harbor 运行,负责收集其他组件的日志

五、HarBor 与 Registry 的区别

  Harbor 和 Registry 都是 Docker 的镜像仓库,但相比较于 Regisrty 来说,HarBor 具有很多的优点,其优点如下所示:

  • 提供分层传输机制,优化网络传输:Docker 镜像是是分层的,而如果每次传输都使用全量文件 (所以用 FTP 的方式并不适合),显然不经济。必须提供识别分层传输的机制,以层的 UUID 为标识,确定传输的对象

  • 提供WEB界面,优化用户体验:只用镜像的名字来进行上传下载显然很不方便,需要有一个用户界面可以支持登陆、搜索功能,包括区分公有、私有镜像

  • 支持水平扩展集群:当有用户对镜像的上传下载操作集中在某服务器,需要对相应的访问压力作分解

  • 良好的安全机制:企业中的开发团队有很多不同的职位,对于不同的职位人员,分配不同的权限,具有更好的安全性。同时 HarBor 提供了基于角色的访问控制机制,并通过项目来对镜像进行组织和访问权限的控制,kubernetes 中通过 namespace 来对资源进行隔离,在企业级应用场景中,通过将两者进行结合可以有效将 kubernetes 使用的镜像资源进行管理和访问控制,增强镜像使用的安全性。尤其是在多租户场景下,可以通过租户、namespace 和项目相结合的方式来实现对多租户镜像资源的管理和访问控制

六、HarBor 的安装与配置

官方安装文档:github.com/goharbor/ha…

1、安装环境要求

1.1、硬件要求

资源容量描述
cpu最少 2 cpu4 cpu 最佳
内存最少 4 GB8 GB 最佳
磁盘最少 40 GB160 GB 最佳

1.2、软件要求

软件版本要求描述
Python2.7 或更高版本请注意,您可能必须在默认未安装 Python 解释器的 Linux 发行版(Gentoo,Arch)上安装 Python
Docker engine1.10 或更高版本有关安装说明,请参阅:docker 简介与安装
Docker Compose1.6.0 或更高版本有关安装说明,请参阅:docker compose 简介与安装
Openssl最好是最新的生成 HarBor 证书和密钥

1.3、网络端口

端口协议描述
443HTTPSHarbor 门户和核心 API 将在此端口上接受 https 协议的请求
4443HTTPS与 Harbor 的 Docker Content Trust 服务的连接,仅在启用 Notary 时才需要
80HTTPHarbor 门户和核心 API 将在此端口上接受 HTTP 协议的请求

2、安装 HarBor

2.1、安装 Docker 和 Docker Compose

Docker 安装:blog.csdn.net/qq_39135287…

Docker Compose 安装:blog.csdn.net/qq_39135287…

推荐使用 python-pip 方式安装 Docker Compose,因为在安装过程中,会顺便将 HarBor 需要的 Python 和 Openssl 给安装上

2.2、下载 HarBor 离线安装包

  HarBor 的下载地址:github.com/goharbor/ha…
HarBor 安装分为在线安装和离线安装 (这里我选择下载离线安装包),其区别如下:

  • Online installer(在线安装):The installer downloads Harbor’s images from Docker hub. For this reason, the installer is very small in size. (安装程序从 Docker hub 下载 Harbor 的图像。因此,安装程序非常小。)

  • Offline installer(离线安装):Use this installer when the host does not have an Internet connection. The installer contains pre-built images so its size is larger. (当主机没有互联网连接时使用此安装程序。安装程序包含预构建的映像,因此其大小较大。)

如果觉得下载比较繁琐,我已经提供了 HarBor 安装包
链接:pan.baidu.com/s/1y3kBbkin…
提取码:ofjx

2.2、将 HarBor 安装包上传到服务器

下载完成之后,打开 WinSCP,把我们下载好的 HarBor 安装包,上传到 Linux 的 /usr/local/software 文件目录下 (注意:这里的 software 文件目录需要我们自行创建,创建 software 目录是方便我们管理安装的软件)

2.3、解压 HarBor 安装包

//1、进入到software目录下
cd /usr/local/software/

//2、解压HarBor安装包
tar xzf harbor-offline-installer-v1.9.4.tgz

2.4、编辑 HarBor 配置文件

//1、进入到harbor解压目录下
cd harbor/

//2、查看当前目录下的文件
ls

//3、编辑harbor.yml配置文件
vim harbor.yml

//4、如果没有harbor.yml文件, 则复制harbor.yml.tmpl改名为harbor.yml即可
cp harbor.yml.tmpl harbor.yml

(1)、修改 hostname 属性 (提示:不要使用 localhost 或者 127.0.0.1,因为 HarBor 需要被外部客户端访问)

hostname: reg.mydomain.com
修改为
hostname: Linux服务器ip地址 或者 Linux服务器的域名

(2)、修改 http 端口,默认为 80 端口,为了避免与 Nginx 端口冲突,所以这里我修改为 6278 端口 (端口号的修改可以任意,只要不与其他端口号冲突即可)

http:
  port: 80
修改为
http:
  port: 6278

(3)、注释https相关的端口配置,不然启动会报错

# https related config
#https:
  # https port for harbor, default is 443
  #port: 8843
  # The path of cert and key files for nginx
  #certificate: /your/certificate/path
  #private_key: /your/private/key/path

(4)、修改管理员 (admin) 登录 HarBor UI 界面的密码,默认为账号为 admin,密码为 Harbor12345

harbor_admin_password: Harbor12345
修改为
harbor_admin_password: 123456

2.5、初始化配置文件并安装

//1、初始化配置文件
./prepare

//2、安装HarBor
./install.sh

//3、查看镜像运行状态
docker-compose ps

//常用命令
docker-compose up -d  //后台启动HarBor
docker-compose start  //启动HarBor
docker-compose restart //重启HarBor
docker-compose stop  //停止HarBor
docker-compose down  //停止HarBor并删除容器




执行第二步“安装HarBor”时,可能会出现以下报错: Error response from daemon: Conflict. The container name "/xxx" is already in use by container。这表示xxx容器名称已经被使用过了,和我们脚本执行中安装的容器名称冲突了,我们需要将之前安装的容器名称通过docker rename 旧容器名 新容器名进行修改。

2.6、访问 HarBor

打开浏览器,访问 HarBor,HarBor 的访问地址为你在 harbor.yml 配置文件中设置的 hostname:http 端口 (这里我的为 http://192.168.198.145:6278)

2.7、登录 HarBor

用户名为:admin,密码为 harbor.yml 配置文件中设置的 harbor_admin_password

2.8、配置邮箱服务

1、选择配置管理 → 邮箱,进入到邮箱配置页面

2、修改相关配置 (以 QQ 邮箱为例),QQ 授权码获取方式

邮件服务器: 由 smtp.mydomain.com 修改为 smtp.qq.com

邮件服务器端口: 默认为25,也可以修改为465

用户名: 你的qq邮箱

密码: 你的qq邮箱授权码

邮件来源: qq昵称<你的qq邮箱>

3、测试邮件服务器是否配置成功,点击 "测试邮件服务器" 按钮,如果出现 "邮件服务器连通正常" 提示,则表示邮箱配置成功

3、修改 daemon.json 配置文件

//1、进入到docker目录下
cd /etc/docker/

//2、编辑daemon.json配置文件
vim daemon.json

//3、添加HarBor仓库地址,该步骤用于让docker信任HarBor仓库地址,
{"insecure-registries": ["harbor.yml配置文件中设置的hostname:http端口"]} 


注意:"registry-mirrors" 一行末尾有逗号,

4、重启 docker 服务

systemctl restart docker

七、HarBor 仓库镜像的上传、拉取与删除

1、本地镜像上传到 HarBor 仓库

1.1、创建项目

HarBor 仓库中默认会有一个 "library" 的项目,所有镜像都必须存放到项目下,这里我们自己新建一个 "tomcat" 项目,用于存放 tomcat 镜像

输入项目名称, 设置项目的访问级别,项目级别分为两种:公开和私有

  • 公开:表示拉取镜像时,不需要使用 "docker login" 命令登录到 HarBor,即可拉取镜像,但是上传镜像时,需要使用 "docker login" 命令,才能上传镜像

  • 私有:表示拉取 和 上传镜像时,都需要使用 "docker login" 命令登录到 HarBor,即可拉取 或 上传镜像

存储数量 和 存储容量可以根据自己情况来设置 (这里我选择默认配置),最后点击 "确定" 按钮,创建项目

1.2、上传镜像至 HarBor 仓库

//1、标记此镜像为HarBor仓库的镜像
docker tag 镜像ID/镜像名称[:版本号] harbor.yml配置文件中设置的hostname:http端口/项目名称/镜像名称[:版本号]

//2、登录HarBor仓库
docker login harbor.yml配置文件中设置的hostname:http端口
username: admin
Password: harbor.yml配置文件中设置的harbor_admin_password

//3、上传标记的镜像
docker push harbor.yml配置文件中设置的hostname:http端口/项目名称/镜像名称[:版本号]

以 tomcat:8 为例,测试镜像上传到 HarBor 仓库

查看镜像是否上传成功,可以看到 tomcat 项目的镜像仓库数 由 0 变成 1

点击 tomcat 项目,可以查看该项目下的所有镜像

点击 tomcat/tomcat 镜像,可以查看该镜像的具体信息

2、拉取 HarBor 仓库的镜像到本地

//1、如果项目的访问级别为私有,则需要先登录到HarBor仓库 (访问级别为公开则可以跳过该步骤)
//私有项目如果不登录,则会报denied: requested access to the resource is denied 错误
docker login harbor.yml配置文件中设置的hostname:http端口
username: admin
Password: harbor.yml配置文件中设置的harbor_admin_password

//2、拉取镜像到本地
docker pull harbor.yml配置文件中设置的hostname:http端口/项目名称/镜像名称[:版本号]

3、HarBor 仓库镜像的删除

勾选需要删除的镜像,点击 "删除" 按钮,在 "删除镜像仓库确认" 弹出框中,再次点击 "删除" 按钮,即可删除该镜像

本文由 简悦 SimpRead 转码, 原文地址 blog.csdn.net