Bootstrap

Docker--harbor私有仓库部署与管理

一、搭建本地私有仓库

1.1 下载 registry 镜像

首先下载 registry 镜像:

docker pull registry

image-20241017100217754

1.2 配置 daemon.json

1.2.1 编辑 daemon.json 文件

daemon.json 文件中添加私有镜像仓库地址:

vim /etc/docker/daemon.json

文件内容如下:

{
  "insecure-registries": ["192.168.78.22:5000"],  # 添加,注意用逗号结尾
  "registry-mirrors": ["https://ae3f5qei.mirror.aliyuncs.com"]
}

1.2.2 重启 Docker 服务

systemctl restart docker.service

1.3 运行 registry 容器

1.3.1 运行容器命令

运行 registry 容器:

docker run -itd -v /data/registry:/var/lib/registry -p 5000:5000 --restart=always --name registry registry:latest

1.3.2 参数解释

  • -itd:打开伪终端进行交互操作,并在后台运行。
  • -v:将宿主机的 /data/registry 目录挂载到容器的 /var/lib/registry,实现数据持久化。
  • -p:映射宿主机的 5000 端口。
  • --restart=always:指定重启策略,容器退出时总是重启。
  • --name registry:命名容器为 registry

image-20241017100400730

1.4 为镜像打标签并上传到私有仓库

1.4.1 镜像打标签

docker tag centos:7 192.168.78.22:5000/centos:v1

1.4.2 上传镜像到私有仓库

docker push 192.168.78.22:5000/centos:v1

1.4.3 查看私有仓库中的镜像

1.4.3.1 列出所有镜像
curl http://192.168.78.22:5000/v2/_catalog
1.4.3.2 查看镜像的标签
curl http://192.168.78.22:5000/v2/centos/tags/list

image-20241017101334506

1.5 测试私有仓库的镜像下载

1.5.1 删除本地的 CentOS 镜像

docker rmi -f 8652b9f0cb4c

1.5.2 从私有仓库拉取镜像

docker pull 192.168.78.22:5000/centos:v1

image-20241017101533136

二、Harbor 简介

2.1 什么是 Harbor

Harbor 是 VMware 公司开源的企业级 Docker Registry 项目,其目标是帮助用户迅速搭建一个企业级的 Docker Registry 服务。

Harbor 以 Docker 公司开源的 Registry 为基础,提供了图形管理 UI、基于角色的访问控制(Role Based Access Control)、AD/LDAP 集成、审计日志等企业级功能,同时还原生支持中文。

Harbor 的每个组件都是以 Docker 容器的形式构建的,使用 Docker Compose 来进行部署。用于部署 Harbor 的 Docker Compose 模板位于 harbor/docker-compose.yml

2.2 Harbor 的特性

  1. 基于角色控制:用户和仓库都是基于项目进行组织,用户在项目中可以拥有不同的权限。
  2. 基于镜像的复制策略:镜像可以在多个 Harbor 实例之间进行复制(同步)。
  3. 支持 LDAP/AD:Harbor 可以集成企业内部已有的 AD/LDAP,用于用户认证和管理。
  4. 镜像删除和垃圾回收:镜像可以被删除,也可以回收镜像占用的空间。
  5. 图形化用户界面:用户可以通过浏览器浏览、搜索镜像仓库并管理项目。
  6. 审计管理:所有针对镜像仓库的操作都可以被记录和追溯。
  7. 支持 RESTful API:提供 RESTful API 以便管理员更好地操控 Harbor,方便与其它管理软件集成。
  8. Harbor 和 Docker Registry 的关系:Harbor 是对 Docker Registry 的封装,扩展了其业务模板。

2.3 Harbor 的构成

