Docker与Harbor:构建企业级私有Docker镜像仓库

news2024/11/20 20:42:38

目录

引言

一、本地私有仓库

(一)基本概述

(二)搭建本地私有仓库

1.下载registry镜像

2.启动容器

3.上传本地镜像

4.客户端下载镜像

二、Harbor简介

(一)什么是 Harbor

(二)核心特性

(三)Harbor组成部分

(四)Harbor私有仓库数据流向

三、部署 Harbor服务

(一)安装服务

1.Harbor安装服务

2.修改配置文件

3.启动服务

4.查看Harbor启动的镜像

5.登录Harbor

6.创建新项目

7. 在其他客户端上传镜像

四、维护管理Harbor

(一)通过 Harbor Web 创建项目

1.创建公共仓库

2.客户端下载镜像

(二)创建Harbor用户

1.创建用户

2.添加项目成员

3.登录用户操作

(三)查看日志

(四)修改Harbor.cfg配置文件 

(五)迁移

1.移除 Harbor 服务容器

2.备份迁移

(六)重新部署


引言

随着容器化技术的普及,Docker已成为现代软件开发不可或缺的一部分。然而,当团队规模扩大,对镜像的安全管理、版本控制以及高效分发的需求日益凸显,公共Docker Hub可能无法满足企业级的安全与性能要求。这时,部署一个私有Docker镜像仓库变得至关重要。Harbor,作为由VMware开源的企业级Docker Registry管理平台,以其全面的安全特性、用户管理、以及镜像复制等功能,成为构建私有仓库的理想选择

一、本地私有仓库

(一)基本概述

搭建Docker本地私有仓库是一个实用的过程,通过将本地镜像进行上传,可以帮助组织或个人更高效、安全地管理Docker镜像,避免频繁从远程仓库拉取镜像带来的网络延迟和流量消耗,同时也便于内部镜像的共享和版本控制

(二)搭建本地私有仓库

1.下载registry镜像

[root@hy ~]#docker pull registry
Using default tag: latest
......

在daemon.jspn文件中添加私有镜像地址

2.启动容器

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

docker run: 这个命令用于启动一个新的容器。

-itd: 参数组合,分别代表:

i:以交互模式运行容器,即使没有附加也保持STDIN打开。
t:为容器分配一个伪TTY,通常与i一起使用,提供一个更友好的终端交互体验。
d:以后台模式运行容器(守护进程模式)。

-v /data/registry:/var/lib/registry
这是一个volume映射,表示将主机上的/data/registry目录挂载到容器内的/var/lib/registry目录
这样做可以持久化存储从外部推送来的Docker镜像,即使容器重启或重建,镜像数据也不会丢失。

-p 5000:5000
端口映射,将主机的5000端口映射到容器的5000端口

--restart=always
设置容器的重启策略为总是重启。
当Docker守护进程启动或容器因某种原因退出时,Docker会自动重启这个容器,确保私有Registry服务始终可用。

--name registry
为运行的容器指定一个名字,这里是registry。命名容器便于后续管理和操作。

registry:latest
指定要启动的镜像名称及标签。这里使用的是官方的registry镜像的最新版本(latest标签)

3.上传本地镜像

[root@hy ~]#docker tag centos:7 192.168.83.100:5000/centos:server1
#给本地镜像设置标签
[root@hy ~]#docker push 192.168.83.100:5000/centos:server1
#上传镜像到私有仓库
The push refers to repository [192.168.83.100:5000/centos]
174f56854903: Pushed 
server1: digest: sha256:dead07b4d8ed7e29e98de0f4504d87e8880d4347859d839686a31da35a3b532f size: 529
[root@hy ~]#curl http://192.168.83.100:5000/v2/_catalog
{"repositories":["centos"]}
#列出私有仓库的所有镜像

4.客户端下载镜像

修改/etc/docker/daemon.json文件,添加下载地址

[root@test ~]#vim  /etc/docker/daemon.json 
[root@test ~]#cat  /etc/docker/daemon.json 
{
  "insecure-registries" : ["192.168.83.100:5000"],    
#添加镜像文件下载地址。注意,结尾
  "registry-mirrors": ["https://gix2yhc1.mirror.aliyuncs.com"]
}
[root@test ~]#systemctl daemon-reload 
[root@test ~]#systemctl restart docker.service
#重启docker服务
[root@test ~]#docker pull 192.168.83.100:5000/centos:server1
#下载本期镜像服务器提供的镜像
server1: Pulling from centos
2d473b07cdd5: Pull complete 
Digest: sha256:dead07b4d8ed7e29e98de0f4504d87e8880d4347859d839686a31da35a3b532f
Status: Downloaded newer image for 192.168.83.100:5000/centos:server1
192.168.83.100:5000/centos:server1
[root@test ~]#docker images
REPOSITORY                   TAG       IMAGE ID       CREATED       SIZE
192.168.83.100:5000/centos   server1   eeb6ee3f44bd   2 years ago   204MB

二、Harbor简介

(一)什么是 Harbor

Harbor 是一个全面的容器镜像管理解决方案,它不仅提供了 Docker 官方 Registry 的所有功能,还额外集成了安全性、身份认证、权限管理以及镜像复制等功能,专为企业的私有部署而设计。自2014年开源以来,Harbor 已成为众多企业和组织构建其容器化平台的首选镜像仓库。

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

