Linux——Harbor(容器镜像 管理项目)

镜像拉取存在一定的问题,出现原因在于:

使用官方公共仓库中的镜像。

拉取的镜像,主要保存在一下仓库中:

  1. docker.io //Docker hub  最大的官方维护的公共镜像仓库,一般都会提供所有项目的最新版镜像,镜像经过签名认证,保证了镜像的完整性和一致性。
  2. quay.io // redhat维护的一个社区版镜像仓库,主要提供红帽的openshift平台(红帽企业版K8S)的相关组件镜像,以及提供部分从docker hub 复制同步到的软件仓库项目,不保证镜像的安全性、可用性、完整性,以及是否为最新版镜像
  3. gcr.io // 谷歌的镜像仓库
  4. registry.k8s.io // K8S相关组件的官方仓库
  5. 大部分公有云的厂商提供镜像制备服务,并提供一定的镜像仓库功能,但是开放访问的公共仓库较少

为了避免启动容器时,需要拉取镜像这一操作,所以大部分情况下的解决方案是构建企业内部的私有镜像仓库,并能够提供企业级平台的功能,能够兼容大部分公共镜像仓库的镜像。

  1. docker registry     仅仅提供镜像的保存功能,再企业生产环境下,不太适合

镜像仓库的构建方案,有多种选择,因此很多情况下不会专门的镜像仓库服务来实现:

  1. gitlab // 在版本控制器中,保存镜像,
  2. nexus // 也可以作为容器镜像使用
  3. 选择公有云提供商提供的镜像仓库服务
  4. 专门的镜像仓库软件

什么是Harbor

Harbor是一个开源的企业级-容器镜像 管理项目,由VMware公司开源。

Harbor提供了比Docker官方公共镜像仓库更为丰富和安全的功能,尤其适合企业环境使用。

以下是Harbor的一些关键特性:

镜像仓库: 提供容器镜像推动保存,镜像拉取  

harbor 作为企业级平台,提供的支持:

权限管理(RBAC):通过基于角色的访问控制,确保只有授权用户才能访问特定的镜像仓库。

例子:

  1. 仓库本身的性质,如果是一个公共仓库,那么公共仓库的中的镜像所有人都可以进行访问;如果私有仓库,那么一定要验证用户身份,同时用户具备正确的权限才可以访问
  2. 如果用户需要从一个私有仓库中拉取镜像,那么就至少需要浏览访问权限才可以实现;
  3. 如果用户需要向一个私有仓库推送镜像,那么就至少需要仓库的写入权限才可以实现。
  4. harbor 本身并没有明确的所谓读写权限,通过向用户授予角色来实现权限的划分,比如说向一个用户授予某一个私有仓库的管理员权限,这个用户就具备了对于仓库的完整控制权限。

LDAP集成:支持与LDAP服务集成,便于在企业环境中管理和认证用户身份。

1、方便企业环境下的用户统一管理

2、ldap一个基于树状结构的数据库,树状结构靠近公司组织架构,因此多用LDAP 实现企业的统一身份管理

日志审计:提供详细的日志记录功能,帮助企业进行操作跟踪和安全审计。

管理界面:提供直观的Web管理界面,方便用户进行镜像仓库的管理和维护。

自我注册:允许用户自行注册到Harbor,以便更好地管理自己的镜像和配置信息。

镜像复制:支持跨存储库的镜像复制,便于在不同位置部署和同步镜像。

漏洞扫描:新版本的Harbor(2.0以上版本)增加了扫描镜像中漏洞的功能,并将镜像标记为受信任,增强了安全性。

HTTPS支持:支持通过HTTPS协议来保护数据传输的安全性。

2.详细描述组件的功能和作用

Harbor是一个复杂的系统,它由多个组件构成,每个组件都有其特定的功能和作用。以下是Harbor主要组件的详细描述:

数据访问层:

键值对存储:使用redis,提供数据缓存功能,和job service组件的临时job提供元数据存储

数据存储:对于镜像的持久存储提供多种后端支持

数据库: 为harbor数据模型提供关系型元数据存储,比如说项目、用户胡、角色、镜像复制策略、漏洞扫描等。目前采用PostgreSQL

