Harbor 镜像仓库部署 (docker 环境)
前言
Harbor 是企业级的 Docker 镜像仓库,提供镜像管理、访问控制、镜像复制、漏洞扫描、审计日志等一系列增强功能,是传统 Docker Registry 的强化版本。在企业容器化平台(如 Kubernetes、Docker Swarm、CI/CD 流水线等)中,Harbor 扮演着关键角色,用于统一管理镜像、提升安全性、规范镜像生命周期。
本文档将详细介绍 Harbor 仓库的部署流程,包括证书生成、配置文件修改、服务启动、客户端信任配置等步骤。通过本文档,你可以快速搭建一套可用于生产环境的 Harbor 私有镜像仓库,支持 HTTPS 安全访问,并确保 Docker 客户端可以成功完成镜像推拉操作。
1 安装 Docker & Docker Compose
===============================安装Docker===============================
# 关闭防火墙和增强功能
systemctl stop firewalld.service && systemctl disable firewalld.service && setenforce 0
# 安装依赖包
yum install -y yum-utils device-mapper-persistent-data lvm2
# 配置镜像加速——华为云加速器
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [ "https://0a40cefd360026b40f39c00627fa6f20.mirror.swr.myhuaweicloud.com" ]
}
EOF
# 设置阿里云镜像源
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 安装 Docker-CE
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/2.24.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose version
===============================若以上Docker Compose下载失败===============================
# 执行
docker compose version
//输出:Docker Compose version v2.27.1 #说明内置了 docker compose 可以直接往下执行
2 下载 Harbor 安装包
wget https://github.com/goharbor/harbor/releases/download/v2.10.0/harbor-online-installer-v2.10.0.tgz
tar xf harbor-online-installer-v2.10.0.tgz
===============================若以上下载失败===============================
# 手动到网页下载安装包
https://github.com/goharbor/harbor/releases/download/v2.8.2/harbor-offline-installer-v2.8.2.tgz
# 将安装包上传到服务器上
cd /opt
tar xf harbor-offline-installer-v2.8.2.tgz
3 生成 HTTPS 证书(自签)
cd /opt/harbor
============================= 配置SAN =============================
cat > harbor-openssl.cnf <<EOF
[ req ]
default_bits = 4096
distinguished_name = req_distinguished_name
req_extensions = v3_req
prompt = no
[ req_distinguished_name ]
CN = harbor.mydomain.com
[ v3_req ]
subjectAltName = @alt_names
[ v3_ext ]
subjectAltName = @alt_names
[ alt_names ]
DNS.1 = harbor.mydomain.com
IP.1 = 192.168.10.71
EOF
============================= 生成CA =============================
openssl genrsa -out ca.key 4096
openssl req -x509 -new -nodes -key ca.key -subj "/CN=harbor-ca" -days 3650 -out ca.crt
============================= 生成key和csr =============================
openssl genrsa -out server.key 4096
openssl req -new -key server.key -out server.csr -config harbor-openssl.cnf
============================= 生成crt =============================
openssl x509 -req -in server.csr \
-CA ca.crt -CAkey ca.key -CAcreateserial \
-out server.crt -days 3650 \
-extensions v3_ext -extfile harbor-openssl.cnf
============================= 复制证书到指定目录 =============================
mkdir -p /opt/harbor/certs
cp server.key /opt/harbor/certs && cp server.crt /opt/harbor/certs
# 目录名要是yml文件定义的IP或域名
mkdir -p /etc/docker/certs.d/192.168.10.71
cp ca.crt /etc/docker/certs.d/192.168.10.71
# 重启docker
systemctl restart docker.service
4 修改 harbor.yml
cp harbor.yml.tmpl harbor.yml
vim harbor.yml
-----------------------------------------------------------------------------------------
# 修改内容:
hostname: <你的服务器 IP>
https:
certificate: /opt/harbor/certs/server.crt
private_key: /opt/harbor/certs/server.key
harbor_admin_password: Harbor12345
============================ 配置主机映射 ==============================
vim /etc/hosts
192.168.10.71 harbor.mydomain.com
5 安装 Harbor
# 检查环境和配置
./prepare
# 拉镜像、启动容器(也可以直接执行,因为会覆盖以上内容)
./install.sh
============================== 启动和关闭容器的命令 ==============================
# 需要重启docker compose 所以容器的时候才需要
//在 /opt/harbor 下执行
docker compose down # 关闭
docker compose up -d # 启动
6 访问 Harbor
https://192.168.10.71
用户:admin
密码:Harbor12345
7 Docker 客户端登录 Harbor
# 登入
docker login -u admin -p harbor12345 192.168.10.71
8 push 镜像测试
# 打标签
docker tag nginx:latest harbor.mydomain.com/library/nginx:v1
# 上传
docker push harbor.mydomain.com/library/nginx:v1
# 下载
docker pull <镜像名>
9 k8s 拉取权限授权
9.1 Harbor UI 准备(必须)
9.1.1 创建一个专用用户用于 K8s 拉取镜像
Harbor UI → Users → New User
例如:
- 用户名:
harbor-secret - 密码:
Harbor12345 - 给该用户赋予项目
myharbor的 pull 权限。