(二)核心特性

基于角色的访问控制 (RBAC): Harbor 允许管理员精细地控制用户对镜像仓库的访问权限。用户和仓库按项目组织,每个用户在项目内可以被赋予不同的角色,如管理员、开发者或访客,确保只有授权用户能访问特定资源。

镜像复制策略: Harbor 支持在多个实例间复制镜像,这使得跨数据中心或地理区域的镜像分发变得简单高效,有助于实现负载均衡和容灾备份。

安全特性: 包括镜像漏洞扫描,通过集成第三方工具自动检测镜像中的已知安全漏洞;镜像签名功能,确保镜像的完整性和来源可信。

LDAP/AD集成: 无缝对接企业现有的轻量目录访问协议(LDAP)或活动目录(AD),简化用户认证与权限管理流程,便于在大型企业环境中实施统一的身份认证。

LDAP(轻量级目录访问协议)和AD(Active Directory)集成是企业IT环境中常见的身份验证和授权策略,用于集中管理用户访问各种服务和系统的权限。当涉及到像Harbor这样的容器镜像仓库时,集成LDAP或AD能够让组织利用现有的用户目录服务,实现统一的身份认证和权限控制

审计日志: 记录详细的用户操作日志,包括镜像上传、下载、删除等,有助于合规性和问题排查。

可扩展性与自定义: Harbor 设计上支持模块化,可以根据需要扩展存储、认证和日志等组件,以适应不同规模和复杂度的部署场景。

用户友好的界面: 提供直观的Web UI,使用户无需深入了解底层技术就能执行日常的镜像管理任务,同时也支持命令行工具,满足自动化和脚本化需求。

镜像策略管理: 用户可以根据标签、命名规则等条件设定镜像的保留策略,自动清理过时或不再需要的镜像,节省存储空间。

(三)Harbor组成部分

1.Proxy (Nginx)

Harbor 使用 Nginx 作为前端代理服务器,负责接收所有客户端请求(包括浏览器和Docker客户端的请求),并将它们路由到后端的不同服务,比如UI、Registry等。它还处理SSL/TLS加密,确保通信安全。

2.Registry

这是存储Docker镜像的核心服务。Registry 负责处理镜像的上传(push)和下载(pull)请求。为了实施访问控制,Registry与token服务协同工作,要求每次镜像操作都必须携带有效的token进行权限验证。

认证方式有以下三种:

令牌认证: 这是最主要的方式,用户在与Registry交互前需获取一个临时的Token,这个Token包含访问权限信息,并在请求中携带以完成认证。

基本认证: 这种方式通常涉及用户名和密码,用户凭据会被Base64编码后随HTTP请求头部发送。虽然直接使用用户名密码不太安全,但在某些场景或旧版本的Registry中,可能会用到这种方式。不过,现代做法更倾向于使用Token机制来增加安全性。

SSL/TLS客户端证书认证: SSL/TLS不仅用于加密通信,还可以与客户端证书一起实现用户认证。客户端证书是一种数字证书,证明了客户端(如Docker引擎)的身份。这种方式下,Registry会要求客户端在建立连接时出示证书,从而验证客户端的身份。

3.Core services

Harbor的核心功能,主要提供以下3个服务:

UI (用户界面): 提供了一个图形化的管理界面,允许用户轻松地浏览、上传、下载和管理存储在Registry中的Docker镜像。同时,UI还支持用户权限管理、项目管理和镜像复制任务的配置

WebHook:为了及时获取Registry上image 状态变化的情况,在Registry 上配置 Webhook,把状态变化传递给 UI 模块。

Token 服务:负责根据用户权限给每个 Docker push/pull 命令签发 Token。Docker 客户端向 Registry 服务发起的请求, 如果不包含 Token,会被重定向到 Token 服务,获得 Token 后再重新向 Registry 进行请求

4.Database

存储用户权限信息、审计日志、Docker镜像分组信息等元数据。Harbor使用MySQL或其他兼容数据库来持久化这些信息。

5.JobService

负责镜像复制工作,支持在多个Registry节点间复制镜像。它从一个Registry拉取镜像,然后推送到另一个Registry,并记录操作日志,支持镜像的分发和备份策略。

6.Log Collector

负责收集Harbor各组件的日志信息,通常通过Docker的log-driver机制,将日志汇聚并记录到syslog或其他日志存储系统,便于日志管理和分析,提高系统监控与故障排查的效率。

7.AdminServer

系统的配置管理中心,负责管理Harbor的全局配置,包括存储用量检查、以及为UI和jobService提供配置信息。它是Harbor运行时的配置和管理后台。

这些组件共同协作,为用户提供了一个全方位的容器镜像管理解决方案,涵盖了安全、访问控制、镜像复制、日志记录等多个层面,满足企业对于私有容器镜像仓库的高级需求