基础服务

  1. 代理:使用nginx反向代理来提供API路由策略。harbor的其他组件,比如说:核心组件、镜像服务、web端口以及token服务等,都位于反向代理后面。反向代理服务把来自web浏览器和docker客户端的请求转发其他后端服务。
  2. 核心组件:harbor 核心组件,主要提供以下功能:
    1. API服务器:一个简单的HTTP服务器,接受REST API 请求并生成响应,响应内容来自其子模块:身份认证和授权、中间件、API处理程序
      • 身份认证和授权:
        1. 所有的请求都需要被认证服务所保护,用户的身份信息都保存本地数据库、AD/LDAP或者OIDC
        2. RBAC机制(基于角色授权)在进行诸如镜像拉取和上传时,来进行用户授权验证
        3. Token服务用来给每一个客户端在拉取上传请求时,根据用户角色进行token签发,如果来自客户端的请求没有token。那么镜像服务将会把用户请求转发给token service
      • 中间件: 对客户端请求进行预处理,以决定请求是否符合服务器要求,以及是否传递给后端组件进行处理,某些功能的实现以中间件形式实现,比如说:配额管理、签名检查、漏洞检查和机器人账号检查等
      • APPI处理程序:对REST API 请求进行处理,主要进行请求参数解析和有效性验证,完成相关API控制器的调用,并回写生成的响应
    2. 配置管理器:覆盖系统内所有组件的配置,比如说:认证类型、邮件设置、证书配置等
    3. 项目管理:管理每一个项目的基本数据和相关元数据
    4. 配额管理器:管理项目的配置,并在每一个push 请求出现时,进行项目的配额检查
    5. Chart 管理器:反向代理chart 相关请求给chart museum,并通过一些插件的使用提供更好的chart 使用体验
    6. 标签保留管理器:管理标签保持策略,并完成标签保持和监控这一过程。
    7. 内容信任:为仓库内资源提供签名,以验证镜像的安全性,目前仅支持容器镜像签名
    8. 镜像复制控制器:管理镜像服务策略和镜像仓库适配器,触发并监控镜像复制过程的并发,包括以下镜像复制适配器:
      • docker registry
      • docker hub
      • huawei SWR
      • Amazon ECR
      • Google GCR
      • Azure ACR
      • Ali ACR
      • Helm hub
      • Quay
      • Artifactory
      • GitLab Registry
    9. 扫描管理器:管理不同通过扫描器提供的扫描适配器,提供扫描结果报告
    10. 通知管理器:对于镜像状态变更进行通知
    11. OCI 要件管理器:管理harbor仓库内所有镜像的声明周期。
    12. 镜像驱动:
  3. job服务:通用作业执行队列服务,让其他组件/服务使用简单的 RESTful API 提交并发运行异步任务的请求
  4. 日志收集器:日志收集器负责把其他模块的日志收集到一起。
  5. GC控制器:管理在线 GC 计划设置并启动和跟踪 GC 进度
  6. Chart Museum:第三方图表存储库服务器,提供图表管理和访问 API。
  7. Docker Registry: 第三方注册服务器,负责存储 Docker 镜像并处理 Docker 推送/拉取命令。由于 Harbor 需要对镜像实施访问控制,因此 Registry 将引导客户端到令牌服务,以获取每个推送或拉取请求的有效令牌。
  8. Notary:第三方内容信任服务器,负责安全地发布和验证内容。

客户端:

作为标准的云原生镜像仓库,相关客户端将自然得到支持,例如 docker CLI、notary 客户端、OCI 兼容客户端(如 Oras)和 Helm。除了这些客户端之外,Harbor 还提供了一个 Web 门户,供管理员轻松管理和监控所有工件。

Web 门户:一个图形用户界面,帮助用户管理仓库中的镜像。

如果使用docker部署,那么这些容器之间都通过Docker内的DNS服务发现来连接通信。通过这种方式,每一个容器都可以通过相应的容器来进行访问。对于终端用户来说,只有反向代理(Nginx)服务的端口需要对外暴露。如果通过K8S部署harbor,不同组件之间的通信由coredns实现,

(1)用户登录处理流程:

假设Harbor被部署在192.168.1.10宿主机上。用户通过如下命令行发送一个登录Harbor的请求:

