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


一、前言

  在上一篇文章中已经介绍了Docker私有仓库的搭建与配置, 下面正式进入到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的安装与配置


官方安装文档:https://github.com/goharbor/harbor/blob/release-1.7.0/docs/installation_guide.md

1、安装环境要求

1.1、硬件要求

资源 容量 描述
cpu 最少2 cpu 4 cpu最佳
内存 最少4 GB 8 GB最佳
磁盘 最少40 GB 160 GB最佳

1.2、软件要求

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

1.3、网络端口

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


2、安装HarBor

2.1、安装Docker 和 Docker Compose

Docker安装:https://blog.csdn.net/qq_39135287/article/details/101012149#CentOS7Docker_CE__59

Docker Compose安装:https://blog.csdn.net/qq_39135287/article/details/104060264#pythonpip_4

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


2.2、下载HarBor离线安装包

  HarBor的下载地址:https://github.com/goharbor/harbor/releases
  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. (当主机没有互联网连接时使用此安装程序。安装程序包含预构建的映像,因此其大小较大。)



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



(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)、修改管理员(admin) 登录HarBor UI界面的密码,默认为账号为admin,密码为Harbor12345

harbor_admin_password: Harbor12345
修改为
harbor_admin_password: 123456



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

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

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

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

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






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仓库镜像的删除

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







                   如果有遇到不懂或者有问题时,可以扫描下方二维码,欢迎进群交流与分享,希望能够跟大家交流学习!

发布了76 篇原创文章 · 获赞 253 · 访问量 43万+

猜你喜欢

转载自blog.csdn.net/qq_39135287/article/details/104041772