写点什么

搭建企业镜像仓库~Harbor

作者:蜗牛也是牛
  • 2022-11-16
    广东
  • 本文字数:4215 字

    阅读完需:约 14 分钟

搭建企业镜像仓库~Harbor

虽然 Docker 官方提供了 Docker Hub 作为公共的 Registry 服务器,给到用户进行镜像的保存和管理工作。但对于企业而言,考虑到安全性和网络效率等原因,通常会搭建私有的 Registry 服务器,用于提供企业内部的镜像仓库服务。

本文将基于开源的 Harbor 项目来介绍关于私有仓库的搭建。

一. Harbor 介绍

Harbor 是由 VMware 公司中国团队开发的一个企业级 Registry 项目,可用于搭建企业内部的容器镜像仓库。Harbor 在 Docker Registry 的基础上增加了企业用户所需的权限控制、安全漏洞扫描、日志审核和远程复制等重要功能,还提供了图形管理界面及面向国内用户的中文支持,开源后便迅速业内流行开来,成为中国云原生用户的主流容器镜像仓库。

2018 年 7 月,Harbor 正式进入 CNCF(谷歌创办的云原生基金会,旗下项目包括 Kubernetes、Prometheus 等世界级产品),并在 2020 年 6 月顺利毕业,成为了 CNCF 首个来自中国的开源项目。

Harbor 的架构如下图所示,其中 Core services 为 Harbor 的核心模块,主要包括 UI、token 和 webhook 三个组件。UI 提供图形化界面,辅助用户管理镜像;webhook 用于及时 获取 Registry 上镜像状态的变化情况,并传递给其他模块;token 组件用于提供验证令牌。

另外,还有 Job service 用于多个 Harbor 间的镜像同步功能,Log collector 用于日志收集和审核功能。


除了自身组件外,Harbor 也需要使用到一些外部组件,如使用 Nginx 作为代理、Registry v2 作为镜像存储、PostgreSQL 作为数据库等等。

harbor 的每个组件都是以 Docker 容器的形式进行部署,可以使用 Docker Compose 来进行统一管理。

二. 软硬件要求

1. 硬件要求

注:硬件配置只是官方提供的一个参考,生产环境还需要根据实际情况进行容量规划。

2. 软件要求


三. 安装部署

1. 安装 Docker(参考以下)

一.  Centos 安装 

Docker 的安装要求使用 Centos 7.x 或 8.x 的版本,安装方式有 yum、RPM 包或脚本安装几种方式,此处我们使用 yum 方式。

1. 配置官方 yum 源

$ sudo yum install -y yum-utils$ sudo yum-config-manager \    --add-repo \    https://download.docker.com/linux/centos/docker-ce.repo
复制代码


2. 安装 Docker

$ sudo yum install docker-ce docker-ce-cli containerd.io
复制代码

注:此处使用社区版安装,包括服务端和客户端;containerd 为 docker 的 runtime。


默认情况下,yum 工具会安装最新的稳定版,如果需要指定 docker 版本,可通过下面命令查看支持的版本,并从中选择需要的版本。

$ yum list docker-ce --showduplicates | sort -r
复制代码

例如:

$ sudo yum install docker-ce-19.03.9-3.el7  docker-ce-cli-19.03.9-3.el7  containerd.io
复制代码


3. 启动 Docker

$ sudo systemctl start docker$ sudo systemctl enable docker
复制代码


4. 查看 Docker 版本号,确认安装正确。


$ docker version
复制代码

5. 添加用户到组

默认情况下,docker 命令需要特权账号来执行,普通账号只能用 sudo 的方式授权执行,这样多少会有些不太方便。

我们可以将账号加入到安装 Docker 时自动创建的 docker 用户组,在退出后重新登录,此时即可正常执行 Docker 命令。

$ sudo usermod -aG docker <user_name>
复制代码
二. Ubuntu 安装

目前 Docker 官方推荐使用以下 Ubuntu 的版本进行安装:

  • Ubuntu Impish 21.10

  • Ubuntu Hirsute 21.04

  • Ubuntu Focal 20.04 (LTS)

  • Ubuntu Bionic 18.04 (LTS)

Docker 的安装可通过 apt、DEB 包或安装脚本几种方式,此处我们使用 apt 方式安装。

1. 更新 apt 包索引

$ sudo apt-get update
复制代码


2. 安装依赖包

$ sudo apt-get install \    ca-certificates \    curl \    gnupg \    lsb-release
复制代码


3. 添加 Docker 的官方 GPG 密钥

$  curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
复制代码


指定稳定版本仓库

$ echo \  "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
复制代码


4. 安装 Docker

$ sudo apt-get update$ sudo apt-get install docker-ce docker-ce-cli containerd.io
复制代码


如果要安装特定版本,可通过下面命令查看支持的版本