$ docker login 192.168.1.10

在用户输入所需要的Credentials之后(用户名和密码),Docker Client会发送一个HTTP GET请求到192.168.1.10/v2/地址处,Harbor的不同容器组件将会按照如下步骤进行处理:

(a) 首先,该请求将会被监听在80端口上的代理容器所接收到。容器中的Nginx将会把该请求转发给后端的Registry容器

(b) 由于registry容器已经被配置为基于token的认证,因此其会返回一个401错误码,用于通知docker客户端从一个指定的URL处获得一个有效的token。在Harbor中,该URL会指向Core service中的token service。

(c) 当Docker Client接收到这个错误码,其就会发送一个请求到token service URL,会根据HTTP基本认证协议在请求头中内嵌username和password相关信息

(d) 在该请求被发送到代理的80端口上后,Nginx会根据预先所配置的规则将请求转发到UI容器上。UI容器中的token service接收到该请求之后,其就会对该请求进行解码然后获得相应的用户名及密码

(e) 在成功获得用户名及密码之后,token Service就会检查mysql数据库以完成用户的认证。当token service被配置为LDAP/AD认证的时候,其就会通过外部的LDAP/AD服务来完成认证。在成功认证之后,token Service就会返回一个认证成功的http code, Http body部分会返回一个通过private key所产生的token

到这里为止,Docker login就处理完成。Docker client会将步骤(c)所产生的username及password编码后保存到一个隐藏的文件中

(2)镜像推送流程:

下图省略了代理服务器

(a) 首先,docker client执行类似登录时的流程发送一个请求到registry,然后返回一个token service的URL

(b) 然后,docker client通过提供一些额外的信息与ui/token交互以获得push镜像library/hello-world的token

(c) 在成功获得来自Nginx转发的请求之后,Token Service查询数据库以寻找用户推送镜像的角色及权限。假如用户有相应的权限,token service就会编码相应的push操作信息,并用一个private key进行签名。然后返回一个token给Docker client

(d) 在docker client获得token之后,其就会发送一个push请求到registry,在该push请求的头中包含有上面返回的token信息。一旦registry收到了该请求,其就会使用public key来解码该token,然后再校验其内容。该public key对应于token service处的private key。假如registry发现该token有效,则会开启镜像的传输流程。

3.它都有什么优点或缺点

Harbor作为一个企业级的容器镜像管理工具,它的优点和缺点都值得关注。

优点方面:

多用户管理和基于角色的访问控制:Harbor支持多用户环境,允许创建不同的用户和组织,并为他们分配不同的权限,确保了资源的安全隔离和管理的灵活性。

丰富的管理功能:Harbor为管理员提供了丰富的管理选项,包括项目隔离、存储配额、制品保留等,使得管理员可以细致地控制资源的使用和分配。

支持多种制品类型:除了容器镜像,Harbor还支持符合OCI规范的其他制品,如Helm Chart、CNAB、OPA Bundle等,这使得它可以适应更多类型的云原生应用。

安全性:Harbor提供了漏洞扫描、来源签名、不可变制品等安全功能,帮助保护存储在仓库中的镜像不受安全威胁。

缺点方面:

性能限制:在某些情况下,Harbor可能会遇到I/O带宽较低和读写延迟较高的问题,这可能会影响大规模部署时的性能。

稳定性问题:尽管Harbor是一个成熟的产品,但在特定的环境和负载下,可能会遇到稳定性方面的挑战。

配置和维护复杂度:Harbor的配置和管理可能相对复杂,需要对Docker和Kubernetes有一定的了解,以便有效地部署和维护。

  1. Harbor的核心功能,即存储和管理Artifact

Harbor的核心功能是存储和管理Artifact,这包括以下几个方面:

镜像仓库管理:Harbor提供了强大的镜像仓库管理功能,允许用户存储和检索Docker容器镜像。它还支持镜像搜索和标签管理,使得组织和维护容器镜像变得高效和简便。

访问控制:通过角色分配和权限管理,Harbor确保了只有授权用户才能访问特定的Artifact。这有助于保护敏感数据并防止未经授权的访问。

命令行工具支持:Harbor允许用户使用命令行工具对容器镜像及其他Artifact进行推送和拉取,这为用户提供了灵活的操作方式。

