Docker系列---Docker 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
负责收集其他组件的日志,以供然后进行分析
健康检查等

三、Docker Harbor 私有仓库架构拓扑

在这里插入图片描述

所有的请求或人为的操作都会首先交给 Proxy(反向代理)

Proxy 会先将请求转发给后端 Core services,Core services 中包含 UI、token(身份验证服务)、webhook(网站的一些服务功能)

转发给 Registry(镜像存储),若需要下载镜像等权限操作,需要通过 Core services 中的 token 令牌的身份验证服务才行

每一次下载和上传都会产生操作记录,生成到日志,保存至 Database 中

Database 记录保存镜像的元信息及用户与组的身份信息,通过验证授权才能允许相关操作

四、Harbor 构建 Docker 私有仓库实战

环境

主机操作系统主机名/IP软件
服务端CentOS 7harbor/192.168.78.11docker-ce、docker-compose、harbor-offline-installer
客户端CentOS 7client/192.168.78.22docker-ce

案例需求

通过 Harbor 创建 Docker 私有仓库
图形化管理 Docker 私有仓库镜像

部署步骤

①安装docker-ce docker-compose

服务端和客户端安装 docker-ce
服务端安装docker-compose

②启动 harbor 服务

1.下载harbor安装程序
 cd /usr/local/
 tar zxvf harbor-offline-installer-v1.2.2.tgz		'//在该目录下解压缩'
2.配置harbor参数文件

cd harbor/
vim harbor.cfg
#5
hostname = 192.168.78.11
'//hostname:用于访问用户界面和register服务,指向目标IP或域名,注,这里不要使用localhost或127.0.0.1!'

在这里插入图片描述

3.启动harbor
sh  +x /usr/local/harbor/install.sh 

在这里插入图片描述

在这里插入图片描述

③harbor.cfg 配置文件详解

harbor.cfg配置文件中有所需参数与可选参数这两类参数

1)所需参数,这些参数需要在配置文件harbor.cfg中设置
用户更新它们并运行install.sh脚本以启动harbour,参数将生效

具体参数如下
hostname:用于访问用户界面和register服务,指向目标机器的IP地址或域名;注,不要使用 localhost  127.0.0.1 为主机名!

ui_url_protocol:(http或https,默认为 http)用于访问 UI 和令牌/通知服务的协议,如果公证处于启用状态,则此参数必须为 https

max_job_workers:镜像复制作业线程

db_password:用于设置db_auth的MySQL数据库root用户的密码

customize_crt:该属性可设置为打开或关闭,默认打开;打开此属性时,准备脚本创建私钥和根证书,用于生成/验证注册表令牌;当由外部来源提供密钥和根证书时,将此属性设置为off

ssl_cert:SSL 证书的路径,仅当协议设置为https时才应用

ssl_cert_key:SSL密钥的路径,仅当协议设置为https时才应用

secretkey_path:用于在复制策略中加密或解密远程register密码的密钥路径

2)可选参数:这些参数对于更新是可选的,即用户可以将其保留为默认值,并在启动harbor后在Web UI上进行更新
如果进入harbor.cfg,只会在第一次启动harbor时生效,随后对这些参数的更新,Harbor.cfg将被忽略

注意:如果选择通过UI设置这些参数,请确保在启动harbour后立即执行此操作
具体来说,必须在注册或在harbor中创建任何新用户之前设置所需的

auth_mode,当系统中有用户时(除了默认的admin用户),auth_mode不能被修改。具体参数如下:

Email:harbor需要该参数才能向用户发送“密码重置”电子邮件,并且只有在需要该功能时才需要;请注意,在默认情况下SSL连接时没有启用;如果SMTP服务器需要SSL,但不支持STARTTLS,那么应该通过设置启用SSL email_ssl = TRUE

harbor_admin_password:管理员的初始密码,只在harbour第一次启动时生效;之后,此设置将被忽略,并且应在UI中设置管理员的密码;请注意,默认的用户名/密码是admin/Harbor12345

auth_mode:使用的认证类型,默认情况下,它是db_auth,即凭据存储在数据库中;对于LDAP身份验证,请将其设置为ldap_auth

self_registration:启用/禁用用户注册功能;禁用时,新用户只能由Admin用户创建,只有管理员用户可以在harbor中创建新用户;注意,当 auth_mode 设置为ldap_auth时,自注册功能将始终处于禁用状态,并且该标志被忽略

Token_expiration:由令牌服务创建的令牌的到期时间(分钟),默认为30分钟

project_creation_restriction:用于控制哪些用户有权创建项目的标志;默认情况下,每个人都可以创建一个项目;如果将其值设置为“adminonly”,那么只有admin可以创建项目

verify_remote_cert:打开或关闭,默认打开;此标志决定了当harbor与远程register实例通信时是否验证SSL/TLS证书;将此属性设置为off,将绕过SSL/TLS验证,这在远程实例具有自签名或不可信证书时经常使用

另外,默认情况下,harbour将镜像存储在本地文件系统上;在生产环境中,可以考虑使用其他存储后端而不是本地文件系统,如S3、Openstack Swif、Ceph等;但需要更新common/templates/registry/config.yml文件

④查看 harbor 启动镜像及容器

1.查看harbor启动镜像
 docker images 

2.查看启动容器
docker ps -a

在这里插入图片描述
在这里插入图片描述

⑤访问 harbor Web 页面→登录→项目→+项目(新建项目)

在这里插入图片描述
在这里插入图片描述

⑥harbor 服务端进行测试

