Harbor 是一个企业级的云原生容器镜像仓库,专为 Docker 和 Kubernetes 等平台设计,提供了一套强大的管理工具,用于存储、管理和分发容器镜像。它扩展了开源 Docker Registry 的功能,增加了许多企业级特性,例如安全性、身份验证、访问控制(RBAC)、审计日志、图形化管理界面、镜像复制以及漏洞扫描等,使其成为企业私有镜像仓库的理想选择。
以下是安装 Harbor 的关键亮点:
在深入安装步骤之前,了解 Harbor 的架构和核心组件至关重要。Harbor 的设计理念是模块化和容器化,所有功能都通过 Docker 容器来实现,并通过 Docker Compose 进行协调管理。
Harbor 的主要组件及其交互示意图
Harbor 的主要组件包括:
docker push
和 docker pull
命令。它与 Harbor 的令牌服务交互,确保只有携带合法 token 的请求才能访问。这些组件协同工作,共同构建了一个功能强大、安全可靠的企业级镜像仓库。
在安装 Harbor 之前,需要确保您的服务器环境满足以下基本要求:
如果您的服务器尚未安装 Docker 和 Docker Compose,可以按照以下步骤进行安装(以 CentOS 为例):
# 卸载旧版本Docker(如果存在)
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
# 安装所需的依赖包
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# 添加 Docker 的官方 YUM 仓库
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 安装 Docker CE
sudo yum install -y docker-ce docker-ce-cli containerd.io
# 启动 Docker 服务
sudo systemctl start docker
sudo systemctl enable docker
# 安装 Docker Compose
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
# 验证安装
docker version
docker-compose version
注意: 您可以配置 Docker 镜像加速器(例如阿里云、腾讯云等),以加快 Docker 镜像的下载速度。
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://<your-mirror-id>.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
Harbor 提供了两种主要的安装方式:在线安装和离线安装。选择哪种方式取决于您的服务器网络环境和部署需求。
在线安装方式简单快捷,适合能够连接到互联网的服务器。它会从 Docker Hub 下载 Harbor 相关镜像,因此安装包体积较小。安装速度取决于您的网络带宽。
在线安装 Harbor 的一个示例界面
离线安装方式适合部署 Harbor 的主机没有连接到互联网的环境(例如公司内网)。离线安装包包含了预先构建好的所有 Harbor 镜像,因此安装包体积较大。这种方式可以避免因网络问题导致镜像下载失败或缓慢。
大多数企业级部署会优先选择离线安装,以确保稳定性和安全性。以下是离线安装的详细步骤:
Harbor 离线安装包的内容预览
访问 Harbor 的 GitHub Release 页面 (https://github.com/goharbor/harbor/releases
),下载最新稳定版本的离线安装包(例如 harbor-offline-installer-vX.Y.Z.tgz
)。
# 创建一个目录用于存放Harbor安装文件
mkdir -p /usr/local/harbor
cd /usr/local/harbor
# 下载Harbor离线安装包(这里以一个示例版本为例,请替换为最新版本)
# 如果服务器无法直接访问GitHub,请先下载到本地再上传到服务器
wget https://github.com/goharbor/harbor/releases/download/v2.9.1/harbor-offline-installer-v2.9.1.tgz
将下载的压缩包解压到您选择的安装目录中:
tar -zxvf harbor-offline-installer-v2.9.1.tgz -C /usr/local/harbor/
# 解压后会生成一个名为harbor的目录,进入该目录
cd /usr/local/harbor/harbor
解压后的目录中包含 harbor.yml.tmpl
(配置文件模板)和 install.sh
(安装脚本)等重要文件。
复制 harbor.yml.tmpl
为 harbor.yml
,并根据您的实际需求进行修改。这是安装过程中最关键的步骤之一。
cp harbor.yml.tmpl harbor.yml
vim harbor.yml
主要修改的配置项包括:
配置项 | 描述 | 示例值 |
---|---|---|
hostname |
Harbor 服务的主机名或 IP 地址。这是 Docker 客户端访问 Harbor 的地址。 | your.harbor.domain.com 或 192.168.1.100 |
port |
Harbor 门户和核心 API 的 HTTP 端口。通常会设置为 80 或其他未被占用的端口。 | 80 (HTTP) 或 443 (HTTPS) |
harbor_admin_password |
Harbor 管理员 (admin) 用户的初始密码。强烈建议修改为强密码。 | MySecurePass123 |
data_volume |
Harbor 数据卷的存储路径,用于存储镜像、数据库数据、日志等。确保该路径有足够的空间。 | /data/harbor (默认) |
https |
是否启用 HTTPS。生产环境强烈建议启用 HTTPS。如果启用,需要配置证书和私钥路径。 |
|
clair |
是否启用 Clair(镜像漏洞扫描)。 | enabled: true 或 false |
trivy |
是否启用 Trivy(镜像漏洞检测)。 | enabled: true 或 false |
如果选择启用 HTTPS,您需要生成或准备好您的 SSL 证书和私钥文件,并将其路径配置在 harbor.yml
中。示例如下:
# 生成CA证书私钥
openssl genrsa -out ca.key 4096
# 生成CA证书
openssl req -x509 -new -nodes -sha512 -days 3650 \
-subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=your.harbor.domain.com" \
-key ca.key \
-out ca.crt
# 生成服务器证书私钥
openssl genrsa -out your.harbor.domain.com.key 4096
# 生成证书签名请求(CSR)
openssl req -sha512 -new \
-subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=your.harbor.domain.com" \
-key your.harbor.domain.com.key \
-out your.harbor.domain.com.csr
# 使用CA证书签名服务器证书
openssl x509 -req -sha512 -days 3650 \
-extfile <(printf "subjectAltName=DNS:your.harbor.domain.com,IP:192.168.1.100") \
-CA ca.crt -CAkey ca.key -CAcreateserial \
-in your.harbor.domain.com.csr \
-out your.harbor.domain.com.crt
然后将 your.harbor.domain.com.crt
和 your.harbor.domain.com.key
放置到 harbor.yml
中指定的路径。
配置完成后,运行安装脚本 install.sh
。您可以根据需要添加参数来启用可选组件:
--with-clair
:启用 Clair 漏洞扫描器。--with-trivy
:启用 Trivy 漏洞检测器。--with-notary
:启用内容信任服务。--with-chartmuseum
:启用 Chart Museum (Helm Chart 仓库)。
# 进入Harbor安装目录
cd /usr/local/harbor/harbor
# 运行安装脚本
./install.sh --with-trivy --with-chartmuseum
安装脚本会自动加载离线安装包中的 Docker 镜像,生成必要的配置文件,并通过 Docker Compose 启动所有 Harbor 服务。
安装成功后,您会看到类似以下输出:
----Harbor has been installed and started successfully.----
Now you should be able to visit the admin portal at http://your.harbor.domain.com or https://your.harbor.domain.com
使用 docker-compose ps
命令检查所有 Harbor 容器的运行状态,确保它们都处于 Up
状态:
cd /usr/local/harbor/harbor
docker-compose ps
您应该会看到类似以下输出:
Name Command State Ports
--------------------------------------------------------------------------
harbor-core /harbor/entrypoint.sh ... Up (healthy) 80/tcp
harbor-db /docker-entrypoint.sh ... Up (healthy) 5432/tcp
harbor-jobservice /harbor/entrypoint.sh ... Up (healthy) 80/tcp
harbor-log /bin/sh -c /usr/loca... Up (healthy) 127.0.0.1:1514->10514/tcp
harbor-portal /harbor/entrypoint.sh ... Up (healthy) 80/tcp
harbor-registry /etc/docker/registry... Up (healthy) 5000/tcp
harbor-registryctl /harbor/harbor_regis... Up (healthy) 80/tcp
harbor-trivy-adapt... /usr/local/bin/trivy-... Up (healthy) 80/tcp
在浏览器中访问您在 harbor.yml
中配置的 hostname
和端口(例如 http://your.harbor.domain.com
或 https://your.harbor.domain.com
)。
使用默认管理员用户名 admin
和您在 harbor.yml
中设置的 harbor_admin_password
登录。
Harbor 登录页面
Harbor 管理控制台概览
为了更直观地评估 Harbor 在企业级镜像仓库中的表现,我将通过一个雷达图展示其在关键能力上的综合评分。这些评分基于 Harbor 的常见功能、社区支持以及部署实践经验。
从雷达图中可以看出,Harbor 在安全性、扩展性、功能丰富性方面表现突出,远超基础的 Docker Registry。这得益于其集成的漏洞扫描、身份认证、权限管理和丰富的管理界面。虽然在易用性方面安装配置步骤相对基础 Registry 略复杂,但考虑到其提供的企业级功能,这是可以接受的。社区与支持以及性能与稳定性方面,Harbor 作为一个广泛使用的开源项目,也拥有良好的表现。
成功安装 Harbor 后,您可以开始使用它来管理您的容器镜像。
为了让 Docker 客户端能够与 Harbor 交互,如果您的 Harbor 使用的是 HTTP 协议(非 HTTPS),需要将 Harbor 地址添加到 Docker 的不安全仓库列表中。如果使用 HTTPS 并配置了有效的证书,则无需此步骤。
# 修改Docker daemon配置文件
sudo vim /etc/docker/daemon.json
# 添加或修改 insecure-registries 字段
# 如果已经有 registry-mirrors,请注意JSON格式
{
"insecure-registries": ["your.harbor.domain.com:80"]
}
# 重启Docker服务
sudo systemctl daemon-reload
sudo systemctl restart docker
使用 Docker 命令行登录到您的 Harbor 仓库:
docker login your.harbor.domain.com
Username: admin
Password: [您在harbor.yml中设置的密码]
登录成功后,您的凭据将保存在 ~/.docker/config.json
中。
首先,您需要有一个 Docker 镜像。您可以构建自己的镜像或使用现有镜像。然后,为镜像打上 Harbor 仓库的标签:
# 假设您有一个名为 'my-app' 的镜像,版本为 '1.0'
# 为镜像打tag,格式为:[Harbor地址]/[项目名]/[镜像名]:[版本]
docker tag my-app:1.0 your.harbor.domain.com/myproject/my-app:1.0
# 推送镜像到Harbor
docker push your.harbor.domain.com/myproject/my-app:1.0
在 Harbor 网页界面中,您可以创建一个新的项目 (Project),例如 myproject
,然后将镜像推送到该项目中。
从 Harbor 仓库拉取镜像非常简单:
docker pull your.harbor.domain.com/myproject/my-app:1.0
Harbor 在 CI/CD 流程中扮演着核心角色,作为私有镜像的中央存储,它确保了镜像的安全、可靠分发。结合 Jenkins、GitLab CI 等工具,可以实现从代码提交到镜像构建、存储和部署的自动化流程。
该视频展示了 DevOps 训练营中关于 GitLab CI 集成制品库和 Harbor 镜像库实践的内容,非常适合了解 Harbor 在自动化部署中的作用。
视频中提到的“Harbor 镜像库实践”环节,正是讨论了如何将 Harbor 作为一个不可或缺的组件融入到 DevOps 工作流中。通过 Harbor,企业可以:
例如,在 Jenkins 或 GitLab CI 中配置流水线时,可以将镜像构建步骤的输出直接推送到 Harbor,然后部署工具(如 Kubernetes)再从 Harbor 拉取镜像进行部署。
# 示例 Jenkinsfile 片段 (Groovy)
pipeline {
agent any
stages {
stage('Build Image') {
steps {
script {
sh "docker build -t your.harbor.domain.com/myproject/my-app:${env.BUILD_NUMBER} ."
}
}
}
stage('Push Image') {
steps {
script {
withCredentials([usernamePassword(credentialsId: 'harbor-credentials', passwordVariable: 'HARBOR_PASSWORD', usernameVariable: 'HARBOR_USERNAME')]) {
sh "docker login -u ${HARBOR_USERNAME} -p ${HARBOR_PASSWORD} your.harbor.domain.com"
sh "docker push your.harbor.domain.com/myproject/my-app:${env.BUILD_NUMBER}"
}
}
}
}
stage('Deploy to Kubernetes') {
steps {
script {
# 使用 kubectl 或 Helm 从 Harbor 拉取镜像并部署
sh "kubectl set image deployment/my-app my-app=your.harbor.domain.com/myproject/my-app:${env.BUILD_NUMBER}"
}
}
}
}
}
这种集成方式极大地提升了软件交付的速度和可靠性。
首先,检查您的服务器是否满足所有先决条件,特别是 Docker 和 Docker Compose 的版本。其次,仔细检查 harbor.yml
配置文件,确保所有路径、端口和凭据都正确无误。查看安装日志(通常在 /var/log/harbor/
目录下)或通过 docker-compose logs
命令查看容器日志,找出具体的错误信息。常见的错误包括端口冲突、存储空间不足、网络问题(无法下载镜像)或证书配置错误。
是的,Harbor 支持高可用部署。您可以通过 Helm 在 Kubernetes 集群上安装 Harbor 来实现高可用。这种部署方式通常涉及多个 Harbor 实例、共享存储(如 NFS、S3 等)和高可用数据库集群,以确保服务的持续可用性。
升级 Harbor 通常需要下载新版本的安装包,更新 harbor.yml
配置文件,并执行升级脚本。Harbor 官方文档提供了详细的升级指南,通常会涉及数据迁移以适应新版本的数据库架构。在升级前,强烈建议备份所有数据。
Harbor 提供了内置的 LDAP/AD 集成功能。您可以在 Harbor 的管理界面中配置 LDAP/AD 服务器的连接信息、用户和组的搜索规则等,从而将企业现有的用户体系与 Harbor 进行对接,实现统一身份认证。
Harbor 作为一款功能强大、企业级的云原生容器镜像仓库,为 Docker 和 Kubernetes 用户提供了全面的镜像管理解决方案。从初始的 Docker 及 Docker Compose 环境准备,到离线安装包的下载、配置和部署,再到最终的日常使用和与 CI/CD 流程的集成,Harbor 都展现出其卓越的实用性和可靠性。通过本文的详细指南,希望您能够顺利地在自己的环境中搭建并高效管理您的私有容器镜像仓库。