资源配额管理:Harbor还提供了资源配额的功能,可以基于项目而非用户来设置存储总量的限制,这有助于合理分配和监控存储资源的使用。

垃圾回收机制:当用户在Harbor中删除Artifact时,实际上是进行了“软删除”,即只删除了Artifact对应的数据记录,而没有删除存储。Harbor提供了垃圾回收机制来自动管理存储资源,释放不再使用的存储空间。

5.Harbor的漏洞扫描和镜像签名功能

Harbor的漏洞扫描和镜像签名功能是其核心特性之一,它们为容器镜像的安全性提供了重要支持。

漏洞扫描功能:

集成漏洞扫描工具:Harbor可以与漏洞扫描工具如Trivy集成,以便于在镜像被推送到仓库之前进行自动扫描。

扫描过程:漏洞扫描工具会从Harbor镜像仓库中拉取镜像,并对其进行分析,以识别潜在的安全漏洞。

安全性强化:通过漏洞扫描,Harbor帮助确保存储在仓库中的容器镜像不含有已知的安全漏洞,从而保护企业应用的安全。

镜像签名功能:

签名机制:Harbor支持对容器镜像进行数字签名,确保镜像的来源和完整性。

信任和验证:用户可以通过验证镜像签名来确保所下载的镜像是由可信的开发者或组织发布的,并且未被篡改。

标准化格式:Harbor支持的镜像格式包括Docker的标准镜像格式以及遵循Open Container Initiative(OCI)规范的格式,这意味着它能够处理各种标准的容器镜像。

6. Helm Chart、CNAB、OPA Bundle等符合OCI规范的制品的管理

Harbor 2.0作为一个符合OCI(Open Container Initiative)规范的开源镜像仓库,它能够存储和管理多种云原生工件,例如容器镜像、Helm Chart、OPA、Singularity等。这些制品都可以通过Harbor进行分发和管理。具体来说,以下是关于这些制品的一些管理细节:

Helm Chart:Helm是Kubernetes的包管理器,而Helm Chart是预先配置的Kubernetes应用包。在Harbor中,Helm Chart可以作为Artifact存储和管理,而且随着社区对兼容OCI规范的Helm Chart的接受度提高,Harbor支持不再依赖ChartMuseum进行Helm Chart的管理。

CNAB:CNAB是Cloud Native Application Bundle的缩写,是一种用于封装云原生应用的文件格式。在Harbor中,它们可以被当作OCI Artifacts来处理,这意味着它们可以按照OCI的分发规范被推送到仓库和从仓库拉取。

OPA Bundle:OPA是Open Policy Agent的简称,是一种开源的、通用的策略引擎。OPA Bundle是包含策略文件和配置文件的压缩包,同样可以在Harbor中以OCI Artifact的形式存储和管理。

  1. 漏洞扫描工具Trivy

Trivy是一个开源的容器镜像安全漏洞扫描工具。以下是Trivy的一些主要特点和优势:

全面性:Trivy能够检测操作系统包(如Alpine、RHEL、CentOS等)和应用程序依赖(如Bundler、Composer、npm、yarn等)的漏洞。这使它能够在多个层面上确保容器镜像的安全性。

简易性:Trivy的使用非常方便,只需安装二进制文件即可开始扫描。用户只需指定容器的镜像名称,就可以进行漏洞检测。

集成性:Trivy特别适合在持续集成(CI)环境中使用,可以方便地集成到DevOps流程中,确保在容器镜像被推送到仓库之前进行安全检查。

更新性:为了保持漏洞库的最新状态,Trivy会定期更新其漏洞数据库,以便能够识别最新的安全威胁。

准确性:Trivy在准确性方面表现出色,它通过对比漏洞库中的数据来识别潜在的安全问题。

社区支持:作为一个开源项目,Trivy拥有一个活跃的社区,用户可以从社区获得支持和最新的安全信息。

平台支持:Trivy支持多种平台,包括Java相关的漏洞检测,这意味着它能够识别与Java相关的安全漏洞

harbor的安装与使用:

实验环境简介:

  1. 使用独立主机部署harbor
  2. 使用docker compose 完成harbor部署
  3. 后期使用harbor 中的镜像来部署应用