默认情况下, Register服务器在端口 80 上侦听
netstat -natp| grep 80
此时可使用 Docker 命令在本地通过 127.0.0.1 来登录和推送镜像
docker login -u admin -p Harbor12345 http://127.0.0.1
docker pull cirros		'//cirros是测试起来很方便的镜像,小于15M'
docker tag cirros:latest 127.0.0.1/dark/cirros:v1		'//打标签,v1便于区别'
docker push 127.0.0.1/dark/cirros:v1 		'//上传至harbor'

注意 项目名称 和 重新打包镜像标签 要一致,有点类似目录要一致
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

⑦client 客户端测试

注:以上操作都是在harbor服务器本地操作,如果其他客户端想上传镜像到harbor,需要连接至harbor服务器! 因为,Docker Registry交互默认使用的是HTTPS,但是搭建私有镜像默认使用的是HTTP服务,所以与私有镜像交互时可能会出现错误


docker login  -u admin -p Harbor12345 http://192.168.78.11
docker pull cirros
docker images 
docker tag cirros:latest 192.168.78.11/dark/cirros:v2		'//打标签,v2,区别v1'
docker push 192.168.78.11/dark/cirros:v2 		'//上传'

在这里插入图片描述
【返回查看浏览器】
在这里插入图片描述

harbor 私有仓库的维护与管理

可以使用docker-compose来管理harbor
一些有用的命令如下所示,注意,必须在与docker-compose.yml相同的目录中运行!
--修改harbor.cfg配置文件--
要更改harbor的配置文件时,请按照以下不步骤:

1.请先停止现有的harbor实例再来更新harbor.cfg配置文件
 docker-compose down -v
 vim harbor.cfg 

2.运行prepare脚本来填充配置
./prepare

3.最后重新创建并启动harbor的实例
 docker-compose up -d
'//可能会启动不成功,检查防火墙是否关闭,然后重启docker再来试试'

Harbor 用户管理

在这里插入图片描述
在这里插入图片描述

①系统管理→用户管理→+用户→创建用户→设置为管理员
  
②项目→项目名称→成员→+成员→新建成员→开发人员
   
③在 client 客户端上测试
 docker images 
 docker rmi 192.168.78.11/dark/cirros:v2		'//删除本地镜像' 
docker logout 192.168.78.11	                	'//登出'

docker login 192.168.78.11 -u root -p Harbor12345

docker pull 192.168.78.11/dark/cirros:v2		'//从私有仓库重新下载v2'

docker images		                             '//查看'

docker tag cirros:latest 192.168.78.11/dark/cirros:v3		'//打标签'
docker push 192.168.78.11/dark/cirros:v3		 '//上传测试'

在这里插入图片描述

【返回查看浏览器,刷新一下】
在这里插入图片描述

迁移 harbor 数据

1.在harbor服务上先关闭服务
docker-compose down -v

2.拷贝habor数据
持久数据,如镜像,数据库等在宿主机的/data/目录下,日志在宿主机的/var/log/harbor/目录下
/data/database/:数据库内容,比如镜像的元信息及用户的身份信息
/data/registry/:镜像文件内容
有兴趣的朋友可以用"tree"命令去查看下


3.将数据拉取至目标服务器相应目录下重新部署即可


4.如需重新部署,则移除以上全部数据即可

故障提示1:

情景: docker login -u admin -p Harbor12345 http://192.168.78.11
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
Error response from daemon: Get https://192.168.78.11/v2/: dial tcp 192.168.78.11:443: connect: connection refused

解决方案
vim /usr/lib/systemd/system/docker.service
#13行修改
ExecStart=/usr/bin/dockerd -H fd:// --insecure-registry 192.168.78.11 --containerd=/run/containerd/containerd.sock
‘//增加这段内容,在开始执行的脚本或命令项中添加指向harbor服务器’
systemctl daemon-reload
systemctl reload docker

在这里插入图片描述

故障提示2:

情景:docker push 127.0.0.1/xxxxxxxx/cirros:v1
错误提示:denied: requested access to the resource is denied

解决方案:
项目名称不存在,我项目名称为dark,我使用的sicong_hello,并且,在打包镜像tag标签,就是为了迎合项目名称。所以 项目名称和打标签名称要一致
在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Docker Harbor是一个开源的企业级容器镜像仓库,它可以帮助用户管理和分发Docker镜像。通过搭建Docker Harbor仓库,用户可以自己创建和维护私有的镜像仓库,并使用https认证方式进行安全访问。 要搭建Docker Harbor仓库,首先需要下载和安装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是否安装成功: ``` docker-compose -v ``` 下载完Docker Compose后,需要维护和管理Harbor仓库。首先,需要下载registry镜像并创建本地私有仓库。可以使用以下命令下载registry镜像: ``` docker pull registry ``` 接着,在daemon.json文件中添加私有镜像仓库地址。可以使用以下命令编辑daemon.json文件: ``` vim /etc/docker/daemon.json ``` 并在文件中添加如下内容: ``` { "registry-mirrors": ["https://3c7tpzyf.mirror.aliyuncs.com"], "insecure-registries": ["192.168.122.10:5000"] } ``` 然后,重启Docker服务以使更改生效: ``` systemctl restart docker.service ``` 最后,使用以下命令运行registry容器来启动私有仓库: ``` docker run -itd -v /data/registry:/var/lib/registry -p 5000:5000 --restart=always --name registry registry:latest ``` 以上就是搭建Docker Harbor仓库的过程。通过这个仓库,您可以方便地管理和分发Docker镜像。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [docker-harbor2.4.2-https私有仓库-有验证和web](https://download.csdn.net/download/qq_34953582/87952076)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Docker私有仓库Harbor](https://blog.csdn.net/weixin_48861962/article/details/121726836)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值