Harbor 主要由以下六个组件构成:

  • Proxy:这是一个 nginx 的前端代理,Harbor 的 Registry、UI、Token 服务等组件都在其后端。该代理将来自浏览器、Docker 客户端的请求转发到后端的不同服务上。
  • Registry:负责储存 Docker 镜像,并处理 Docker push/pull 命令。用户每次 Docker 操作都需要携带合法的 Token,Registry 会对其进行验证。
  • Core services:提供 Harbor 的核心功能,主要包括图形化界面、Webhook 和 Token 服务。
  • Database(harbor-db):为 Core services 提供数据库服务,负责存储用户权限、审计日志和镜像分组信息等。
  • Job services:主要用于镜像的复制,本地镜像可以同步到远程 Harbor 实例。
  • Log collector(harbor-log):负责收集其他组件的日志。

每个组件都以 Docker 容器的形式构建,Harbor 总共运行 7 个容器,可以通过 docker-compose ps 查看它们的运行状态。

2.4 部署 Harbor

2.4.1 部署 Docker Compose

  1. 下载或上传 Docker Compose:
    curl -L https://github.com/docker/compose/releases/download/1.21.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
    chmod +x /usr/local/bin/docker-compose
    docker-compose --version
    

2.4.2 部署 Harbor 服务

  1. 下载或上传 Harbor 安装程序:

    wget http://harbor.orientsoft.cn/harbor-1.2.2/harbor-offline-installer-v1.2.2.tgz
    tar zxvf harbor-offline-installer-v1.2.2.tgz -C /usr/local/
    
  2. 修改 harbor.yml 配置文件:

    cp /usr/local/harbor/harbor.yml.tmpl /usr/local/harbor/harbor.yml
    vim /usr/local/harbor/harbor.yml
    
    • 修改 hostname 为 Harbor 服务器的 IP 地址(192.168.78.22)。
    • 修改管理员的初始密码,默认用户名/密码为 admin/Harbor12345

2.4.3 启动 Harbor

  1. 准备环境:
    cd /usr/local/harbor/
    tar -xzf harbor.v2.11.1.tar.gz
    ./prepare    #要翻墙(有直接镜像docker load -i harbor.v2.11.1.tar.gz)
    
   