配置网络

主机名:

修改sshd允许root登录

过程省略:

[root@harbor ~]# setenforce 0
[root@harbor ~]# sed -i "s/enforcing/permissive/g" /etc/selinux/config
[root@harbor ~]# systemctl disable --now firewalld.service
Removed "/etc/systemd/system/multi-user.target.wants/firewalld.service".
Removed "/etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service".配置docker 仓库并安装docker docker compose 相关命令
[root@harbor ~]# cat /etc/yum.repos.d/docker-ce.repo
[docker-ce-stable]
name=Docker CE Stable - $basearch
baseurl=https://download.docker.com/linux/centos/$releasever/$basearch/stable
enabled=1
gpgcheck=1
gpgkey=https://download.docker.com/linux/centos/gpg[docker-ce-stable-debuginfo]
name=Docker CE Stable - Debuginfo $basearch
baseurl=https://download.docker.com/linux/centos/$releasever/debug-$basearch/stable
enabled=0
gpgcheck=1
gpgkey=https://download.docker.com/linux/centos/gpg[docker-ce-stable-source]
name=Docker CE Stable - Sources
baseurl=https://download.docker.com/linux/centos/$releasever/source/stable
enabled=0
gpgcheck=1
gpgkey=https://download.docker.com/linux/centos/gpg[docker-ce-test]
name=Docker CE Test - $basearch
baseurl=https://download.docker.com/linux/centos/$releasever/$basearch/test
enabled=0
gpgcheck=1
gpgkey=https://download.docker.com/linux/centos/gpg[docker-ce-test-debuginfo]
name=Docker CE Test - Debuginfo $basearch
baseurl=https://download.docker.com/linux/centos/$releasever/debug-$basearch/test
enabled=0
gpgcheck=1
gpgkey=https://download.docker.com/linux/centos/gpg[docker-ce-test-source]
name=Docker CE Test - Sources
baseurl=https://download.docker.com/linux/centos/$releasever/source/test
enabled=0
gpgcheck=1
gpgkey=https://download.docker.com/linux/centos/gpg[docker-ce-nightly]
name=Docker CE Nightly - $basearch
baseurl=https://download.docker.com/linux/centos/$releasever/$basearch/nightly
enabled=0
gpgcheck=1
gpgkey=https://download.docker.com/linux/centos/gpg[docker-ce-nightly-debuginfo]
name=Docker CE Nightly - Debuginfo $basearch
baseurl=https://download.docker.com/linux/centos/$releasever/debug-$basearch/nightly
enabled=0
gpgcheck=1
gpgkey=https://download.docker.com/linux/centos/gpg[docker-ce-nightly-source]
name=Docker CE Nightly - Sources
baseurl=https://download.docker.com/linux/centos/$releasever/source/nightly
enabled=0
gpgcheck=1
gpgkey=https://download.docker.com/linux/centos/gpg[root@harbor ~]# yum remove podman -y
[root@harbor ~]# yum -y install docker-ce docker-ce-cli docker-buildx-plugin  docker-compose-plugin
[root@harbor ~]# systemctl enable --now docker
Created symlink /etc/systemd/system/multi-user.target.wants/docker.service → /
[root@harbor ~]# systemctl is-active docker.service
active

上传harbor安装包:

下载地址见群聊消息:

右键点击下载离线安装包,并上传到harbor安装虚拟机

预先配置harbor通信需要使用的tsl证书

