一、搭建本地私有仓库
1.1 下载 registry
镜像
首先下载 registry
镜像:
docker pull registry
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
。
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
1.5 测试私有仓库的镜像下载
1.5.1 删除本地的 CentOS 镜像
docker rmi -f 8652b9f0cb4c
1.5.2 从私有仓库拉取镜像
docker pull 192.168.78.22:5000/centos:v1
二、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 的特性
- 基于角色控制:用户和仓库都是基于项目进行组织,用户在项目中可以拥有不同的权限。
- 基于镜像的复制策略:镜像可以在多个 Harbor 实例之间进行复制(同步)。
- 支持 LDAP/AD:Harbor 可以集成企业内部已有的 AD/LDAP,用于用户认证和管理。
- 镜像删除和垃圾回收:镜像可以被删除,也可以回收镜像占用的空间。
- 图形化用户界面:用户可以通过浏览器浏览、搜索镜像仓库并管理项目。
- 审计管理:所有针对镜像仓库的操作都可以被记录和追溯。
- 支持 RESTful API:提供 RESTful API 以便管理员更好地操控 Harbor,方便与其它管理软件集成。
- 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
- 下载或上传 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 服务
-
下载或上传 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/
-
修改
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
- 准备环境:
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
- 查看启动的容器:
docker-compose ps
2.5 配置 Harbor 项目
-
浏览器访问
http://192.168.78.22
,登录 Harbor UI 界面,默认的用户名/密码为admin/Harbor12345
。 -
创建一个新项目,例如
myproject-kgc
。 -
在命令行中使用 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
2.6 客户端配置及镜像上传
如果其他客户端登录 Harbor 并遇到 HTTP/HTTPS 交互错误,可以通过如下方法解决:
-
在 Docker 客户端配置文件中添加
--insecure-registry
参数,修改 Docker 启动服务:vim /usr/lib/systemd/system/docker.service
-
修改第 13 行:
ExecStart=/usr/bin/dockerd --insecure-registry 192.168.78.22
-
重启 Docker 服务并重新登录:
systemctl daemon-reload systemctl restart docker docker login -u admin -p 123456 http://192.168.78.22
-
测试上传镜像:
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
三、维护管理 Harbor
3.1 通过 Harbor Web 创建项目
在 Harbor 仓库中,任何镜像在被 push 到 registry 之前都必须有一个所属的项目。
- 单击 “+项目”,填写项目名称。
- 项目级别设置:
- 私有项目:默认不勾选,表示只有经过授权的用户才能访问。
- 公共项目:如果勾选为公共仓库,则所有人对此项目下的镜像拥有读权限,命令行中不需要执行
docker login
即可下载镜像,镜像操作与 Docker Hub 一致。
3.2 创建 Harbor 用户
3.2.1 创建用户并分配权限
- 在 Web 管理界面中,依次点击 系统管理 -> 用户管理 -> +用户。
- 填写以下信息:
- 用户名:xiewei
- 邮箱:[email protected]
- 全名:xiewei
- 密码:Xw123456
- 注释:管理员(可省略)
用户创建成功后,可以通过左侧的“…”按钮将该用户设置为管理员或删除用户。
3.2.2 添加项目成员
- 单击 项目 -> myproject-kgc -> 成员 -> +成员。
- 添加上述创建的用户
xiewei
,并将角色设置为“开发人员”。
用户角色可以通过左侧的“…”按钮进行变更或删除。
3.2.3 客户端上使用普通账户操作镜像
-
删除本地的打标签镜像:
docker rmi 192.168.78.22/myproject-kgc/cirros:v2
-
使用普通账户登录:
docker logout 192.168.78.22 docker login -u xiewei -p Xw123456 http://192.168.78.22
-
下载和上传镜像进行测试:
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
3.3 查看日志
在 Harbor Web 界面中,操作日志按时间顺序记录用户相关的操作。
3.4 修改 Harbor.cfg 配置文件
当需要修改 Harbor 的配置文件中的可选参数时,按照以下步骤操作:
-
停止现有的 Harbor 实例:
cd /usr/local/harbor docker-compose down -v
-
更新
harbor.cfg
文件中的可选参数:vim harbor.cfg
-
运行
prepare
脚本来填充配置:./prepare
-
重新创建并启动 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
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 服务容器的所有数据:
-
移除 Harbor 服务容器:
cd /usr/local/harbor docker-compose down -v
-
删除 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
- 删除 Harbor 的数据库和镜像数据:
rm -rf /data/database rm -rf /data/registry