Harbor 的每个组件都是以 Docker 容器的形式构建的,因此,使用 Docker Compose 来对它进行部署。
总共分为7个容器运行,通过在docker-compose.yml所在目录中执行 docker-compose ps 命令来查看, 名称分别为:nginx、harbor-jobservice、harbor-ui、harbor-db、harbor-adminserver、registry、harbor-log。

  1. nginx:作为反向代理,处理所有进入Harbor的HTTP(S)请求,负责路由到各个服务,并且处理SSL证书。

  2. harbor-jobservice:负责执行一些后台任务,比如镜像的复制、垃圾回收等。

  3. harbor-ui:提供Web界面,用户可以通过UI与Harbor交互,进行镜像的浏览、搜索、上传、下载等操作。

  4. harbor-db:存储Harbor的元数据,如用户、项目、标签信息等。通常使用PostgreSQL或MySQL数据库。

  5. harbor-adminserver:这是一个关键组件,它作为配置管理和API服务,harbor-ui与之交互来获取或更新配置信息。它管理着系统的配置数据,比如用户权限、项目设置等。

  6. registry:实际存储Docker镜像的组件,基于开源的Docker Registry项目,增加了额外的功能如镜像复制、访问控制等。

  7. harbor-log:集中日志收集和管理服务,方便系统管理员查看和分析各个组件的日志

(四)Harbor私有仓库数据流向

1.客户端请求

开始于客户端(开发者工作站、CI/CD管道等)发起对私有仓库的请求,比如拉取或推送镜像。

2.反向代理(Proxy)

所有请求首先到达反向代理层,它作为入口点,负责接收所有外部请求,并根据请求类型和内容将其转发给内部的相应服务。这层可以实现负载均衡、SSL终止等功能,增强安全性与性能。

3.核心服务(Core Services)

反向代理将请求转发给核心服务层,这一层包含多个子服务:

Webhook服务: 用于外部服务的通知机制,当仓库中的事件发生时(如镜像推送成功),自动触发预先设定的动作(如通知CI/CD系统)。

Token服务: 负责用户身份验证,生成和验证访问令牌,确保只有经过验证的用户可以执行敏感操作,如拉取或推送镜像。

UI: 提供Web界面,用户可以通过浏览器管理仓库、用户权限等。

4.镜像存储(Registry)

经过身份验证后,对于镜像的读写请求被转发给Registry服务。Registry负责实际存储和检索Docker镜像的二进制数据,是仓库的核心组件。

5.权限验证与操作

在用户尝试下载或上传镜像时,Registry与Token服务协同工作,确保操作符合用户的权限。例如,上传镜像前,需要通过Token服务验证用户的写权限。

6.日志与审计

每个操作(如下载、上传、删除镜像)都会生成操作日志,这些日志会被收集并存储到数据库中。日志不仅用于追踪和审计目的,也帮助监控系统状态和用户行为。

7.数据库(Database)

存储镜像的元数据(如镜像标签、大小、上传时间)、用户账户信息、角色、权限组配置等。数据库是整个系统权限管理和审计记录的基础。

三、部署 Harbor服务

服务类型IP地址主机名安装服务
Harbor服务器192.168.83.30harbordocker-ce、docker-compose、harbor-offline-v1.2.2
client服务器192.168.83.40dockerdocker-ce

(一)安装服务

1.Harbor安装服务

1.1 安装docker服务

[root@harbor ~]#yum install -y yum-utils device-mapper-persistent-data lvm2
#安装依赖包
[root@harbor ~]#yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#获取阿里云镜像源
[root@harbor ~]#yum install -y docker-ce-20.10.18 docker-ce-cli-20.10.18 containerd.io
#安装Docker-CE(社区版)20.10.18版本
[root@harbor ~]#systemctl enable --now docker.service
#设置开机自启并立即启动docker服务
[root@harbor ~]#cat /etc/docker/daemon.json 
{
  "registry-mirrors": ["https://gix2yhc1.mirror.aliyuncs.com"]
}

1.2 安装docker-compose

[root@harbor opt]#ls
containerd  docker-compose-1.25.0  rh
#准备执行文件
[root@harbor opt]#chmod +x docker-compose-1.25.0
#添加执行权限
[root@harbor opt]#ls
containerd  docker-compose-1.25.0  rh
[root@harbor opt]#mv docker-compose-1.25.0 /usr/bin/docker-compose
#移动到/usr/bin/并改名为docker-compose
[root@harbor opt]#docker-compose --version
docker-compose version 1.25.0-rc4, build 8f3c9c58
#查看版本信息

1.3 安装harbor-offline

[root@harbor opt]# wget http://harbor.orientsoft.cn/harbor-1.2.2/harbor-offline-installer-v1.2.2.tgz
#下载数据包,或者在官方网站下载完毕之后,上传到服务器当中
[root@harbor opt]# ls
harbor-offline-installer-v1.2.2.tgz
[root@harbor opt]# tar zxvf harbor-offline-installer-v1.2.2.tgz -C /usr/local/

2.修改配置文件

common
#包含通用配置或脚本的目录。

docker-compose.yml
#Docker Compose的主要配置文件,用于定义和配置多容器Docker应用,用于部署Harbor项目的核心服务

harbor.v1.2.2.tar.gz
#一个压缩包文件,根据命名推测,这应该是Harbor版本1.2.2的发行包,Harbor是一个开源的Docker镜像仓库。

NOTICE
#包含关于软件许可、版权或重要注意事项的文本文件。

docker-compose.clair.yml 和 docker-compose.notary.yml
#这两个文件可能是额外的Docker Compose配置文件,
#专门用于配置Harbor中与 Clair(漏洞扫描服务)和 Notary(内容信任服务)相关的服务