[root@harbor ~]# mkdir /data/certs -p
[root@harbor ~]# cd /data/certs/
[root@harbor certs]# pwd
/data/certs
[root@harbor certs]# openssl genrsa -out ca.key 4096
[root@harbor certs]# openssl req -x509 -new -nodes -sha512 -days 3650 \
>  -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=MyPersonal Root CA" \
> -key ca.key \
> -out ca.crt
[root@harbor certs]# ls
ca.crt  ca.key
[root@harbor certs]# openssl genrsa -out harbor.mydomain.com.key 4096
[root@harbor certs]# ls
ca.crt  ca.key  harbor.mydomain.com.key
[root@harbor certs]# openssl req -sha512 -new \
> -key harbor.mydomain.com.key \
> -out harbor.mydomain.com.csr \
> -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=harbor.mydomain.com"
[root@harbor certs]# ls
ca.crt  ca.key  harbor.mydomain.com.csr  harbor.mydomain.com.key
[root@harbor certs]# vim v3.ext
[root@harbor certs]# cat v3.ext
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names[alt_names]
DNS.1=harbor.mydomain.com
DNS.2=mydomain.com
DNS.3=harbor[root@harbor certs]# openssl x509 -req -sha512 -days 3650 \
> -extfile v3.ext \
> -CA ca.crt -CAkey ca.key -CAcreateserial \
> -in harbor.mydomain.com.csr \
> -out harbor.mydomain.com.crt
Certificate request self-signature ok
subject=C=CN, ST=Beijing, L=Beijing, O=example, OU=Personal, CN=harbor.mydomain.com
[root@harbor certs]# ls
ca.crt  ca.srl                   harbor.mydomain.com.csr  v3.ext
ca.key  harbor.mydomain.com.crt  harbor.mydomain.com.key
[root@harbor certs]# openssl x509 -inform PEM \
> -in harbor.mydomain.com.crt \
> -out harbor.mydomain.com.cert
[root@harbor certs]# ls
ca.crt  harbor.mydomain.com.cert  harbor.mydomain.com.key
ca.key  harbor.mydomain.com.crt   v3.ext
ca.srl  harbor.mydomain.com.csr
[root@harbor certs]# mkdir /etc/docker/certs.d/harbor.mydomain.com -p
[root@harbor certs]#
[root@harbor certs]# cp ca.crt /etc/docker/certs.d/harbor.mydomain.com/
[root@harbor certs]# cp harbor.mydomain.com.cert /etc/docker/certs.d/harbor.mydomain.com/
[root@harbor certs]# cp harbor.mydomain.com.key /etc/docker/certs.d/harbor.mydomain.com/
[root@harbor certs]# systemctl restart docker

此时docker 就可以使用加密证书与harbor进行通信

解压harbor安装包,开始安装:

[root@harbor certs]# cd ~
[root@harbor ~]# ls harbor-offline-installer-v1.10.19.tgz
harbor-offline-installer-v1.10.19.tgz
[root@harbor ~]# tar -zxf harbor-offline-installer-v1.10.19.tgz -C /usr/src/
[root@harbor ~]# cd /usr/src/harbor/
[root@harbor harbor]# ls
common.sh  harbor.v1.10.19.tar.gz  harbor.yml  install.sh  LICENSE  prepare
[root@harbor harbor]# cp harbor.yml harbor-install-config.bak
[root@harbor harbor]# vim harbor.yml

harbor.yml 需要进行的修改:

[root@harbor harbor]# vim common.sh

[root@harbor harbor]# vim install.sh

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

等待运行完毕,成功运行完毕后,出现如下提示,中间出现的warning告警可以忽略。

 

提示启动完成后,打开浏览器输入harbor仓库地址进行访问:

使用默认管理员用户以及密码登录

admin: Harbor12345

登录后选择新建项目,设置项目为非公开项目

使用docker命令上传下载镜像:

[root@harbor harbor]# docker login harbor.mydomain.com
Username: admin
Password:
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/#credential-storesLogin Succeeded
[root@harbor harbor]# ls ~/.docker/
config.json
[root@harbor harbor]# cat ~/.docker/config.json
{"auths": {"harbor.mydomain.com": {"auth": "YWRtaW46SGFyYm9yMTIzNDU="}}
}
[root@harbor harbor]# docker tag goharbor/clair-adapter-photon:v1.10.19 \
> harbor.mydomain.com/myproject/clair-adapter-photon:v1.10.19

注意需要推送到harbor仓库的镜像命令格式为 harbor主机地址or 主机名/harbor内仓库名/镜像名:标签

