Docker Harbor | 私有仓库 |用户登录 |用户创建
- 一、Docker Harbor 概述
- 二、Harbor 的核心组件
- 四、Harbor 构建 Docker 私有仓库实战
- 4.1 搭建本地私有仓库
- 4.2 部署 Docker-Compose 服务
- 4.3 启动harbor验证
- 4.4 在其他客户端上传镜像
- 4.5 维护管理Harbor
一、Docker Harbor 概述
1.Harbor 简介
Docker Harbor 能够提供可视化的 Web 管理界面,可以方便管理 Docker 镜像,而且提供了多个项目的镜像权限管理及控制功能(包括统计信息,比如镜像被下载了多少次,什么时候上传得)
Harbor 是 VMware 公司开源的企业级 Docker Registry 项目
Registry:
1.Docker官方提供了Docker Hub来维护管理所有的镜像,只是对于免费用户而言,只能创建一个私有仓库,付费用户才能拥有更多私有仓库的权限
2.对此官方开源了Docker Registry的源代码,我们可以通过它在局域网内部搭建私有的镜像注册中心(私有仓库)
2.Harbor 的优势
基于角色控制:有管理员与普通用户,可赋权普通用户,比如只能上传和下载,可根据项目来进行操作和管理
基于镜像的复制策略:也与权限相关,比如有只一些用户与组才能对此项目进行相对应的操作
支持 LDAP/AD:域控制,比如南京去下载北京 harbor 私有仓库的镜像,两端打上局域网的地址,连接在一块,数据信息的传输通过一条隧道,会通过两层加密,第一层为隧道加密,第二层为数据加密,安全可靠
图像删除和垃圾收集:即回收站机制
图形 UI:具有统计功能,比如访问量与镜像下载热度
审计:日志,这里意义不大,主要还是借助于 ELK
RESTful API:定义 Web 语言规范的格式,方便调用 Harbor 的接口,也便于二次开发
二、Harbor 的核心组件
1.Proxy
通过一个前置的反向代理统一接收浏览器、Docker 客户端的请
求,并将请求转发给后端不同的服务
这是一个反向代理组件
2.Registry
负责储存 Docker 镜像
处理 docker push/pull 命令来上传和下载
3.Core services
1.Harbor 的核心功能,包括UI、webhook、 token 服务
2.webhook:网站的一些服务功能
3.token:令牌,提供身份验证服务
4.Database
为 core services 提供数据库服务
数据库记录镜像的元信息及用户的身份信息
5.Log collector
负责收集其他组件的日志,以供然后进行分析
健康检查等
所有的请求或人为的操作都会首先交给 Proxy(反向代理)
Proxy 会先将请求转发给后端 Core services,Core services 中包含 UI、token(身份验证服务)、webhook(网站的一些服务功能)
转发给 Registry(镜像存储),若需要下载镜像等权限操作,需要通过 Core services 中的 token 令牌的身份验证服务才行
每一次下载和上传都会产生操作记录,生成到日志,保存至 Database 中
Database 记录保存镜像的元信息及用户与组的身份信息,通过验证授权才能允许相关操作
四、Harbor 构建 Docker 私有仓库实战
4.1 搭建本地私有仓库
首先下载 registry 镜像
docker pull registry
#在 daemon.json 文件中添加私有镜像仓库地址
vim /etc/docker/daemon.json
{
"insecure-registries": ["192.168.10.50:5000"], #添加,注意用逗号结尾
"registry-mirrors": ["https://ae3f5qei.mirror.aliyuncs.com"]
}
systemctl restart docker.service
#运行 registry 容器
docker run -itd -v /data/registry:/var/lib/registry -p 5000:5000 --restart=always --name registry registry:latest
#查看创建的仓库
docker ps -a
-itd:在容器中打开一个伪终端进行交互操作,并在后台运行
-v:把宿主机的/data/registry目录绑定到容器/var/lib/registry目录(这个目录是registry容器中存放镜像文件的目录),来实现数据的持久化;
-p:映射端口;访问宿主机的5000端口就访问到registry容器的服务了
--restart=always:这是重启的策略,在容器退出时总是重启容器
--name registry:创建容器命名为registry
registry:latest:这个是刚才pull下来的镜像
Docker容器的重启策略如下:
no:默认策略,在容器退出时不重启容器
on-failure:在容器非正常退出时(退出状态非0),才会重启容器
on-failure:3 :在容器非正常退出时重启容器,最多重启3次
always:在容器退出时总是重启容器
unless-stopped:在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器
#为镜像打标签
docker tag centos:7 192.168.10.50:5000/centos:v1
#上传到私有仓库
docker push 192.168.10.50:5000/centos:v1
#列出私有仓库的所有镜像
curl http://192.168.10.50:5000/v2/_catalog
#出私有仓库的 centos 镜像有哪些tag
curl http://192.168.10.50:5000/v2/centos/tags/list
#先删除原有的 centos 的镜像,再测试私有仓库下载
docker rmi 192.168.10.50:5000/centos:v1
docker pull 192.168.10.50:5000/centos:v1
4.2 部署 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. 部署 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安装的配置文件
关于 Harbor.cfg 配置文件中有两类参数:所需参数和可选参数
1、所需参数:这些参数需要在配置文件 Harbor.cfg 中设置。如果用户更新它们并运行 install.sh 脚本重新安装 Harbor, 参数将生效。
2、可选参数:这些参数对于更新是可选的,即用户可以将其保留为默认值,并在启动 Harbor 后在 Web UI 上进行更新。如果进入 Harbor.cfg,只会在第一次启动 Harbor 时生效,随后对这些参数的更新,Harbor.cfg 将被忽略。
vim /usr/local/harbor/harbor.cfg
--5行--修改,设置为Harbor服务器的IP地址或者域名
hostname = 192.168.10.50
--59行--指定管理员的初始密码,默认的用户名/密码是admin/Harbor12345
harbor_admin_password = Harbor12345
4.3 启动harbor验证
启动 Harbor
cd /usr/local/harbor/
在配置好了 harbor.cfg 之后,执行 ./prepare 命令,为 harbor 启动的容器生成一些必要的文件(环境)
再执行命令 ./install.sh 以 pull 镜像并启动容器
4. 查看 Harbor 启动镜像
cd /usr/local/harbor/
docker-compose ps
5. 创建一个新项目
(1)浏览器访问:http://192.168.10.50 登录 Harbor WEB UI 界面,默认的管理员用户名和密码是 admin/Harbor12345
(2)输入用户名和密码登录界面后可以创建一个新项目。点击“+项目”按钮
(3)填写项目名称为“myproject-kgc”,点击“确定”按钮,创建新项目
(4)此时可使用 Docker 命令在本地通过 127.0.0.1 来登录和推送镜像。默认情况下,Registry 服务器在端口 80 上侦听。
//登录 Harbor
docker login -u admin -p Harbor12345 http://127.0.0.1
将镜像打标签
格式:docker tag 镜像:标签 仓库IP/项目名称/镜像名:标签
docker tag nginx:latest 127.0.0.1/myproject-kgc/nginx:v1
//上传镜像到 Harbor
docker push 127.0.0.1/myproject-kgc/nginx:v1
在 Harbor 界面 myproject-kgc 目录下可看见此镜像及相关信息
4.4 在其他客户端上传镜像
以上操作都是在 Harbor 服务器本地操作。如果其他客户端登录到 Harbor,就会报如下错误。出现这问题的原因为Docker Registry 交互默认使用的是 HTTPS,但是搭建私有镜像默认使用的是 HTTP 服务,所以与私有镜像交互时出现以下错误。
docker login -u admin -p Harbor12345 http://192.168.10.50
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
Error response from daemon: Get https://192.168.10.50/v2/: dial tcp 192.168.10.50:443: connect: connection refused
(1)在 Docker 客户端配置操作
//解决办法是:在 Docker server 启动的时候,增加启动参数,默认使用 HTTP 访问。
vim /usr/lib/systemd/system/docker.service
--13行--修改
ExecStart=/usr/bin/dockerd -H fd:// --insecure-registry 192.168.10.50 --containerd=/run/containerd/containerd.sock
或
ExecStart=/usr/bin/dockerd --insecure-registry 192.168.10.50
//重启 Docker,再次登录
systemctl daemon-reload
systemctl restart docker
//再次登录 Harbor
docker login -u admin -p Harbor12345 http://192.168.10.50
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Login Succeeded
//将自动保存凭据到/root/.docker/config.json,下次登录时可直接使用凭据登录 Harbor
//下载镜像进行测试
docker pull 192.168.10.50/myproject-kgc/nginx:v1
//上传镜像进行测试
docker pull cirros
docker tag cirros:latest 192.168.10.50/myproject-kgc/cirros:v2
docker push 192.168.10.50/myproject-kgc/cirros:v2
(2)刷新 ![请添加图片描述](https://img-blog.csdnimg.cn/7009298ab42040b3a6f0d9a34c03171e.png)
Harbor 的 Web 管理界面进行查看,会发现 myproject-kgc 项目里面有两个镜像
4.5 维护管理Harbor
1. 通过 Harbor Web 创建项目
在 Harbor 仓库中,任何镜像在被 push 到 regsitry 之前都必须有一个自己所属的项目。
单击“+项目”,填写项目名称,项目级别若设置为"私有",则不勾选。如果设置为公共仓库,则所有人对此项目下的镜像拥有读权限,命令行中不需要执行"Docker login"即可下载镜像,镜像操作与 Docker Hub 一致。
2. 创建 Harbor 用户
(1)创建用户并分配权限
在 Web 管理界面中单击系统管理 -> 用户管理 -> +用户,
填写用户名为“boa”,邮箱为“704397225@qq.comm”,全名为“boa”,密码为“Abc12345”,注释为“管理员”(可省略)。
附:用户创建成功后,单击左侧“...”按钮可将上述创建的用户设置为管理员角色或进行删除操作,本例不作任何设置。
(2)添加项目成员
单击项目 -> myproject-kgc-> 成员 -> + 成员,填写上述创建的用户 boa 并分配角色为“开发人员”。
附:此时单击左侧“...”按钮仍然可对成员角色进行变更或者删除操作
(3)在客户端上使用普通账户操作镜像
//删除上述打标签的本地镜像
docker rmi 192.168.10.50/myproject-kgc/cirros:v2
//先退出当前用户,然后使用上述创建的账户boa 登录
docker logout 192.168.10.50
docker login 192.168.10.50
或
docker login -u boa -p Abc123456 http://192.168.10.50
//下载和上传镜像进行测试
docker pull 192.168.10.50/myproject-kgc/cirros:v2
docker tag cirros:latest 192.168.10.50/myproject-kgc/cirros:v3
docker push 192.168.10.50/myproject-kgc/cirros:v3
3. 查看日志
Web 界面日志,操作日志按时间顺序记录用户相关操作
4. 修改 Harbor.cfg 配置文件
要更改 Harbor的配置文件中的可选参数时,请先停止现有的 Harbor实例并更新 Harbor.cfg;然后运行 prepare 脚本来填充配置; 最后重新创建并启动 Harbor 的实例。
使用 docker-compose 管理 Harbor 时,必须在与 docker-compose.yml 相同的目录中运行。
cd /usr/local/harbor
docker-compose down -v