harbor.cfg
#Harbor的配置文件,用户可以根据自己的需求修改此文件中的配置项,如数据库、存储后端、HTTPS设置等

install.sh
#一个Shell脚本,用于自动部署和配置Harbor。通过运行这个脚本,可以快速安装和启动Harbor服务

LICENSE
#包含Harbor软件的许可信息。

prepare
#用于执行安装前的准备工作,比如检查系统依赖、创建必要的目录结构等。

upgrade
#包含升级Harbor的相关脚本或文档,用于指导用户如何从现有版本安全地升级到新版本

修改harbor.cfg文件

hostname = 192.168.83.30:Harbor服务的主机名或IP地址。
ui_url_protocol = http:Harbor Web UI 使用的协议,默认为HTTP,出于安全性考虑,生产环境建议使用HTTPS。
db_password = root123:Harbor内部数据库的密码。
max_job_workers = 3:Harbor处理镜像复制和其他后台任务的工作线程数。
customize_crt = on:指示是否使用自定义证书,默认关闭,如果开启,则需提供SSL证书和密钥。
ssl_cert = /data/cert/server.crt:HTTPS服务的证书文件路径。
ssl_cert_key = /data/cert/server.key:HTTPS服务的私钥文件路径。
secretkey_path = /data:用于加密敏感数据的秘密密钥存储路径。
admiral_url = NA:集成Admiral的服务URL,如果未使用Admiral,则留空。
clair_db_password = password: Clair(漏洞扫描服务)数据库的密码。
email_identity:发件人邮箱的身份标识,可选。
email_server = smtp.mydomain.com:SMTP服务器地址,用于发送邮件通知。
email_server_port = 25:SMTP服务器端口。
email_username = sample_admin@mydomain.com:用于发送邮件的用户名。
email_password = abc:SMTP服务器的认证密码。
email_from = admin sample_admin@mydomain.com:邮件发件人显示名称及邮箱地址。
email_ssl = false:是否使用SSL加密连接发送邮件,默认关闭。
harbor_admin_password = Harbor12345:Harbor管理员账户的初始密码。
auth_mode = db_auth:认证模式,这里设置为数据库认证,Harbor也支持LDAP等其他认证方式。
ldap_url = ldaps://ldap.mydomain.com:LDAP服务器的URL,用于LDAP认证。
ldap_basedn = ou=people,dc=mydomain,dc=com:LDAP的基DN,用于定位用户和组信息。
ldap_uid = uid:用于匹配用户的LDAP属性。
ldap_scope = 3:LDAP搜索范围,3代表搜索子树。
ldap_timeout = 5:LDAP查询超时时间(秒)。
self_registration = on:是否允许用户自我注册,默认开启。
token_expiration = 30:访问令牌的过期时间(天)。
project_creation_restriction = everyone:项目创建权限,everyone表示所有用户都可创建项目。
verify_remote_cert = on:是否验证远程HTTPS证书,默认开启,确保通信安全。

另外,默认情况下,Harbor 将镜像存储在本地文件系统上。在生产环境中,可以考虑 使用其他存储后端而不是本地文件系统,如 S3、Openstack Swif、Ceph 等对象存储。但需要更新 common/templates/registry/config.yml 文件。
Harbor的默认镜像存储路径在 /data/registry 目录下,映射到docker容器里面的 /storage 目录下。
这个参数是在 docker-compose.yml 中指定的,在 docker-compose up -d 运行之前修改。
如果希望将 Docker 镜像存储到其他的磁盘路径,可以修改这个参数

3.启动服务

在配置好了 harbor.cfg 之后,执行 ./prepare 命令,为 harbor 启动的容器生成一些必要的文件(环境),再执行命令 ./install.sh 以 pull 镜像并启动容器

[root@harbor harbor]#./prepare
......
[root@harbor harbor]#./install.sh
......

4.查看Harbor启动的镜像

harbor-adminserver
#这是Harbor的管理服务器,负责处理系统级别的管理任务,如用户管理、权限控制等。
#状态为Up,表明它正在运行。

harbor-db
#Harbor使用的数据库服务,用于存储用户信息、镜像元数据等。
#运行状态为Up,监听3306端口,表明数据库服务已启动并可以接受连接。

harbor-jobservice
#Harbor的作业服务,负责处理镜像复制、垃圾回收等后台任务
#状态Up意味着作业服务已经启动。

harbor-log
#日志收集服务,通常用于收集其他Harbor组件的日志并通过syslog协议转发
#监听本地的514端口,并且状态为Up。

harbor-ui
#Harbor的Web用户界面,用户通过这个界面与Harbor交互,比如推送、拉取镜像等。
#服务状态为Up,说明用户界面已经就绪。

nginx
#作为反向代理服务器,处理Harbor的HTTP和HTTPS请求,确保外部访问的安全性。
#它同时监听了80和443端口(HTTP和HTTPS的标准端口),以及可能的其他HTTPS相关端口(4443)
#所有状态均为Up,表明Nginx配置正确并正在运行。

registry
#Docker Registry服务,用于实际存储镜像层的组件。
#状态为Up,监听5000端口,意味着镜像仓库服务已经启动并可以接收镜像的推送和拉取请求。

5.登录Harbor

6.创建新项目

