快速部署Docker镜像仓库Harbor
简介
Harbor(港口,港湾)是一个用于存储和分发 Docker 镜像的企业级 Registry 服务器。
除了 Harbor 这个私有镜像仓库之外,还有 Docker 官方提供的 Registry。相对 Registry,Harbor 具有很多优势:
提供分层传输机制,优化网络传输,Docker镜像是是分层的,如果每次传输都使用全量文件(所以用FTP的方式并不适合),显然不经济。必须提供识别分层传输的机制,以层的 UUID 为标识,确定传输的对象。
提供WEB界面,优化用户体验,只用镜像的名字来进行上传下载显然很不方便,需要有一个用户界面可以支持登录、搜索功能,包括区分公有、私有镜像。
支持水平扩展集群,当有用户对镜像的上传下载操作集中在某服务器,需要对相应的访问压力作分解。
良好的安全机制,企业中的开发团队有很多不同的职位,对于不同的职位人员,分配不同的权限,具有更好的安全性。
操作步骤
当前以Linux环境为例,先安装 Docker
下载
wget https://github.com/goharbor/harbor/releases/download/v2.9.2/harbor-offline-installer-v2.9.2.tgz
解压
tar -zxvf harbor-offline-installer-v2.9.2.tgz
修改配置
cd harbor/
vim harbor.yml.tmpl
修改完后将 harbor.yml.tmpl 保存为 harbor.yml
mv harbor.yml.tmpl harbor.yml
安装
./prepare
./install.sh
基本使用
访问地址:http://服务器ip:port
默认的账号密码:admin/Harbor12345
创建项目
创建用户
项目分配用户
角色权限说明
角色 | 权限说明 |
---|---|
项目管理员 | 拥有读写操作,同时拥有用户管理/镜像扫描等管理权限 |
维护人员 | 对于指定项目拥有读写权限,创建 Webhooks |
开发者 | 对于指定项目拥有读写权限 |
访客 | 对于指定项目拥有只读权限 |
受限访客 | 只可以拉取项目,其他项目资源文件如log没有读权限 |
推送镜像
因为 docker 的 registry 服务默认为 https 请求,因为我们是局域网内部使用,所以添加一下配置就可以了,注:每台需要访问私有镜像仓库的都要配置
vim /etc/docker/daemon.json
# 在里面添加如下代码,保存退出
"insecure-registries":["192.168.3.82:8081"]
# 如果里面空的没有配置,配置如下
{"insecure-registries":["192.168.3.82:8081"]}
# 然后重新启动docker
systemctl daemon-reload && systemctl restart docker
推送测试
# 拉取测试镜像
docker pull hello-world
# 为已存在镜像打标签,给一个标识对应镜像仓库所在位置,push时会上传到对应标识的服务上
docker tag hello-world 192.168.3.82:8081/lunar_link/hello-world:1.0.0
# 登录到harbor,格式:docker login -u 用户名 -p 密码 ip地址:端口
docker login -u tester -p 123456 192.168.3.82:8081
# 推送镜像
docker push 192.168.3.82:8081/lunar_link/hello-world:1.0.0
推送成功,到 Harbor 查询
拉取镜像
另外一台部署服务器,修改配置
vim /etc/docker/daemon.json
# 在里面添加如下代码,保存退出
"insecure-registries":["192.168.3.82:8081"]
# 如果里面空的没有配置,配置如下
{"insecure-registries":["192.168.3.82:8081"]}
# 然后重新启动docker
systemctl daemon-reload && systemctl restart docker
拉取镜像
docker pull 192.168.3.82:8081/lunar_link/hello-world:1.0.0