$ apt-cache madison docker-ce
复制代码


然后安装过程中指定对应的版本号

$ sudo apt-get install docker-ce=5:19.03.15~3-0~ubuntu-focal  docker-ce-cli=5:19.03.15~3-0~ubuntu-focal  containerd.io
复制代码


5. 查看 Docker 版本,确认安装正确。

$ docker version
复制代码


6. 添加用户到组

$ sudo usermod -aG docker <user_name>
复制代码


2. 安装 docker compose

$ sudo curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose$ sudo chmod +x /usr/local/bin/docker-compose
复制代码

测试是否正常安装

$ docker-compose version
复制代码

3. 安装 harbor

下载 harbor

$ wget https://github.com/vmware/harbor/releases/download/v1.10.12/harbor-online-installer-v1.10.12.tgz
复制代码

解压

$ tar -zxvf harbor-online-installer-v1.10.12.tgz
复制代码

修改配置文件 /harbor/harbor.yml

hostname: harbor.alex.com #harbor域名或IP,使用域名的话需要配置DNS解析http:  port: 80https:  port: 443  certificate: /etc/ssl/server.crt  #证书路径  private_key: /etc/ssl/server.keyharbor_admin_password: Harbor12345 #admin用户登录密码database:  password: root123    #harbor数据库ROOT用户链接的密码  max_idle_conns: 50  max_open_conns: 100data_volume: /data    #数据目录
复制代码

运行安装脚本

$ sh install.sh 
复制代码

注:该脚本将安装 harbor 默认组件,如需增加镜像扫描功能,可增加 --with-clair 参数;如需增加 heml 仓库,可增加--with-chartmuseum 参数。

脚本安装完成后,运行 docker-compose 命令,确认容器状态是否正常。

$ docker-compose ps      Name                     Command                  State                                          Ports                                    ------------------------------------------------------------------------------------------------------------------------------------------------harbor-core         /harbor/harbor_core              Up (healthy)                                                                               harbor-db           /docker-entrypoint.sh            Up (healthy)   5432/tcp                                                                    harbor-jobservice   /harbor/harbor_jobservice  ...   Up (healthy)                                                                               harbor-log          /bin/sh -c /usr/local/bin/ ...   Up (healthy)   127.0.0.1:1514->10514/tcp                                                   harbor-portal       nginx -g daemon off;             Up (healthy)   8080/tcp                                                                    nginx               nginx -g daemon off;             Up (healthy)   0.0.0.0:80->8080/tcp,:::80->8080/tcp, 0.0.0.0:443->8443/tcp,:::443->8443/tcpredis               redis-server /etc/redis.conf     Up (healthy)   6379/tcp                                                                    registry            /home/harbor/entrypoint.sh       Up (healthy)   5000/tcp                                                                    registryctl         /home/harbor/start.sh            Up (healthy)               
复制代码

确认 Harbor 相关组件容器运行正常后,打开浏览器访问域名,可看到登录界面,安装完成。



四. 验证仓库使用

1. 创建项目

使用 admin 账号登录 Harbor,新建一个私有项目 mytest。



2. 镜像 tag 

在本地服务器上,使用 docker tag 为本地镜像打标签 

$ docker tag nginx:1.20 harbor.alex.com/mytest/nginx:1.20
复制代码

3. 登录授权

$ docker login harbor.alex.comUsername: adminPassword: 
复制代码

如果是使用自签名证书,可能登录时会报如下错误 :

$ docker login harbor.alex.comUsername: adminPassword: Error response from daemon: Get "https://harbor.alex.com/v2/": x509: certificate signed by unknown authority
复制代码

此时,可以通过下面方式让 Docker 信任 CA 根证书,然后即可正常登录。

$ cp ca.crt /etc/pki/ca-trust/source/anchors$ update-ca-trust extract$ systemctl restart docker
复制代码

登录后,在本地 ~目录会生成 .docker/config.json 文件,保存相关的登录信息,下次使用可不用登录 。

4. 上传镜像

$ docker push harbor.alex.com/mytest/nginx:1.20The push refers to repository [harbor.alex.com/mytest/nginx]07ef16952879: Pushed 881700cb7ab2: Pushed 4f49c6d6dd07: Pushed a64d597d6b14: Pushed c2a3d4a53f9a: Pushed fd95118eade9: Pushed 1.20: digest: sha256:a76df3b4f1478766631c794de7ff466aca466f995fd5bb216bb9643a3dd2a6bb size: 1570
复制代码

上传完成后,即可在镜像仓库看到相关的镜像,验证成功。



发布于: 刚刚阅读数: 4
用户头像

云原生。技术这东东,不怕慢,就怕站; 2022-02-13 加入

还未添加个人简介

评论

发布
暂无评论
搭建企业镜像仓库~Harbor_蜗牛也是牛_InfoQ写作社区