6.1 浏览器访问本机IP地址,登录 Harbor WEB UI 界面,默认的管理员用户名和密码是 admin/Harbor12345

6.2 输入用户名和密码登录界面后可以创建一个新项目。点击“+项目”按钮

6.3 填写自定义项目名称,点击“确定”按钮,创建新项目

6.4 使用 Docker 命令在本地通过 127.0.0.1 来登录和推送镜像。默认情况下,Registry 服务器在端口 80 上侦听。

6.4.1 使用命令登录 Harbor
docker login -u admin -p Harbor12345 http://127.0.0.1

[root@harbor harbor]#docker login -u admin -p Harbor12345 http://127.0.0.1
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

下载或使用dockerfile生成镜像,而后进行上传测试

6.4.2 下载镜像

[root@harbor harbor]#docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
a2abf6c4d29d: Pull complete 
a9edb18cadd1: Pull complete 
589b7251471a: Pull complete 
186b1aaa4aa6: Pull complete 
b4df32aa5a72: Pull complete 
a0bcbecc962e: Pull complete 
Digest: sha256:0d17b565c37bcbd895e9d92315a05c1c3c9a29f762b011a10c54a66cd53c9b31
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest

6.4.3 将镜像打标签

格式:docker tag 镜像:标签  仓库IP/项目名称/镜像名:标签

docker tag nginx:latest 127.0.0.1/myharbor-01/nginx:harbor

[root@harbor harbor]#docker tag nginx:latest 127.0.0.1/myharbor-01/nginx:harbor
[root@harbor harbor]#docker images
REPOSITORY                    TAG               IMAGE ID       CREATED       SIZE
127.0.0.1/myharbor-01/nginx   harbor            605c77e624dd   2 years ago   141MB
nginx                         latest            605c77e624dd   2 years ago   141MB

6.4.4 上传镜像到 Harbor

docker push 127.0.0.1/myharbor-01/nginx:harbor

[root@harbor harbor]#docker push 127.0.0.1/myharbor-01/nginx:harbor
The push refers to repository [127.0.0.1/myharbor-01/nginx]
d874fd2bc83b: Pushed 
32ce5f6a5106: Pushed 
f1db227348d0: Pushed 
b8d6e692a25e: Pushed 
e379e8aedd4d: Pushed 
2edcec3590a4: Pushed 
harbor: digest: sha256:ee89b00528ff4f02f2405e4ee221743ebc3f8e8dd0bfd5c4c20a2fa2aaa7ede3 size: 1570
[root@harbor harbor]#

6.5 在 Harbor 界面myharbor-01目录下可看见此镜像及相关信息

7. 在其他客户端上传镜像

当使用客户端机器登录harbor时,harbor服务器会拒绝连接请求,这是因为Harbor未配置HTTPS。Harbor UI使用的协议是HTTP。如果Harbor实际配置中并未启用HTTPS,而Docker客户端默认尝试通过HTTPS访问,就会出现连接拒绝的问题。

[root@docker ~]#docker login -u admin -p Harbor12345 http://192.168.83.30
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
Error response from daemon: Get "https://192.168.83.30/v2/": dial tcp 192.168.83.30:443: connect: connection refused
#第一段为警告信息,输入的密码为明文密码,容易造成外泄
#第二段为错误信息,目标服务器拒绝连接请求

7.1 解决方法

以下两种方法,均在客户端进行操作

7.1.1 在 Docker server 启动的时候,增加启动参数,默认使用 HTTP 访问

[root@docker ~]# vim /usr/lib/systemd/system/docker.service
 13 ExecStart=/usr/bin/dockerd -H fd:// --insecure-registry 192.168.83.30 --containerd=/run/contain    erd/containerd.sock
或
ExecStart=/usr/bin/dockerd --insecure-registry 192.168.83.30

7.1.2 修改daemon.json文件

[root@docker ~]#vim  /etc/docker/daemon.json 
[root@docker ~]#cat  /etc/docker/daemon.json 
{
  "insecure-registries" : ["192.168.83.30"], 
#添加insecure-registries字段信息,绕过harbor服务器的安全检查
  "registry-mirrors": ["https://gix2yhc1.mirror.aliyuncs.com"]
}

insecure-registries可以翻译为“不安全的注册表”,是Docker守护进程的一个配置项。
当需要Docker与那些未使用HTTPS加密协议的私有镜像仓库进行通讯时,就需要把这个仓库
地址添加到insecure-registries列表中。
这样一来,尽管这些仓库没有采用安全的HTTPS连接,Docker也能绕过默认的安全检查,
继续与其进行不安全的数据传输

注释:以上两种解决办法取其一种进行操作

[root@docker ~]#systemctl daemon-reload 
[root@docker ~]#systemctl restart docker.service
#加载后重启服务

再次进行登录尝试

[root@docker ~]#docker login -u admin -p Harbor12345 http://192.168.83.30
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

登录之后,会在~/.docker/目录下生成config.json文件,这是一个登录凭据,下次登录时可直接使用凭据登录Harbor

[root@docker ~]#cat  ~/.docker/config.json 
{
	"auths": {
		"192.168.83.30": {
			"auth": "YWRtaW46SGFyYm9yMTIzNDU="
		}
	}
}

7.2 客户端测试

7.2.1 下载harbor仓库中的镜像

