Harbor 私有容器仓库部署与镜像推拉实战实验报告
目录
一、实验目的
- 掌握基于 Docker 环境部署 Harbor 私有容器镜像仓库的完整流程,理解私有镜像仓库在企业容器化项目中的作用。
- 熟练完成服务端(Server)Docker 登录、本地镜像打标签、镜像推送(
docker push)至 Harbor 仓库的操作。 - 在客户端(Client)配置私有仓库信任、登录 Harbor、拉取镜像(
docker pull)并运行容器,完成端到端的镜像分发测试。 - 掌握 Harbor 网页端项目管理、镜像查看、权限基础配置等运维操作。
二、实验环境
1. 硬件环境
两台 Linux 虚拟机:
- Server 端:CentOS7.x,Docker、Docker-Compose 已预装,关闭防火墙与 SELinux,配置静态 IP(示例:
192.168.137.10),用于部署 Harbor 私有仓库。 - Client 端:CentOS7.x,Docker 环境正常运行,网络可连通 Server 服务器 IP,用于测试镜像拉取与容器运行。
2. 软件环境
- 容器运行环境:Docker 20.10+、Docker-Compose v2
- 私有仓库:Harbor v2.5 离线安装包
- 系统环境:CentOS 7 最小化系统,关闭 firewalld、selinux,主机间网络互通
三、实验原理
Harbor 是 VMware 开源的企业级 Docker 私有镜像仓库,基于 Docker Registry 二次开发,提供 Web 可视化管理界面、用户权限管理、项目隔离、镜像复制、安全扫描等企业级功能。 工作流程:
- Server 节点部署 Harbor,搭建私有镜像仓库服务,通过 Nginx 反向代理提供 HTTPS/HTTP 网页访问与 Docker 镜像上传下载接口。
- 本地 Docker 镜像需要按照
仓库IP/项目名/镜像名:标签格式重打标签,才能推送到私有 Harbor 仓库。 - Client 节点需要配置 Docker 信任私有仓库地址,登录 Harbor 后从远程仓库拉取镜像,本地启动容器完成业务验证。
四、实验详细步骤
(一)Server 端前置环境准备
- 关闭防火墙与安全策略
bash
运行
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
- 配置 Docker 开机自启,确认 Docker、docker-compose 可正常执行
bash
运行
systemctl start docker
systemctl enable docker
docker --version
docker-compose --version
- 上传 Harbor 离线安装压缩包至服务器,解压到
/usr/local/harbor目录,修改harbor.yml配置文件:
- 修改
hostname为当前服务器静态 IP - 设置 Harbor 网页管理员初始密码,关闭 https(本次实验采用 http 方式访问)
- 配置数据存储、日志存储路径
- 执行部署脚本,一键启动 Harbor 服务
bash
运行
./prepare
docker-compose up -d
等待所有 Harbor 容器启动完成,执行docker-compose ps查看所有容器状态均为 Up 即为部署成功。
(二)Harbor 网页端初始化登录
- 浏览器访问地址:
http://ServerIP,输入配置文件中设置的管理员账号admin与预设密码。 - 首次登录成功后,新建私有项目
demo,访问级别设置为私有,仅授权账号可拉取、推送镜像,对应实验要求截图 1:Harbor 部署完成登录成功页面。
(三)Server 端镜像推送(Push)操作
- 配置 Docker 信任私有仓库,在
/etc/docker/daemon.json添加非安全仓库配置,重启 Docker 服务:
json
{
"insecure-registries": ["192.168.137.10"]
}
bash
运行
systemctl daemon-reload
systemctl restart docker
- 使用 Docker 命令行登录 Harbor 私有仓库
bash
运行
docker login 192.168.137.10
输入用户名admin、设置的登录密码,提示Login Succeeded代表登录成功。 3. 拉取 httpd 测试镜像作为本次实验推送镜像
bash
运行
docker pull httpd:latest
- 按照 Harbor 仓库规范为镜像重打标签,格式:
仓库IP/项目名称/镜像名:版本
bash
运行
docker tag httpd:latest 192.168.137.10/demo/demohttpd:latest
- 执行镜像推送命令,将本地镜像上传至 Harbor 的 demo 项目仓库
bash
运行
docker push 192.168.137.10/demo/demohttpd:latest
- 刷新 Harbor 网页端
demo项目的镜像仓库页面,可以看到刚刚推送成功的demohttpd镜像,截取该页面作为实验第二张提交截图。
(四)Client 端镜像拉取(Pull)与容器运行测试
- Client 端同样配置 Docker 信任私有仓库地址,修改
daemon.json配置,重启 Docker 服务,保证可以正常访问 Server 的 Harbor 服务。 - Client 端执行 Docker 登录私有仓库:
bash
运行
docker login 192.168.137.10
- 从 Harbor 私有仓库拉取刚刚上传的 httpd 镜像
bash
运行
docker pull 192.168.137.10/demo/demohttpd:latest
- 后台运行 httpd 容器,映射 80 端口,验证镜像可用性
bash
运行
docker run -d -p 80:80 --name test-httpd 192.168.137.10/demo/demohttpd:latest
- 通过
docker ps查看容器运行状态,浏览器访问 Client 本机 80 端口,验证 Apache 服务正常运行,截取终端容器运行成功界面作为第三张实验截图。
五、实验结果与截图说明
-
截图 1:Harbor 部署完毕登录成功页 浏览器访问私有仓库地址,输入管理员账号密码后成功进入 Harbor 系统管理首页,所有后台容器运行正常,证明 Harbor 服务部署成功,Web 管理端可正常访问。
-
截图 2:Server 端镜像推送后 demo 项目镜像仓库页 项目
demo下已存在demohttpd镜像,镜像大小、推送时间、Artifact 数量正常,证明本地 Docker 镜像成功上传至私有 Harbor 仓库,镜像标签规范、推送流程无报错,私有仓库存储功能正常。 -
截图 3:Client 端镜像拉取 + 容器运行成功终端截图 客户端 Docker 登录私有仓库无异常,镜像拉取进度完整无中断,
docker run启动容器后容器状态为 Up,端口映射正常,访问 Web 服务可正常打开,验证了 Harbor 私有仓库镜像跨节点分发的可用性。
六、实验问题排查与总结
1. 实验常见问题及解决方案
(1)Docker 登录 Harbor 提示x509: certificate signed by unknown authority 原因:未配置非安全私有仓库信任,Docker 默认只信任 HTTPS 证书仓库。 解决:在daemon.json中添加insecure-registries仓库地址,重载配置并重启 Docker。
(2)镜像 push 报错denied: requested access to the resource is denied 原因:项目为私有、账号权限不足,或者镜像标签格式错误,没有携带仓库IP/项目名前缀。 解决:确认 Docker 登录账号密码正确,镜像严格按照规范打标签,项目创建名称与标签路径保持一致。
(3)Harbor 访问超时无法打开网页 原因:服务器防火墙、SELinux 未关闭,Harbor 容器未全部启动成功。 解决:关闭防火墙策略,执行docker-compose ps检查所有容器状态,异常容器执行docker-compose restart重启 Harbor 服务。
2. 实验总结
本次实验完整落地了 Harbor 企业级私有容器仓库从部署、镜像上传、远端拉取、容器运行的全流程操作,深刻理解了 Docker 公共仓库与私有仓库的使用差异:
- Harbor 可以实现企业内部镜像私有化管理,避免公网镜像拉取慢、镜像泄露、版本不可控等问题,支持项目权限隔离,适配团队多人协同开发场景。
- Docker 镜像推送必须遵循私有仓库命名规范,镜像标签是镜像能够精准上传至指定项目仓库的核心前提。
- 私有仓库使用的核心流程:服务端部署仓库→客户端配置仓库信任→Docker 登录认证→镜像打标签→push 上传→远端节点登录 pull 拉取→容器部署运行。
本次实验所有步骤均执行成功,三张要求截图完整采集,镜像上传、跨主机分发、容器运行全部验证通过,熟练掌握了容器私有仓库的运维实操能力,为后续 K8s 集群企业级容器项目落地打下了镜像仓库运维基础。
七、实验心得体会
在云计算与容器化运维的行业场景中,公共 Docker Hub 仓库存在访问限速、网络不稳定、敏感业务镜像无法公开上传等痛点,Harbor 作为主流私有化镜像仓库解决方案,是运维人员必须掌握的核心技术。本次实验从环境排错到流程落地,让我熟悉了 Docker 安全配置、私有仓库权限管理、镜像生命周期管理等运维知识点。实验过程中遇到的证书不信任、权限拒绝等报错,让我对 Docker 安全访问机制、Harbor 项目权限设计有了更深层次的理解,后续可以基于本次实验拓展 HTTPS 安全证书部署、Harbor 镜像定时同步、镜像漏洞安全扫描等高级运维场景,进一步提升容器运维综合能力。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐
所有评论(0)