在当今的软件开发和部署领域,容器化技术变得越来越重要。Docker 作为容器化技术的代表,极大地简化了应用程序的打包、分发和部署过程。而 Docker 镜像仓库则是存储和管理 Docker 镜像的关键组件。Harbor 是一个开源的企业级 Docker 镜像仓库,它提供了镜像签名、访问权限控制等重要功能。接下来,我们就详细介绍如何搭建 Harbor 镜像仓库,并配置镜像签名与访问权限控制。

一、Harbor 部署

1.1 环境准备

在开始部署 Harbor 之前,我们需要准备好相应的环境。这里我们以 Linux 系统为例,具体要求如下:

  • 操作系统:建议使用 CentOS 7 或 Ubuntu 18.04 及以上版本。
  • 硬件资源:至少 2GB 内存,2 个 CPU 核心。
  • 软件依赖:需要安装 Docker 和 Docker Compose。

以下是安装 Docker 和 Docker Compose 的示例命令(以 CentOS 7 为例):

# 安装 Docker
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum install -y docker-ce docker-ce-cli containerd.io
systemctl start docker
systemctl enable docker

# 安装 Docker Compose
curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

1.2 下载并配置 Harbor

首先,我们需要从 Harbor 的官方 GitHub 仓库下载最新版本的 Harbor 安装包:

wget https://github.com/goharbor/harbor/releases/download/v2.5.3/harbor-offline-installer-v2.5.3.tgz
tar xvf harbor-offline-installer-v2.5.3.tgz
cd harbor

然后,我们需要对 Harbor 的配置文件进行修改。打开 harbor.yml.tmpl 文件,将其复制为 harbor.yml 并进行编辑:

cp harbor.yml.tmpl harbor.yml
vi harbor.yml

harbor.yml 文件中,我们需要修改以下几个关键配置项:

# 配置 Harbor 的访问地址
hostname: your-harbor-domain.com

# 配置 Harbor 的管理员密码
harbor_admin_password: your-admin-password

# 配置数据库信息
database:
  password: your-db-password
  # 如果使用外部数据库,可以修改以下配置
  # external_database:
  #   host: your-db-host
  #   port: your-db-port
  #   db_name: your-db-name
  #   username: your-db-username
  #   password: your-db-password

1.3 安装并启动 Harbor

完成配置后,我们可以使用以下命令进行 Harbor 的安装和启动:

./install.sh

安装过程可能需要一些时间,安装完成后,Harbor 会自动启动。我们可以通过以下命令检查 Harbor 的运行状态:

docker-compose ps

如果看到所有服务都处于 Up 状态,说明 Harbor 已经成功启动。

二、镜像签名

2.1 为什么需要镜像签名

在容器化环境中,镜像的安全性至关重要。镜像签名可以确保镜像在传输和存储过程中没有被篡改,从而保证容器的安全性。通过对镜像进行签名,我们可以验证镜像的来源和完整性。

2.2 配置镜像签名

Harbor 支持使用 Notary 进行镜像签名。Notary 是一个开源的镜像签名工具,它可以为 Docker 镜像提供数字签名。

首先,我们需要在 Harbor 中启用 Notary 服务。在 harbor.yml 文件中,将 notary 配置项修改为 enabled: true

notary:
  enabled: true
  # Notary 服务的访问地址
  server:
    url: https://your-harbor-domain.com:4443

修改完成后,重新启动 Harbor:

docker-compose down
./install.sh

2.3 对镜像进行签名

在使用 Notary 对镜像进行签名之前,我们需要安装 Notary 客户端。可以通过以下命令进行安装:

wget https://github.com/theupdateframework/notary/releases/download/v0.6.1/notary-Linux-amd64
chmod +x notary-Linux-amd64
mv notary-Linux-amd64 /usr/local/bin/notary

接下来,我们可以使用以下命令对镜像进行签名:

# 登录到 Harbor
docker login your-harbor-domain.com

# 推送镜像到 Harbor
docker push your-harbor-domain.com/library/your-image:tag

