网络服务器配置与管理教辅书 Help

9-7 Docker 私有仓库Harbor服务

( 网络服务器部署 第九章虚拟化拓展
虚拟化技术 第四章第四节、第五节
)

引题

私有docker镜像仓库的使用场景:

  • 国内无法正常访问docker官方镜像平台 hub.docker.com

  • 国内厂商提供的镜像源不稳定,成千上万的软件和不同tag,导致docker镜像源站无力实现完全同步。很多镜像、镜像版本并不存在,换源后仍然经常下拉失败。

  • 公司内部开发项目要求保密

  • 公司内部为了下拉常见镜像方便,为了持续部署测试方便,要求更快的上传镜像和下拉速度。

私有仓库产品对比:

  • Docker Registry: Docker Registry是Docker官方提供的基础镜像仓库软件,允许用户在本地网络中托管自己的Docker镜像。它是轻量级的,易于部署,并且支持Docker Registry API。不过,Docker Registry较为基础,缺少用户认证、权限管理等高级功能。

  • Harbor: Harbor是由VMware开发的一个开源的Docker镜像仓库,它在Docker Registry的基础上提供了额外的安全性和管理功能,如用户管理、访问控制、镜像复制、LDAP/AD集成、审计日志等。Harbor使得管理Docker镜像变得更加方便和安全,特别适合企业环境使用。安装Harbor通常借助Docker Compose进行,因为它是一个包含了多个微服务的应用。Harbor提供了图形化的用户界面,便于用户操作和管理镜像。

  • JFrog Artifactory: 二进制存储库管理器,支持Docker以及其他多种格式的软件包。Artifactory提供了高级特性,如高可用性部署、多站点复制、丰富的API和UI,以及与CI/CD工具的深度集成。它同样支持安全性和合规性需求,如访问控制、合规扫描等,适用于企业级应用。

  • 阿里云容器镜像服务(ACR):这是阿里云提供的一项服务,支持镜像的托管和管理,适合在阿里云环境中使用。

前置准备

CentOS虚拟机开机前

  • 虚拟机/设置/CPU 4~8核心,内存4~6Gb。(Harbor官方建议最小配置为2核心4Gb内存40Gb硬盘)。

  • 虚拟机/设置/CPU ☑️勾选开启intel-vtx虚拟化支持。这样Docker这类虚拟化软件才能正常工作。

  • (学校机房)宿主机关闭Virtualbox网卡。启用VMnet8网卡。使用桥接或NAT网络。

  • root用户登录

离线安装Docker Engine CE

  1. 老师下发安装包至学生机桌面,学生复制粘贴到虚拟机图形化管理器用户家目录下(即/root下),软件包含:

    • docker-install.tar.gz: Docker Engine CE离线安装包。

    • docker-compose: Docker容器编排可执行程序。

    • harbor-offline-installer.tgz: harbor离线安装包,内含后端、前端、数据库等多个子服务容器镜像,根据Harbor官方文档安装中提到的Harbor Github release 下载,这里选择的是最新稳定版v2.13.2。

    • nginx.tar: 从官方镜像站下载的nginx容器镜像,用来做harbor搭建成功后的上传镜像测试,可以用其他任意容器镜像代替。

      9 6 1

  2. 安装Docker Engine:

    # 解压缩和安装 tar -zxvf docker-installer.tar.gz rpm -iv --nodeps --force ./docker-installer/*.rpm docker -v # 启动进程 systemctl start docker systemctl status docker
    9 6 2 dockerengine

离线安装容器编排工具docker-compose

介绍:docker compose容器编排,当一个程序有前端、后端、数据库等多个子程序时,需要按一定顺序启动多个容器,并让子容器间互相通讯。在一些docker版本中,安装完即可使用`docker compose`命令。 在linux环境和一些较老旧docker版本中,以`docker-compose`可执行程序方式出现,不需要安装,放到环境变量路径如"/usr/bin" "/bin" "/usr/local/bin"中方便调用。

  1. 网上下载或老师下发的docker-compose已粘贴进虚拟机/root目录下

  2. 放到环境变量路径中以在任意目录下方便调用

    # [localhost ~]# cp docker-compose /usr/local/bin/docker-compose # 查看是否可用 docker-compose -v
    9 6 3 docker compose
  3. (不需输入)其它常用命令

    # 根据docker-compose.yml配置文件构建几个容器的镜像和编排 # docker-compose build . # 启动所有镜像。 # ⚠️如果你后面启动Harbor容器编排在修改docker配置daemon.json之前,那么systemctl restart docker,容器关闭后并不会自动启动。应刷新Harbor网页客户端端检查Harbor服务是否正常,不正常的再启动一次编排中的所有镜像。 # docker-compose up -d # 停止所有容器 # docker-compose down # 查看编排中的各个子容器 # docker-compose ps

阅读官网安装文档

安装文件复杂,了解大意,发现核心步骤为下载离线安装包,配置文件,运行安装脚本。https证书并不需要配置,域名可以用IP替换。
Harbor官方文档-安装

修改docker配置信任镜像平台地址

默认镜像平台为https://registy.docker.com,docker默认不允许访问http地址,新增配置使信任非加密私有镜像平台访问地址(⚠️替换为你的服务器IP地址)。