[root@docker ~]#docker images
REPOSITORY   TAG       IMAGE ID   CREATED   SIZE
[root@docker ~]#docker pull 192.168.83.30/myharbor-01/nginx:harbor
harbor: Pulling from myharbor-01/nginx
a2abf6c4d29d: Pull complete 
a9edb18cadd1: Pull complete 
589b7251471a: Pull complete 
186b1aaa4aa6: Pull complete 
b4df32aa5a72: Pull complete 
a0bcbecc962e: Pull complete 
Digest: sha256:ee89b00528ff4f02f2405e4ee221743ebc3f8e8dd0bfd5c4c20a2fa2aaa7ede3
Status: Downloaded newer image for 192.168.83.30/myharbor-01/nginx:harbor
192.168.83.30/myharbor-01/nginx:harbor
[root@docker ~]#docker images
REPOSITORY                        TAG       IMAGE ID       CREATED       SIZE
192.168.83.30/myharbor-01/nginx   harbor    605c77e624dd   2 years ago   141MB

7.2.2 上传镜像到harbor仓库

[root@docker ~]#docker pull httpd
#下载镜像
[root@docker ~]#docker tag httpd:latest 192.168.83.30/myharbor-01/httpd:harbor
#给镜像打上标签
[root@docker ~]#docker push 192.168.83.30/myharbor-01/httpd:harbor
#上传镜像到harbor仓库

在harbor仓库的web界面查看镜像信息

四、维护管理Harbor

(一)通过 Harbor Web 创建项目

在 Harbor 仓库中,任何镜像在被 push 到 regsitry 之前都必须有一个自己所属的项目。
单击“+项目”,填写项目名称,项目级别若设置为"私有",则不勾选。如果设置为公共仓库,则所有人对此项目下的镜像拥有读权限,命令行中不需要执行"Docker login"即可下载镜像,镜像操作与 Docker Hub 一致。

1.创建公共仓库

创建公共仓库并上传镜像文件

[root@harbor ~]#docker tag nginx:latest 127.0.0.1/myharbor-02/nginx:harbor02
[root@harbor ~]#docker push 127.0.0.1/myharbor-02/nginx:harbor02
#上传镜像到公有仓库(项目)
The push refers to repository [127.0.0.1/myharbor-02/nginx]
d874fd2bc83b: Mounted from myharbor-01/nginx 
32ce5f6a5106: Mounted from myharbor-01/nginx 
f1db227348d0: Mounted from myharbor-01/nginx 
b8d6e692a25e: Mounted from myharbor-01/nginx 
e379e8aedd4d: Mounted from myharbor-01/nginx 
2edcec3590a4: Mounted from myharbor-01/nginx 
harbor02: digest: sha256:ee89b00528ff4f02f2405e4ee221743ebc3f8e8dd0bfd5c4c20a2fa2aaa7ede3 size: 1570

2.客户端下载镜像

[root@docker ~]#docker pull 192.168.83.30/myharbor-02/nginx:harbor02
harbor02: Pulling from myharbor-02/nginx
Digest: sha256:ee89b00528ff4f02f2405e4ee221743ebc3f8e8dd0bfd5c4c20a2fa2aaa7ede3
Status: Downloaded newer image for 192.168.83.30/myharbor-02/nginx:harbor02
192.168.83.30/myharbor-02/nginx:harbor02
[root@docker ~]#docker images
REPOSITORY                        TAG        IMAGE ID       CREATED       SIZE
192.168.83.30/myharbor-01/nginx   harbor     605c77e624dd   2 years ago   141MB
192.168.83.30/myharbor-02/nginx   harbor02   605c77e624dd   2 years ago   141MB

(二)创建Harbor用户

1.创建用户

在 Web 管理界面中单击系统管理 -> 用户管理 -> +用户

创建完用户后,可对用户进行设置

2.添加项目成员

在 Web 管理界面中单击项目-->选择需要操作的项目-->选择成员-->点击+成员

3.登录用户操作

[root@harbor ~]#docker logout 127.0.0.1
#退出admin用户
[root@harbor ~]#docker login -u pla -p Abc123456 http://127.0.0.1
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded
#登录新创建的用户

​​​​​​​

项目管理员权限:项目管理员拥有对项目内的镜像最为全面的控制权。这包括上传(push)、下载(pull)、删除(delete)镜像以及查看(view)镜像的权限。此外,项目管理员还可以管理项目内的成员,包括添加或删除用户以及分配用户角色,以及修改项目的设置。

开发人员权限:开发人员可以查看项目内的镜像列表,上传新的镜像版本,以及从项目中下载镜像到本地。这意味着他们有读(read)、写(write,即上传)和查看(pull,即下载)的权限,但通常不具备删除镜像的能力,除非该权限被特别授予。

访客权限:访客的权限较为有限,主要被限制在只读权限上。他们可以查看(view)项目中的镜像列表和标签,以及拉取(pull)镜像,但不允许上传(push)新的镜像到项目中或删除已有镜像。这意味着访客角色适合那些只需要访问和使用镜像,而不参与镜像管理和上传的用户。

(三)查看日志

可以查看harbor仓库的总体日志

也可以查看单独一个项目的日志信息

(四)修改Harbor.cfg配置文件 

在 Harbor 服务器上操作

