基于Harbor 实现Docker 私有仓库搭建的研究

2022-11-03 13:28
现代工业经济和信息化 2022年9期
关键词:令牌用户名镜像

程 宁

(湖北轻工职业技术学院, 湖北 武汉 430070)

1 Docker 仓库简介

Docker 仓库是Docker 集中存放镜像文件的场所,分为公有仓库和私有仓库两种形式。目前,最大的公有仓库是Docker Hub,存放了数量庞大的镜像供用户下载使用,用户也可上传镜像到公有仓库。国内不少云服务提供商,如时速云、阿里云、百度云等云服务商提供了仓库的本地源,可以提供稳定的国内访问。虽然公有仓库有众多优点,但是也存在一些问题。如公司企业级的私有镜像,由于镜像涉及机密的数据和软件,私密性比较强,因此不太适合放在公有仓库中。此外,出于安全考虑,一些公司不允许公司内网服务器环境访问外网,因此无法下载到公有仓库的镜像[1]。为了解决这些问题,可以根据需要搭建私有仓库,提供私有镜像的上传、下载。对比公有仓库,私有仓库具有安全性和私密性高、访问速度快、自主控制、方便存储和可维护性高的优点。

常见搭建Docker 私有仓库的方法有利用Registry 和Harbor 两种形式。Registry 是Docker 官方的一个私有仓库镜像,可以将本地的镜像打标签进行标记然后push 到以Registry 起的容器的私有仓库中。对比Registry,Harbor 是一个用于存储和分发Docker 镜像的企业级私有Registry 服务器, 具有基于角色的访问控制, 基于策略的镜像复制,漏洞扫描,LDAP/AD 支持,镜像删除和垃圾收集等强大功能[2]。本文将重点介绍利用Harbor 搭建Docker 私有仓库的方法。

2 Harbor 概述

2.1 Harbor 整体架构(见图1)

Porxy:对应启动组件nginx,提供nginx 反向代理服务,该代理服务来自浏览器的Docker client 的不同请 求 由Proxy 分 发 到Harbor 的registry、UI、token service 等组件。

Registry:对应启动组件registry,负责提供Docker镜像的存储,以及处理Docker 的push、pull 等请求。由于Harbor 需要对镜像的访问做权限控制,因此Registry 会将docker client 的每次push、pull 请求转发到token 服务以获取一个有效的token 令牌。

Job services:对应启动组件harbor-jobservice,主要用于镜像复制,本地镜像可以被同步到远程的Harboar 镜像仓库。

Log Collector:对应启动组件harbor-log,负责收集其他容器的日志并进行日志轮转。

Database:对应启动组件harbor-db,负责提供数据持久化服务,用于存放工程元数据、用户数据、角色数据、同步策略以及镜像元数据。

2.2 Harbor 实现

Harbor 是通过docker compose 进行部署的,其每一个组件均会被包装成一个Docker 容器,不同容器组件按照以下步骤进行Login 登录和Push 传输处理工程:

步骤1:客户端发送请求会被监听80 端口的代理容器所接收,容器中的nginx 将会把该请求转发给后端的Registry 容器

步骤2:如果Registry 容器发现请求中没有携带令牌,会返回一个401 错误码,并将获取令牌URL 的地址传递给Docker 客户端。如请求携带令牌,则转向步骤6。

内部控制管理体制的不完善,导致高校在招标过程中,缺少必要的监督制度与严格的操作过程以及容易受行政干扰,导致采购的物质质量、价格和售后服务都很难得到保证,极易滋生腐败。另外,高校在物资采购和验收时,存在一人同时负责这两项工作的情况,严重违反分工控制准则。在设备采购后,高校中出现不把新采购设备计入固定资产项目的情况,导致国有资产流失严重。

步骤3:当Docker 客户端收到401 错误码后,会向token service URL 发送一个嵌入用户名和密码信息的请求。

步骤4:token service URL 收到请求后,通过解码提取用户名和密码信息,并到数据库中进行核对。

步骤5:当token service 被配置为LDAP/AD 认证时,token service 会通过外部的服务器来完成认证。如果认证通过,Token 服务会给客户端分发一个令牌,当客户端得到令牌,再次执行Login 登录操作,以完成Login 登录工作。

步骤6:在收到获得令牌后,Registry 会检验令牌的合法性及有效期,如令牌通过合法性和有效期的检验,则会开启镜像的push 传输过程,并将镜像放入到仓库中。

3 案例实现

本案例选用两台部署在VMware Workstation 15 中的Centos7.2 虚拟机作为宿主机,均已预先安装好Docker,并与外网互通,且关闭防火墙和Selinux 配置[3]。

1)由于Harbor 需通过Docker 的compose 项目进行部署,因此需要先安装compose,本实验选用docker compose 的版本为1.29.2。

2)安装openssl 软件包,并配置OpenSSL 工具配置文件openssl.cnf。

3)签发SSL 证书。

命令执行后,会成生harbor.crt 和harbor.key 文件,再将生成的私有证书追加到系统的证书管理文件中,否则后面push、login 和pull 时会报错。

4)安装harbor 仓库,harbor 的安装包为harbor-offline-installer-v1.10.1.tgz。

进入当前目录下的harbor 目录,编辑harbor.yml配置文件,修改hostname、https 证书路径、admin 密码三个参数信息。

步骤1:利用docker ps 命令检测容器启动状态,要求所有容器均为“UP”状态。

步骤2:打开浏览器,地址栏中输入“https://192.168.100.20”,在打开的登录容器中输入正确的用户名和密码后,进行harbor 工作主界面。

步骤3:创建一个名为test 的项目,设置项目访问权限为“公开”,如下页图2 所示。

步骤4:利用dockerlogin 命令登录192.168.100.20,输入正确的用户名和密码后,如显示“Login Succeeded“信息,则登录成功。

步骤5:利用docker tag 命令修改镜像标签后,使用docker push 命令将镜像推送到私有仓库。

步骤6:在test 项目中可查看到推送的nginx 镜像。如图3 所示。

步骤7:在客户端上利用docker pull 命令从私有仓库中下载nginx 镜像。

编辑/etc/docker/daemon.json 文件。

重启docker 服务后,利用docker pull 命令从私有仓库中下载nginx 镜像,并利用docker image 查看下载的镜像。

4 结语

本案例实现了利用harbor 在docker 环境在搭建私有仓库的方法。在实际生产系统中,私有仓库搭建还需考虑高可用性,以解决单点故障的问题,可采用磁盘共享负载均衡分发方案、Harbor 复制同步策略方案和HA 主从方案进行解决。

猜你喜欢
令牌用户名镜像
《现代临床护理》杂志投稿程序
称金块
《护士进修杂志》投稿程序
镜像
镜像
机智的快递员
巧用凭据管理 自动登录网络
镜像
《道教法印令牌探奥》出版发行