后续实验中Harbor服务将部署在本机,为了简化过程使用非加密http,harbor配置文件不让用127.0.0.1,本地为了简化不可能再搭建dns服务,加上修改docker配置重启后导致harbor服务终止。
因此,在安装Harbor之前进行docker配置文件修改,配置键insecure-registries信任http协议镜像平台地址,值为IP地址,端口号80。

  1. 修改配置文件daemon.json。

    touch /etc/docker/daemon.json nano /etc/docker/daemon.json

    写入配置内容。注意json的语法严格。缩进4空格,字符串双引号,大括号结尾不要有空格和新空行。
    ⚠️没有域名,配成IP地址,注意替换成你的服务器IP地址。

    { "insecure-registries": ["192.168.156.143:80"] }
  2. 重启docker进程

    systemctl restart docker
    9 6 9

离线安装Harbor服务

  1. 解压缩离线安装包,解压到/opt目录下,解压后的文件在/opt/harbor/目录下。

    tar -zxvf harbor-offline-installer-v2.13.2.tgz -C /opt/
  2. 切换工作目录至 /opt/harbor 方便后续操作。从配置文件模板复制出一份配置文件。

    # [localhost ~] cd /opt/harbor/ # ⚠️[locahost /opt/harbor] cp harbor.yml.tmpl harbor.yml
    9 6 4 harbor
  3. 修改配置。
    第1)处服务器IP(即你的CentOS虚拟机IP)。
    第2)处注释掉跟https相关的内容。

    # 绝对路径 /opt/harbor/harbor.yml # [locahost /opt/harbor] nano harbor.yml
    9 6 5harbor
  4. 运行安装脚本
    脚本大概原理是 解压/opt/harbor/harbor.v2.13.2.tar包,里面是服务相关容器的离线镜像,docker load导入镜像goharbor/prepare、postgres等前端、后端、数据库镜像。 docker-compose根据docker-compose.yml配置文件启动多个容器并让它们协同工作。可以打开docker-compose.yml观察内容。

    # [locahost /opt/harbor] ./install.sh

    9 6 6harbor
    安装成功后可见启动了9个容器😺,传统部署过程运维人员可能需要几天完成,而封装好的docker-compose.yml容器编排脚本只需一会儿,可见docker的强大之处。
    9 6 7harbor

  5. 关闭防火墙。确保Web管理界面可被访问。

    systemctl stop firewalld

Web客户端连接

Harbor后台Web管理入口测试。
Windows宿主机上的浏览器作为HarborWeb管理后台的客户端,访问虚拟机Centos服务器IP,非加密的http协议。

网址:形如http://192.168.156.143 (替换为你的服务器IP)。
用户名: admin (用户名密码已经在配置文件中定义)
密码: Harbor12345 (注意大写H)

(登录界面长的跟VMware ESXi一个风格,因为Harbor是VMware出的产品)

9 6 8

镜像上传下拉测试

  1. 测试镜像hello-world.tar已经下发至学生机桌面,粘贴到虚拟机桌面用户家目录。镜像属于官方仓库下registry.docker.com/dockeroffice/hello-world:latest。

  1. 离线加载镜像。测试镜像到了docker客户端本地。

    # 回到用户家目录 # [localhost /opt/harbor] cd ~/ # [localhost ~] docker load -i hello-world.tar # 检查是否导入成功 docker image list | grep hello-world
  2. 修改镜像名为包含平台地址,修改tag从latest修改为v1。让镜像关联到自建仓库平台地址,跟之前的区分开。

    # [localhost ~] # 注意替换IP和保持端口号 docker tag hello-world:latest 192.168.156.143:80/library/hello-world:v1 # 检查镜像列表,发现有两个hello-world相关的。另外两个两种标签,layerid一样说明文件是同一个文件。 docker image list | grep hello-world
    9 6 10 tag
  3. 命令行登录Harbor服务
    服务默认禁止匿名用户上传下拉操作,登录用户名和密码跟web客户端一致。
    用户名 admin
    密码Harbor12345
    未登录会导致后面推送镜像报unauthorized refused错误。

    # ⚠️替换ip为你的服务器地址。注意密码中的大写字母。 docker login 192.168.156.143:80
  4. push推送(上传)镜像

    # ⚠️替换ip为你的服务器地址。端口号不要少。 docker push 192.168.156.143:80/library/hello-world:v1

    看到推送layers进度,推送成功🎉🎉。

    9 6 11push

    刷新Web端页面看到镜像已上传🎉

    9 6 12push web

  5. pull下拉(下载)镜像
    先删除本来用作测试所有hello-world,再尝试从Harbor服务中下载刚才上传的。

    # 查看镜像列表,有三个跟nginx相关的,实际两个文件、三个标签。 docker image list | grep hello-world # 删除用作测试的nginx镜像,根据镜像id删除,也可以根据标签名删除。 docker image rm -f 192.168.156.143:80/library/hello-world:v1 # 下拉测试 docker pull 192.168.156.143:80/library/hello-world:v1 # 再次检查镜像列表 docker image list | grep hello-world

    看到下拉进度,docker image list命令看到镜像已经pull完成。刷新web客户端下载数加1🎉。

    9 6 13
    9 6 14

课外

熟悉Harbor平台,有审计、漏洞检测等其它模块。
根据Harbor官方文档-安装 配置自签发证书https访问。

15 二月 2026