要更改 Harbor的配置文件中的可选参数时,请先停止现有的 Harbor实例并更新 Harbor.cfg;然后运行 prepare 脚本来填充配置; 最后重新创建并启动 Harbor 的实例。

使用 docker-compose 管理 Harbor 时,必须在与 docker-compose.yml 相同的目录中运行

[root@harbor harbor]# cd /usr/local/harbor
[root@harbor harbor]# docker-compose down -v
Stopping harbor-jobservice  ... done
Stopping nginx              ... done
Stopping harbor-ui          ... done
Stopping harbor-db          ... done
Stopping harbor-adminserver ... done
Stopping registry           ... done
Stopping harbor-log         ... done
Removing harbor-jobservice  ... done
Removing nginx              ... done
Removing harbor-ui          ... done
Removing harbor-db          ... done
Removing harbor-adminserver ... done
Removing registry           ... done
Removing harbor-log         ... done
Removing network harbor_harbor
[root@harbor harbor]# vim harbor.cfg   # 只能修改可选参数
[root@harbor harbor]# ./prepare
[root@harbor harbor]# docker-compose up -d
Creating network "harbor_harbor" with the default driver
Creating harbor-log ... done
Creating registry           ... done
Creating harbor-db          ... done
Creating harbor-adminserver ... done
Creating harbor-ui          ... done
Creating harbor-jobservice  ... done
Creating nginx              ... done
 
如果有以下报错,需要开启防火墙 firewalld 服务解决:
Creating network "harbor_harbor" with the default driver
ERROR: Failed to Setup IP tables: Unable to enable SKIP DNAT rule:  (iptables failed: iptables --wait -t nat -I DOCKER -i br-b53c314f45e8 -j RETURN: iptables: No chain/target/match by that name.
 (exit status 1))
 
systemctl restart firewalld.service
docker-compose up -d

(五)迁移

 移除 Harbor 服务容器同时保留镜像数据/数据库,并进行迁移

在 Harbor 服务器上操作

1.移除 Harbor 服务容器

首先,安全地停止Harbor服务,避免在迁移过程中产生数据不一致

[root@harbor harbor]# cd /usr/local/harbor
[root@harbor harbor]# docker-compose down -v

2.备份迁移

[root@harbor harbor]#ls  /data/registry/docker/registry/v2/repositories/
myharbor-01  myharbor-02
#所有的项目文件,默认存储在此目录下
[root@harbor harbor]#cd  /data/registry/docker/registry/v2/repositories/
[root@harbor repositories]#tar  zcf registry.tar.gz ./*
[root@harbor repositories]#ls
myharbor-01  myharbor-02  registry.tar.gz
#进行打包压缩,而后移动到其它服务器上

注释:在迁移之前,可以先进行备份

(六)重新部署

 如需重新部署,需要移除 Harbor 服务容器全部数据

[root@harbor repositories]#cd /usr/local/harbor
[root@harbor harbor]#docker-compose down -v
Removing network harbor_harbor
WARNING: Network harbor_harbor not found.
 [root@harbor harbor]#rm -rf /data/database
[root@harbor harbor]#rm -rf /data/registry

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1654927.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

IT外包能在企业上云时提供什么帮助?

在云计算不断发展的背景下,企业对IT部门的要求日益提高,越来越多的企业开始考虑将IT系统迁移到云上。因此,IT外包也成为企业成功上云的重要支持之一。IT外包在企业上云时具体能提供什么帮助?本文将对此进行详细阐述。 业务重心转移…

必应bing国内广告如何开户,怎么收费?

搜索引擎广告作为直接触达潜在客户的有效途径之一,日益受到企业的重视,必应Bing作为全球第二大搜索引擎,在中国市场同样拥有庞大的用户群体,为企业提供了不可忽视的广告投放平台。 一、必应bing国内广告开户流程 1、需求分析与咨…

C语言 循环语句 (3) for 循环语句

接下来 我们来看第三个 for语句 基本语句是 for关键字 然后小括号 括号中三个表达式 然后它对表达式2进行判断 如果表达式2条件成立 则走进循环体 执行完循环体 会回来执行表达式3 然后再返回来 继续对表达式2进行判断 如果表达式2 还是成立 这继续循环往复 直到表达式2的条件…

游戏理解入门:Rust+Bracket开发一个小游戏

1. Game loop 使用game loop可以使得游戏运行更加流畅和顺滑,它可以: 初始化窗口、图形和其他资源;每当屏幕刷新他都会运行(通常是每秒30,60 );每次通过循环,他都会调用游戏的tick()函数。 大致的原理流程如下&…

那个在买珠宝的年轻人

金价搭上过山车,今年以来价格一路飙涨。 珍珠身价同步飙升,晋级珠宝圈“新宠”。 文玩圈“减龄”,盘珠串不再只是“老头乐”。 月薪3000的年轻人,悄悄实现“宝石”自由。 黄金珠宝走俏,这届年轻人到底有着怎样的珠宝…

揭秘文件加密利器:24年度最值得信赖的5大加密软件评测

数据安全与隐私保护已成为我们每个人都必须面对的重要问题。 文件加密软件作为保障数据安全的关键工具,其重要性不言而喻。 在众多的加密软件中,哪些软件能够在保障数据安全的同时,又具备良好的易用性和稳定性呢? 本文将为您揭秘…