9.1.2 创建项目,并允许上传镜像
Harbor UI → Projects → New Project → library → 设为 Public 或 Private(建议 private)。




9.2 测试 Docker/Containerd 登录(仅用于测试)
9.2.1 拷贝信任证书
1️⃣ 若是docker
# 每个节点创建目录
mkdir -p /etc/docker/certs.d/192.168.10.100
# 在harbor上执行,拷贝证书到每个节点上
scp /etc/docker/certs.d/192.168.10.100/ca.crt root@192.168.10.80:/etc/docker/certs.d/192.168.10.100
# 重启
systemctl restart docker && systemctl status docker
2️⃣ 若是 containerd
mkdir -p /etc/containerd/certs.d/192.168.10.100
scp /etc/docker/certs.d/192.168.10.100/ca.crt root@192.168.10.80:/etc/containerd/certs.d/192.168.10.100
# 修改 containerd 配置
vim /etc/containerd/config.toml
-----------------------------------------------------------------------------------------
[plugins."io.containerd.grpc.v1.cri".registry.configs] # 151行下添加
152 [plugins."io.containerd.grpc.v1.cri".registry.configs."192.168.10.100".tls]
153 ca_file = "/etc/containerd/certs.d/192.168.10.100/ca.crt"
154 insecure_skip_verify = false
# 重启
systemctl restart containerd && systemctl status containerd
9.2.2 登入测试
1️⃣ 若是docker
docker login -u harbor-secret -p Harbor12345 192.168.10.100
2️⃣ 若是 containerd
# 前提是安装了 nerdctl
nerdctl login -u harbor-secret -p Harbor12345 192.168.10.100
9.3 在 K8s 创建 imagePullSecret
所有 Namespace 需要各自创建 Secret,或使用 ImagePullSecret Admission Plugin 自动注入。
# 创建命名空间
kubectl create ns htj
kubectl create secret docker-registry harbor-secret \
--docker-server=192.168.10.100 \
--docker-username=harbor-secret \
--docker-password=Harbor12345 \
--docker-email=1194743653@qq.com \
-n htj
查看:
kubectl get secret harbor-secret -n htj
9.4 k8s 上创建一个服务账户 ServiceAccount
创建一个默认拉取 Secret:
# 这个default为该命名空间下默认账户的名称
kubectl patch serviceaccount default \
-p '{"imagePullSecrets": [{"name": "harbor-secret"}]}' \
-n htj # <命名空间>
注:每个命名空间单独创建,拉镜像时自动引用,不需要额外加 imagePullSecret: harbor-secret
总结
通过本次部署,我们成功搭建了一套完整的 Harbor 私有镜像仓库环境,并实现了以下目标:
-
生成自签名 CA 证书与服务器证书,保证 Harbor 支持 HTTPS 安全访问
-
完成 Harbor 的 prepare 与 install.sh 初始化与启动
-
配置 Docker 客户端信任 Harbor 证书,实现安全登录与镜像推拉
-
成功启动 Harbor 各组件(Core、Registry、JobService、Portal、DB 等)
-
Harbor Web UI 可正常访问,账号密码可登录
-
Docker 客户端可执行 docker login、docker push、docker pull 操作
至此,一个功能完整、安全可用的 Harbor 镜像仓库已搭建完成,可稳定服务企业内部的容器镜像管理需求。
更多推荐
所有评论(0)