[root@harbor harbor]# docker push harbor.mydomain.com/myproject/clair-adapter-photon:v1.10.19
The push refers to repository [harbor.mydomain.com/myproject/clair-adapter-photon]
2b3f1f5ea1dc: Pushed
52bdf6981973: Pushed
fdd5e67f8d66: Pushed
48e3b59d8489: Pushed
v1.10.19: digest: sha256:899668c7124229a5b15bd80f00466c0ed7d8911460ee8421839d7fecad92fc43 size: 1162
[root@harbor harbor]# docker rmi harbor.mydomain.com/myproject/clair-adapter-photon:v1.10.19
Untagged: harbor.mydomain.com/myproject/clair-adapter-photon:v1.10.19
Untagged: harbor.mydomain.com/myproject/clair-adapter-photon@sha256:899668c7124229a5b15bd80f00466c0ed7d8911460ee8421839d7fecad92fc43
[root@harbor harbor]# docker pull harbor.mydomain.com/myproject/clair-adapter-photon:v1.10.19
v1.10.19: Pulling from myproject/clair-adapter-photon
Digest: sha256:899668c7124229a5b15bd80f00466c0ed7d8911460ee8421839d7fecad92fc43
Status: Downloaded newer image for harbor.mydomain.com/myproject/clair-adapter-photon:v1.10.19
harbor.mydomain.com/myproject/clair-adapter-photon:v1.10.19
[root@harbor harbor]# docker images

验证是够拉取成功

在浏览器中查看上传的镜像

对于harbor的启动和停止,通过docker cmpose 控制,最好在harbor的解压目录下执行,

启动命令 docker compose up -d

停止命令: docker compose down

状态检查: docker compose stats

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

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

相关文章

springboot 整合 快手 移动应用 授权 发布视频 小黄车

前言: 因快手文档混乱,官方社区技术交流仍有很多未解之谜,下面3种文档的定义先区分。 代码中的JSON相关工具均用hutool工具包 1.快手 移动双端 原生SDK 文档https://mp.kuaishou.com/platformDocs/develop/mobile-app/ios.html 2.快手 Api 开…

物联网智能项目(含案例说明)

物联网(Internet of Things,简称IoT)智能项目是指利用物联网技术将各种物理设备、传感器、软件、网络等连接起来,实现设备之间的互联互通,并通过数据采集、传输、处理和分析,实现智能化管理和控制的项目。以…

Qt入门教程:创建我的第一个小程序

本章教程,主要介绍如何编写一个简单的QT小程序。主要是介绍创建项目的过程。 一、打开QT软件编辑器 这里使用的是QT5.14.2版本的,安装教程参考以往教程:https://blog.csdn.net/qq_19309473/article/details/142907096 二、创建项目 到这里&am…

【Docker】03-自制镜像

1. 自制镜像 2. Dockerfile # 基础镜像 FROM openjdk:11.0-jre-buster # 设定时区 ENV TZAsia/Shanghai RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone # 拷贝jar包 COPY docker-demo.jar /app.jar # 入口 ENTRYPOINT ["ja…

Flutter应用解析(一)