快过VS Code,10天暴增20k star,高性能多人协作IDE横空出世

道歉 其实不意味着道歉的人错了 而是他认为这段关系 比自己的尊严更重要 失败了 不是说你有多差 而是说 你需要更努力了 写代码最重要的一个选择就是选哪个IDE了,目前主流的选择是vscode和IDEA了。 但是vscode虽然轻量,但是对于大型的项目仍然显得…

[Meachines][Hard]Napper

Main $ nmap -p- -sC -sV 10.10.11.240 --min-rate 1000 $ curl http://10.10.11.240 $ gobuster dir -u "https://app.napper.htb" -w /usr/share/wordlists/seclists/Discovery/Web-Content/raft-small-words-lowercase.txt -k 博客 $ ffuf -c -w /usr/share/se…

某盾BLACKBOX逆向关键点

需要准备的东西: 1、原JS码 2、AST解混淆码 3、token(来源于JSON) 一、原JS码很好获取,每次页面刷新,混淆的代码都会变,这是正常,以下为部分代码 while (Qooo0) {switch (Qooo0) {case 110 14 - 55: {function O0…

Lib city笔记:TrajectoryDataset

1 AbstractDataset 抽象类,所有数据集的基类 2 TrajectoryDataset 2.1 __init__ 2.2 get_data 2.3 cutter_filter 2.3.1 按照时间间隔切割 2.3.2 按照同一天切割 2.3.3 按照固定窗口长度切割 cut完的轨迹样子 每一个key是一个轨迹的id,对应的value内容…

class与对象的关系

经典的,房子图纸,和创建的房子之间的关系, 类实例化出对象就像现实中使用建筑设计图建造出房子,类就像是设计图,只设计出需要什么东西,但是并没有实体的建筑存在,同样类也只是一个设计&#xf…

Rust读写CSV文件 一维Vec类型元素、二维Vec类型元素写入CSV文件

本文主要介绍Rust读写CSV文件方法, Vec类型元素基本操作方法,Rust把一维Vec类型元素、二维Vec类型元素写入CSV文件方法。 实例测试: 要求读“log.csv”文件数据,把“时间”列数据和“次数”列数据写入日志处理结果1.csv文件&…

暴力破解【1】

1.c/s架构暴力破解 1.1 c/s架构暴力破解前提条件 知道目标地址,端口,协议,无后端验证、用户名字典、密码字典 1.2 c/s架构暴力破解工具 hydra、bruter、medusa爆破 2.b/s架构暴力破解 2.1 无验证码绕过 不带验证码无测试次数的直接使…

[微信小程序] 入门笔记1-滚动视图组件

[微信小程序] 入门笔记1-滚动视图组件 1.页面&组件&渲染 在小程序是由一个个页面page组成, 而页面又是由一个个组件component组成.和网页类似,这里的组件指的就是输入框<input>,按钮<button>,文本<text>,图片<image>等元素.如果你学过网页一…

快速排序(java细节实现)

目录 快速排序: Hoare版: 挖坑法 快速排序的优化 快速排序的非递归实现 小结 从小到大排序 快速排序: 基本思想为&#xff1a;任取待排序元素序列中的某元素作为基准值&#xff0c;按照该排序码将待排序集合分割成两子序列&#xff0c;左子序列中所有元素均小于基准值&…

二叉树的基础遍历2.0

1.0入口&#xff1a;二叉树的基础遍历-CSDN博客 在1.0中使用的是简单的结构体建树&#xff0c;本文注重用二维vector建树。 前序&#xff0c;中序和后序的分析1.0已给出&#xff0c;本文不做过多介绍&#xff0c;本文重点讲二叉树的层序遍历。 先奉上前中后序的代码&#xf…

只允许内网访问时,如何设置hosts

1、Hosts文件简介 hosts文件是一个没有扩展名的计算机文件&#xff0c;用于将主机名与对应的 IP 地址关联起来。在操作系统中&#xff0c;hosts文件通常用于在本地解析域名&#xff0c;以便将域名映射到特定的IP地址。这个文件可以用来屏蔽广告、加速访问特定网站、解决DNS解析…

计算机网络技术主要学什么内容,有哪些课程

计算机网络技术专业是一个涉及理论与实践紧密结合的学科&#xff0c;主要学习内容有计算机网络基础、网络设备技术、网络编程等内容&#xff0c;以下是上大学网&#xff08;www.sdaxue.com&#xff09;整理的计算机网络技术主要学什么内容&#xff0c;供大家参考&#xff01; 基…

服务运维问题

2024-05-01&#xff08;docker 部署的 jar包自动关闭&#xff09; 查询运行情况&#xff1a;处于退出状态 docker ps -a 查询日志&#xff1a;看不出问题 docker logs -f --tail1000 demo-java 查询关于java服务日志&#xff1a;Out of memory: Kill process 16236 (java) …

学习大数据,所需更要的shell基础(2)

文章目录 read读取控制台输入函数系统函数bashnamedirname 自定义函数Shell工具&#xff08;重点&#xff09;cutawk 正则表达式入门常规匹配常用特殊字符 read读取控制台输入 1&#xff09;基本语法 read (选项) (参数) ①选项&#xff1a; -p&#xff1a;指定读取值时的提示…