2. 启动 Harbor 容器:
   ```bash
   ./install.sh
  1. 查看启动的容器:
    docker-compose ps
    

image-20241017113431272

image-20241017113411258

2.5 配置 Harbor 项目

  1. 浏览器访问 http://192.168.78.22,登录 Harbor UI 界面,默认的用户名/密码为 admin/Harbor12345

  2. 创建一个新项目,例如 myproject-kgc

    image-20241017113731533

  3. 在命令行中使用 Docker 登录并推送镜像:

    docker login -u admin -p 123456 http://127.0.0.1
    docker pull nginx
    docker tag nginx:latest 127.0.0.1/myproject-kgc/nginx:v1
    docker push 127.0.0.1/myproject-kgc/nginx:v1
    

image-20241017113807438

2.6 客户端配置及镜像上传

如果其他客户端登录 Harbor 并遇到 HTTP/HTTPS 交互错误,可以通过如下方法解决:

  1. 在 Docker 客户端配置文件中添加 --insecure-registry 参数,修改 Docker 启动服务:

    vim /usr/lib/systemd/system/docker.service
    
  2. 修改第 13 行:

    ExecStart=/usr/bin/dockerd --insecure-registry 192.168.78.22
    
  3. 重启 Docker 服务并重新登录:

    systemctl daemon-reload
    systemctl restart docker
    docker login -u admin -p 123456 http://192.168.78.22
    
  4. 测试上传镜像:

    docker pull cirros
    docker tag cirros:latest 192.168.78.22/myproject-kgc/cirros:v2
    docker push 192.168.78.22/myproject-kgc/cirros:v2
    

image-20241017120027875

三、维护管理 Harbor

3.1 通过 Harbor Web 创建项目

在 Harbor 仓库中,任何镜像在被 push 到 registry 之前都必须有一个所属的项目。

  1. 单击 “+项目”,填写项目名称。
  2. 项目级别设置:
    • 私有项目:默认不勾选,表示只有经过授权的用户才能访问。
    • 公共项目:如果勾选为公共仓库,则所有人对此项目下的镜像拥有读权限,命令行中不需要执行 docker login 即可下载镜像,镜像操作与 Docker Hub 一致。

3.2 创建 Harbor 用户

3.2.1 创建用户并分配权限

  1. 在 Web 管理界面中,依次点击 系统管理 -> 用户管理 -> +用户
  2. 填写以下信息:
    • 用户名:xiewei
    • 邮箱:[email protected]
    • 全名:xiewei
    • 密码:Xw123456
    • 注释:管理员(可省略)

用户创建成功后,可以通过左侧的“…”按钮将该用户设置为管理员或删除用户。

image-20241017120152654

3.2.2 添加项目成员

  1. 单击 项目 -> myproject-kgc -> 成员 -> +成员
  2. 添加上述创建的用户 xiewei,并将角色设置为“开发人员”。

用户角色可以通过左侧的“…”按钮进行变更或删除。

3.2.3 客户端上使用普通账户操作镜像

  1. 删除本地的打标签镜像:

    docker rmi 192.168.78.22/myproject-kgc/cirros:v2
    
  2. 使用普通账户登录:

    docker logout 192.168.78.22
    docker login -u xiewei -p Xw123456 http://192.168.78.22
    
  3. 下载和上传镜像进行测试:

    docker pull 192.168.78.22/myproject-kgc/cirros:v2
    docker tag cirros:latest 192.168.78.22/myproject-kgc/cirros:v3
    docker push 192.168.78.22/myproject-kgc/cirros:v3
    

image-20241017120416915

3.3 查看日志

在 Harbor Web 界面中,操作日志按时间顺序记录用户相关的操作。

image-20241017120500834

3.4 修改 Harbor.cfg 配置文件

当需要修改 Harbor 的配置文件中的可选参数时,按照以下步骤操作:

  1. 停止现有的 Harbor 实例:

    cd /usr/local/harbor
    docker-compose down -v
    
  2. 更新 harbor.cfg 文件中的可选参数:

    vim harbor.cfg
    
  3. 运行 prepare 脚本来填充配置:

    ./prepare
    
  4. 重新创建并启动 Harbor 实例:

    docker-compose up -d
    

如果遇到以下报错:

ERROR: Failed to Setup IP tables: Unable to enable SKIP DNAT rule...

需要开启防火墙服务:

systemctl restart firewalld.service
docker-compose up -d

image-20241017120615278

3.5 移除 Harbor 服务容器并保留数据

3.5.1 移除 Harbor 服务容器

在 Harbor 服务器上操作:

cd /usr/local/harbor
docker-compose down -v

3.5.2 打包项目镜像数据

持久数据,如镜像和数据库等,存储在宿主机的 /data/ 目录下。执行以下命令打包镜像数据:

cd /data/registry/docker/registry/v2/repositories/myproject-kgc
tar zcvf kgc-registry.tar.gz ./*

3.6 重新部署 Harbor 并移除全部数据

如需重新部署 Harbor,可以按照以下步骤移除 Harbor 服务容器的所有数据:

  1. 移除 Harbor 服务容器:

    cd /usr/local/harbor
    docker-compose down -v
    
  2. 删除 Harbor 的数据库和镜像数据:

    rm -rf /data/database
    rm -rf /data/registry
    

data/registry/docker/registry/v2/repositories/myproject-kgc
tar zcvf kgc-registry.tar.gz ./*


## 3.6 重新部署 Harbor 并移除全部数据

如需重新部署 Harbor,可以按照以下步骤移除 Harbor 服务容器的所有数据:

1. 移除 Harbor 服务容器:
   ```bash
   cd /usr/local/harbor
   docker-compose down -v
  1. 删除 Harbor 的数据库和镜像数据:
    rm -rf /data/database
    rm -rf /data/registry
    

image-20241017120904539

;