# 对镜像进行签名
notary -s https://your-harbor-domain.com:4443 -d ~/.docker/trust add your-harbor-domain.com/library/your-image:tag

在签名过程中,Notary 会生成一个数字签名,并将其存储在 Harbor 中。当我们拉取镜像时,Notary 会自动验证镜像的签名,确保镜像的完整性。

三、访问权限控制配置

3.1 访问权限控制的重要性

在企业环境中,不同的用户对 Docker 镜像的访问权限可能不同。通过配置访问权限控制,我们可以确保只有授权的用户才能访问和操作特定的镜像仓库和镜像。

3.2 配置用户和角色

Harbor 提供了丰富的用户和角色管理功能。我们可以通过 Harbor 的 Web 界面或 API 来创建用户和角色。

3.2.1 创建用户

登录到 Harbor 的 Web 界面,点击 用户管理 菜单,然后点击 新建用户 按钮。在弹出的对话框中,输入用户的基本信息,如用户名、密码、邮箱等,然后点击 确定 按钮即可创建新用户。

3.2.2 创建角色

点击 角色管理 菜单,然后点击 新建角色 按钮。在弹出的对话框中,输入角色的名称和描述,然后选择该角色的权限,如 项目管理员开发者访客 等,最后点击 确定 按钮即可创建新角色。

3.3 配置项目权限

在 Harbor 中,项目是管理镜像仓库的基本单位。我们可以为每个项目配置不同的访问权限。

登录到 Harbor 的 Web 界面,点击 项目 菜单,选择要配置权限的项目,然后点击 成员 标签。在成员列表中,点击 添加成员 按钮,选择要添加的用户或角色,然后为其分配相应的权限,如 读取写入管理 等,最后点击 确定 按钮即可完成项目权限的配置。

四、应用场景

4.1 企业内部镜像管理

在企业内部,不同的部门或团队可能需要使用不同的 Docker 镜像。通过搭建 Harbor 镜像仓库,企业可以集中管理这些镜像,提高镜像的使用效率和安全性。同时,通过配置访问权限控制,企业可以确保只有授权的用户才能访问和操作特定的镜像仓库和镜像。

4.2 持续集成和持续部署(CI/CD)

在 CI/CD 流程中,Docker 镜像的存储和管理是非常重要的环节。Harbor 可以作为 CI/CD 流程中的镜像仓库,为自动化构建和部署提供支持。通过镜像签名,CI/CD 系统可以确保拉取的镜像没有被篡改,从而保证部署的安全性。

五、技术优缺点

5.1 优点

  • 功能丰富:Harbor 提供了镜像签名、访问权限控制、项目管理等丰富的功能,满足了企业级镜像仓库的需求。
  • 开源免费:Harbor 是开源软件,可以免费使用和定制,降低了企业的使用成本。
  • 易于部署和管理:Harbor 提供了离线安装包和 Docker Compose 部署方式,方便用户进行快速部署和管理。

5.2 缺点

  • 性能问题:在高并发场景下,Harbor 的性能可能会受到一定的影响。
  • 学习成本:对于初学者来说,Harbor 的配置和使用可能有一定的学习成本。

六、注意事项

6.1 安全配置

在部署 Harbor 时,我们需要注意安全配置。例如,要使用 HTTPS 协议进行访问,配置强密码,定期更新 Harbor 的版本等。

6.2 资源管理

Harbor 需要一定的硬件资源来运行。在部署时,我们需要根据实际情况合理配置硬件资源,避免出现性能问题。

6.3 数据备份

Harbor 中的镜像和数据非常重要,我们需要定期进行数据备份,以防止数据丢失。

七、文章总结

通过本文的介绍,我们详细了解了如何搭建 Harbor 镜像仓库,并配置镜像签名与访问权限控制。Harbor 作为一个开源的企业级 Docker 镜像仓库,提供了丰富的功能和良好的用户体验。在实际应用中,我们可以根据企业的需求和场景,合理配置 Harbor 的各项功能,提高 Docker 镜像的管理效率和安全性。同时,我们也需要注意安全配置、资源管理和数据备份等问题,确保 Harbor 的稳定运行。