虽然 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 版本号,确认安装正确。
5. 添加用户到组
默认情况下,docker 命令需要特权账号来执行,普通账号只能用 sudo 的方式授权执行,这样多少会有些不太方便。
我们可以将账号加入到安装 Docker 时自动创建的 docker 用户组,在退出后重新登录,此时即可正常执行 Docker 命令。
$ sudo usermod -aG docker <user_name>
复制代码
二. Ubuntu 安装
目前 Docker 官方推荐使用以下 Ubuntu 的版本进行安装:
Docker 的安装可通过 apt、DEB 包或安装脚本几种方式,此处我们使用 apt 方式安装。
1. 更新 apt 包索引
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 版本,确认安装正确。
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
复制代码
测试是否正常安装
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: 80
https:
port: 443
certificate: /etc/ssl/server.crt #证书路径
private_key: /etc/ssl/server.key
harbor_admin_password: Harbor12345 #admin用户登录密码
database:
password: root123 #harbor数据库ROOT用户链接的密码
max_idle_conns: 50
max_open_conns: 100
data_volume: /data #数据目录
复制代码
运行安装脚本
注:该脚本将安装 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/tcp
redis 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.com
Username: admin
Password:
复制代码
如果是使用自签名证书,可能登录时会报如下错误 :
$ docker login harbor.alex.com
Username: admin
Password:
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.20
The 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
复制代码
上传完成后,即可在镜像仓库看到相关的镜像,验证成功。
评论