目录

一、实验目的

二、实验环境

1. 硬件环境

2. 软件环境

三、实验原理

四、实验详细步骤

(一)Server 端前置环境准备

(二)Harbor 网页端初始化登录

(三)Server 端镜像推送(Push)操作

(四)Client 端镜像拉取(Pull)与容器运行测试

五、实验结果与截图说明

六、实验问题排查与总结

1. 实验常见问题及解决方案

2. 实验总结

七、实验心得体会


一、实验目的

  1. 掌握基于 Docker 环境部署 Harbor 私有容器镜像仓库的完整流程,理解私有镜像仓库在企业容器化项目中的作用。
  2. 熟练完成服务端(Server)Docker 登录、本地镜像打标签、镜像推送(docker push)至 Harbor 仓库的操作。
  3. 在客户端(Client)配置私有仓库信任、登录 Harbor、拉取镜像(docker pull)并运行容器,完成端到端的镜像分发测试。
  4. 掌握 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 可视化管理界面、用户权限管理、项目隔离、镜像复制、安全扫描等企业级功能。 工作流程:

  1. Server 节点部署 Harbor,搭建私有镜像仓库服务,通过 Nginx 反向代理提供 HTTPS/HTTP 网页访问与 Docker 镜像上传下载接口。
  2. 本地 Docker 镜像需要按照仓库IP/项目名/镜像名:标签格式重打标签,才能推送到私有 Harbor 仓库。
  3. Client 节点需要配置 Docker 信任私有仓库地址,登录 Harbor 后从远程仓库拉取镜像,本地启动容器完成业务验证。

四、实验详细步骤

(一)Server 端前置环境准备

  1. 关闭防火墙与安全策略

bash

运行

systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
  1. 配置 Docker 开机自启,确认 Docker、docker-compose 可正常执行

bash

运行

systemctl start docker
systemctl enable docker
docker --version
docker-compose --version
  1. 上传 Harbor 离线安装压缩包至服务器,解压到/usr/local/harbor目录,修改harbor.yml配置文件:
  • 修改hostname为当前服务器静态 IP
  • 设置 Harbor 网页管理员初始密码,关闭 https(本次实验采用 http 方式访问)
  • 配置数据存储、日志存储路径
  1. 执行部署脚本,一键启动 Harbor 服务

bash

运行

./prepare
docker-compose up -d

等待所有 Harbor 容器启动完成,执行docker-compose ps查看所有容器状态均为 Up 即为部署成功。

(二)Harbor 网页端初始化登录

  1. 浏览器访问地址:http://ServerIP,输入配置文件中设置的管理员账号admin与预设密码。
  2. 首次登录成功后,新建私有项目demo,访问级别设置为私有,仅授权账号可拉取、推送镜像,对应实验要求截图 1:Harbor 部署完成登录成功页面。

(三)Server 端镜像推送(Push)操作

  1. 配置 Docker 信任私有仓库,在/etc/docker/daemon.json添加非安全仓库配置,重启 Docker 服务:

json

{
  "insecure-registries": ["192.168.137.10"]
}

bash

运行

systemctl daemon-reload
systemctl restart docker
  1. 使用 Docker 命令行登录 Harbor 私有仓库

bash

运行

docker login 192.168.137.10

输入用户名admin、设置的登录密码,提示Login Succeeded代表登录成功。 3. 拉取 httpd 测试镜像作为本次实验推送镜像

bash

运行

docker pull httpd:latest
  1. 按照 Harbor 仓库规范为镜像重打标签,格式:仓库IP/项目名称/镜像名:版本

bash

运行

docker tag httpd:latest 192.168.137.10/demo/demohttpd:latest
  1. 执行镜像推送命令,将本地镜像上传至 Harbor 的 demo 项目仓库

bash

运行

docker push 192.168.137.10/demo/demohttpd:latest
  1. 刷新 Harbor 网页端demo项目的镜像仓库页面,可以看到刚刚推送成功的demohttpd镜像,截取该页面作为实验第二张提交截图。

(四)Client 端镜像拉取(Pull)与容器运行测试

  1. Client 端同样配置 Docker 信任私有仓库地址,修改daemon.json配置,重启 Docker 服务,保证可以正常访问 Server 的 Harbor 服务。
  2. Client 端执行 Docker 登录私有仓库:

bash

运行

docker login 192.168.137.10
  1. 从 Harbor 私有仓库拉取刚刚上传的 httpd 镜像

bash

运行

docker pull 192.168.137.10/demo/demohttpd:latest
  1. 后台运行 httpd 容器,映射 80 端口,验证镜像可用性

bash

运行

docker run -d -p 80:80 --name test-httpd 192.168.137.10/demo/demohttpd:latest
  1. 通过docker ps查看容器运行状态,浏览器访问 Client 本机 80 端口,验证 Apache 服务正常运行,截取终端容器运行成功界面作为第三张实验截图。

五、实验结果与截图说明

  1. 截图 1:Harbor 部署完毕登录成功页 浏览器访问私有仓库地址,输入管理员账号密码后成功进入 Harbor 系统管理首页,所有后台容器运行正常,证明 Harbor 服务部署成功,Web 管理端可正常访问。

  2. 截图 2:Server 端镜像推送后 demo 项目镜像仓库页 项目demo下已存在demohttpd镜像,镜像大小、推送时间、Artifact 数量正常,证明本地 Docker 镜像成功上传至私有 Harbor 仓库,镜像标签规范、推送流程无报错,私有仓库存储功能正常。

  3. 截图 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 公共仓库与私有仓库的使用差异:

  1. Harbor 可以实现企业内部镜像私有化管理,避免公网镜像拉取慢、镜像泄露、版本不可控等问题,支持项目权限隔离,适配团队多人协同开发场景。
  2. Docker 镜像推送必须遵循私有仓库命名规范,镜像标签是镜像能够精准上传至指定项目仓库的核心前提。
  3. 私有仓库使用的核心流程:服务端部署仓库→客户端配置仓库信任→Docker 登录认证→镜像打标签→push 上传→远端节点登录 pull 拉取→容器部署运行。

本次实验所有步骤均执行成功,三张要求截图完整采集,镜像上传、跨主机分发、容器运行全部验证通过,熟练掌握了容器私有仓库的运维实操能力,为后续 K8s 集群企业级容器项目落地打下了镜像仓库运维基础。

七、实验心得体会

在云计算与容器化运维的行业场景中,公共 Docker Hub 仓库存在访问限速、网络不稳定、敏感业务镜像无法公开上传等痛点,Harbor 作为主流私有化镜像仓库解决方案,是运维人员必须掌握的核心技术。本次实验从环境排错到流程落地,让我熟悉了 Docker 安全配置、私有仓库权限管理、镜像生命周期管理等运维知识点。实验过程中遇到的证书不信任、权限拒绝等报错,让我对 Docker 安全访问机制、Harbor 项目权限设计有了更深层次的理解,后续可以基于本次实验拓展 HTTPS 安全证书部署、Harbor 镜像定时同步、镜像漏洞安全扫描等高级运维场景,进一步提升容器运维综合能力。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