1、创建项目 1.1 新建 1.2 选择Flutter SDK的位置 1.3 项目名称 英文单词加下划线起名规范,其他默认即可。 1.4 点击运行 发生报错显示我们的JAVA版本不符合 1.5 更改版本设置 1.6 再次启动项目 2、分析页面代码 以下是lib/main.dart的源代码(为了阅…

【机器学习】朴素贝叶斯算法|商品评论情感分析案例介绍及代码实现

文章目录 朴素贝叶斯算法朴素贝叶斯算法介绍概率数学基础复习朴素贝叶斯算法-利用概率值进行分类的一种机器学习算法贝叶斯公式朴素贝叶斯算法拉普拉斯平滑系数 朴素贝叶斯API案例分析流程数据集代码实现运行结果 朴素贝叶斯算法 朴素贝叶斯算法介绍 概率数学基础复习 条件概…

架构设计笔记-11-未来信息综合技术

知识要点 云原生架构原则包括:服务化原则、弹性原则、可观测原则、韧性原则、所有过程自动化原则、零信任原则和架构持续演进原则。 区块链是一种按照时间顺序将数据区块以顺序相连的方式组合成的一种链式数据结构,并以密码学方式保证的不可篡改和不可…

CVE-2022-26965靶机渗透

​ 开启环境 ​ ​ 进入环境 ​ ​ 使用弱口令admin登录 ​ ​ 利用cms主题构造木马 ​ 需要将主题中的info.php文件修改,再打包成zip再上传,通过网络搜索找到Github中的Pluck CMS,进入后随便下载任一主题 https://github.com/sear…

服务性能优化之mybatis-plus 开启与关闭 SQL 日志打印

Hello!欢迎各位新老朋友来看小弟博客,祝大家事业顺利,财源广进!! 主题:mybatis-plus 开启与关闭 SQL 日志打印 第一:开启打印 Mybatis-plus 需要通过下面的方式开启控制台 SQL 日志打印 myba…

和鲸科技创始人范向伟:拐点即将来临,AI产业当前的三个瓶颈

在科技迅猛发展的时代,人工智能(AI)无疑已经成为引领新一轮产业革命的核心动力之一。全球企业纷纷拥抱AI技术,试图借助其变革力量在竞争中突围,然而业界对AI产业化的拐点何时来临却众说纷纭。毕竟AI技术从实验室到商业…

4K变倍镜头特点

1、高分辨率成像: ① 能够呈现清晰、细腻的图像,可清晰快速地识别出被测物体的微小细节、特征以及潜在的缺陷等。例如在芯片外观瑕疵检测中,能清晰地分辨出芯片上的刮痕、污渍、破损、引脚缺失等问题。 ② 相比传统的变倍镜头,在…

LabVIEW提高开发效率技巧----队列使用

在LabVIEW开发中,队列是实现并行处理、数据传递和任务调度的关键机制之一,合理使用队列可以有效提高程序性能并避免内存问题。结合队列长度限制和其他队列相关技巧,以下是队列使用的详细说明: 1. 队列长度限制 限制队列的长度可以…

全面讲解C++

数据类型 1.1 基本数据类型 1.1.1 整型(Integer Types) 整型用于表示整数值,分为以下几种类型: int:标准整数类型,通常为4字节(32位)。short:短整型,通常…

量子数字签名概述

我们都知道,基于量子力学原理研究密钥生成和使用的学科称为量子密码学。其内容包括了量子密钥分发、量子秘密共享、量子指纹识别、量子比特承诺、量子货币、秘密通信扩展量子密钥、量子安全计算、量子数字签名、量子隐性传态等。虽然各种技术发展的状态不同&#xf…

FreeRTOS学习总结

背景:在裸机开发上,有时候我们需要等待某个信号或者需要延迟时,CPU的运算是白白浪费掉了的,CPU的利用率并不高,我们希望当一个函数在等待的时候,可以去执行其他内容,提高CPU的效率,同…

windows修改文件最后修改时间

一、需要修改日期的文件 背景:有时候我们需要做一些文件定期删除的操作,但是测试时候并不一定有符合测试的文件,这时候就需要可以方便的修改文件的最后修改时间。 系统环境:windows 测试文件:如上 修改时间方式:windows 脚本。 二、测试脚本 (1) 脚本 # 指定文件路径 …

自然语言处理:第五十三章 Ollama

代码: ollama/ollama: Get up and running with Llama 3.1, Mistral, Gemma 2, and other large language models. (github.com) 官网: Ollama 写在前面: 笔者更新不易,希望走过路过点个关注和赞,笔芯!!! 写在前面: 笔者更新不易…

Android Framework默认授予app通知使用权限

安卓通知使用权限 在安卓系统中,应用程序需要获取通知使用权限才能向用户发送通知。以下是关于安卓通知使用权限的一些信息: 权限获取方式 当用户安装应用时,系统可能会在安装过程中提示用户授予应用通知权限。用户可以选择允许或拒绝。 应…

架构设计笔记-18-安全架构设计理论与实践

知识要点 常见的安全威胁: 信息泄露:信息被泄露或透露给某个非授权的实体。破坏信息的完整性:数据被非授权地进行增删、修改或破坏而受到损失。拒绝服务:对信息或其他资源的合法访问被无条件地阻止。攻击者向服务器发送大量垃圾…

OCM认证考试须知:掌握这些关键点,轻松应对考试

在Oracle认证体系中,OCM(OracleCertifiedMaster)是最高级别的认证。它代表了在Oracle数据库技术领域的顶尖水平。 OCM认证不仅要求你具备深厚的理论知识,还要求你能够解决复杂的数据库问题,并具备高级的项目管理能力。…