掘金 后端 ( ) • 2024-05-13 09:47

如果使用过Docker 官方提供 Docker Registry 搭建过容器仓库,会发现功能比较简单,仅提供的基本镜像上传、下载和删除等操作,还提供了一些管理操作的API。今天介绍一个功能更完整的搭建镜像仓库的项目,它叫Harbor 。以下为简单介绍,

Harbor 是一个开源的 Registry 服务器。 VMware 维护的一个项目,专为私有部署设计,提供了高级的安全性和管理功能,比如镜像复制、访问控制、镜像签名、扫描镜像中的安全漏洞等功能。Harbor 通过添加身份验证、策略控制、审计、安全扫描等功能扩展了开源 Docker Distribution 平台,使其更适合搭建私有镜像仓库使用。

Harbor 内置了一个Web UI,通过浏览器访问,进行管理。如下图

如果你正在寻找更合适的私有 Docker Registry 的解决方案,Harbor 是一个值得考虑的选择。Harbor功能相比官方提供的 Docker Registry 镜像功能更加丰富,提供了更多的开箱即用的功能。

Harbor官网 (goharbor.io)

安装 Harbor

下面进行安装演示,安装需要系统为 Linux,并且已安装 Docker、Docker Compose。我这里使用虚拟机进行安装。配置为2 core 2 G ram。硬盘大小,测试用随意,如20G即可。实际可根据镜像存储规模进行磁盘规划。演示安装版本为最新:v2.9.4。当版本不同时,请参考官方文档,阅读差异。避免踩坑,出不来。

  1. 进入 Harbor 官网首页

  2. 点击首页Download now按钮

  3. 等待跳转至 Github

4. 下载安装包。提供了两种安装方式,在线(online)与离线(offline)。我这里选择harbor-offline-installer-v2.9.4.tgz ,在 Linux 运行如下命令进行开始下载,稍等片刻,等待下载完成

➜  ~ wget https://github.com/goharbor/harbor/releases/download/v2.9.4/harbor-offline-installer-v2.9.4.tgz

进行解压,使用tar命令解压,如下,

➜  ~ tar zxvf harbor-offline-installer-v2.9.4.tgz harbor/
harbor/harbor.v2.9.4.tar.gz
harbor/prepareharbor/LICENSEharbor/install.sh
harbor/common.sh
harbor/harbor.yml.tmpl

进入 harbor 目录

➜  ~ cd harbor
➜  harbor ls
common.sh  harbor.v2.9.4.tar.gz  harbor.yml.tmpl  install.sh  LICENSE  prepare

复制一份默认配置文件,harbor.yml.tmpl为默认配置模板,使用cp命令

➜  harbor cp harbor.yml.tmpl harbor.yml

配置文件harbor.yml包含了安装 Harbor 镜像仓库的所使用的自定义配置。http端口、https端口及证书、域名、及容器的运行参数、登录 Web UI 的管理员密码等。默认管理员为admin,以下节选为部分配置内容

clients.hostname: reg.mydomain.com  // Harbor服务的访问域名,替换为你的
http:  port: 80                  // http 访问端口
https:  port: 443                 // https 访问端口 
certificate: /your/certificate/path   // 证书路径,替换为你的  
private_key: /your/private/key/path   // 私钥路径,替换为你的
harbor_admin_password: Harbor12345  // 登录 Web UI 的管理员密码

配置好,便可以开始安装了

9. 开始安装,以root用户身份,运行install.sh脚本进行安装。脚本会进行检查 Docker 、Docker Compose 是否满足安装条件,拉取所需镜像,最后会使用 Docker Compose 启动 Harbor 服务。

10. 完成,登录浏览器,访问。配置文件中的hostname: reg.mydomain.com,使用reg.mydomain.com访问

安装过程的注意事项:

https:

当提供https服务,请正确配置证书。不需要,删除https部分。

hostname:

hostname要DNS可查询到。

端口占用:

当端口已被其他服务占用,可替换为其他未使用的端口,重新安装。比如:443占用了,可以写8443。

**如:**当端口设置为8443,访问需要增加端口号,如:

reg.mydomain.com:8443

如果想通过443访问,可在nginx中反向代理访问reg.mydomain.com:443时,代理到reg.mydomain.com:8443。

发现拉取,推送地址是reg.mydomain.com:8443,可以通过修改配置文件中的

# Uncomment external_url if you want to enable external proxy
# And when it enabled the hostname will no longer used
https://reg.mydomain.com:443        // 取消注释,修改为你的访问地址

自签证书:

自签证书,需修改 Docker 配置文件 /etc/docker/daemon.json,如下,

➜  harbor cat /etc/docker/daemon.json
{        
    "insecure-registries": ["hub.x.cn"]     // 信任 hub.x.cn
}

创建一个目录/etc/docker/certs.d/hub.x.cn,把证书放里面。

之后,重启下 Docker ,命令如下

systemctl daemon-reloadsystemctl restart docker

就可以通过hub.x.cn,推送、拉取镜像了。

关于 Harbor 的介绍就到这里。选择哪个取决于你的具体需求,Docker Registry 和 Harbor 都可以用于存储和分发 Docker 镜像的私有仓库服务,当你需要一个开箱即用的仓库服务时,选择 Harbor 更为适合。

读完后,忍不住要加个关注!不是我吹,但你会后悔没关注的!

公众号:字节码在跳舞