镜像浏览器_Docker 企业级私有镜像仓库 Harbor 部署

Docker官方仓库为 Docker Registry 作为镜像仓库,部署过程中会遇到了很多问题。
除此之处,Docker Registry 没有管理页面,甚至连一些运维必备的功能都是缺失的,还有什么 Docker 镜像仓库管理工具呢?
这里有一个简单好用的企业级 Registry 服务器 - Harbor,推荐在生产环境上使用。
Harbor 简介
Harbor 是一个用于存储和分发 Docker 镜像的企业级 Registry 服务器, 通过添加一些企业必需的功能特性,例如安全、标识和管理等,扩展了开源 Docker Distribution。 作为一个企业级私有 Registry 服务器,Harbor 提供了更好的性能和安全。提升用户使用 Registry 构建和运行环境传输镜像的效率。 Harbor 支持安装在多个 Registry 节点的镜像资源复制,镜像全部保存在私有 Registry 中,确保数据和知识产权在公司内部网络中管控。 另外,Harbor 也提供了高级的安全特性,诸如用户管理,访问控制和活动审计等。
Harbor 是由 VMware 中国研发团队负责开发的开源企业级 Docker Registry, 不仅解决了我们直接使用 Docker Registry 的功能缺失, 更解决了我们在生产使用 Docker Registry 面临的高可用、镜像仓库直接复制、镜像仓库性能等运维痛点。
Harbor 特性(1)基于角色的访问控制 :用户与Docker镜像仓库通过“项目”进行组织管理,一个用户可以对多个镜像仓库在同一命名空间(project)里有不同的权限。(2)镜像复制 : 镜像可以在多个Registry实例中复制(同步)。尤其适合于负载均衡,高可用,混合云和多云的场景。(3)图形化用户界面 : 用户可以通过浏览器来浏览,检索当前Docker镜像仓库,管理项目和命名空间。(4)AD/LDAP 支持 : Harbor可以集成企业内部已有的AD/LDAP,用于鉴权认证管理。(5)审计管理 : 所有针对镜像仓库的操作都可以被记录追溯,用于审计管理。(6)国际化 : 已拥有英文、中文、德文、日文和俄文的本地化版本。更多的语言将会添加进来。(7)RESTful API : RESTful API 提供给管理员对于Harbor更多的操控, 使得与其它管理软件集成变得更容易。(8)部署方便 : 提供在线和离线两种安装工具, 也可以安装到vSphere平台(OVA方式)虚拟设备。
Harbor在架构上主要由6个组件构成:(1)Proxy:Harbor的registry, UI, token等服务,通过一个前置的反向代理统一接收浏览器、Docker客户端的请求,并将请求转发给后端不同的服务。(2)Registry: 负责储存Docker镜像,并处理docker push/pull 命令。由于我们要对用户进行访问控制,即不同用户对Docker image有不同的读写权限,Registry会指向一个token服务,强制用户的每次docker pull/push请求都要携带一个合法的token, Registry会通过公钥对token 进行解密验证。(3)Core services: 这是Harbor的核心功能,主要提供以下服务:1)UI:提供图形化界面,帮助用户管理registry上的镜像(image), 并对用户进行授权。2)webhook:为了及时获取registry 上image状态变化的情况, 在Registry上配置webhook,把状态变化传递给UI模块。3)token 服务:负责根据用户权限给每个docker push/pull命令签发token. Docker 客户端向Regiøstry服务发起的请求,如果不包含token,会被重定向到这里,获得token后再重新向Registry进行请求。(4)Database:为core services提供数据库服务,负责储存用户权限、审计日志、Docker image分组信息等数据。(5)Job Services:提供镜像远程复制功能,可以把本地镜像同步到其他Harbor实例中。(6)Log collector:为了帮助监控Harbor运行,负责收集其他组件的log,供日后进行分析。
各个组件之间的关系如下图所示:

5cab703882f0927d65b87314a4efe07f.png


Harbor构建
Harbor的每个组件都是以Docker容器的形式构建的,官方也是使用Docker Compose来对它进行部署。用于部署Harbor的Docker Compose模板位于 harbor/docker-compose.yml,打开这个模板文件,发现Harbor是由7个容器组成的;(1)nginx:nginx负责流量转发和安全验证,对外提供的流量都是从nginx中转,所以开放https的443端口,它将流量分发到后端的ui和正在docker镜像存储的docker registry。(2)harbor-jobservice:harbor-jobservice 是harbor的job管理模块,job在harbor里面主要是为了镜像仓库之前同步使用的;(3)harbor-ui:harbor-ui是web管理页面,主要是前端的页面和后端CURD的接口;(4)registry:registry就是docker原生的仓库,负责保存镜像。(5)harbor-adminserver:harbor-adminserver是harbor系统管理接口,可以修改系统配置以及获取系统信息。(6)harbor-db:harbor-db是harbor的数据库,这里保存了系统的job以及项目、人员权限管理。由于本harbor的认证也是通过数据,在生产环节大多对接到企业的ldap中;(7)harbor-log:harbor-log是harbor的日志服务,统一管理harbor的日志。通过inspect可以看出容器统一将日志输出的syslog。
这几个容器通过Docker link的形式连接在一起,这样在容器之间可以通过容器名字互相访问。对终端用户而言,只需要暴露proxy (即Nginx)的服务端口。
Harbor 部署
目标主机环境准备

  • 系统环境 CentOS Linux release 7.5
  • Python 版本 2.7 及以上
  • Docker CE 版本 Docker version 18.09.0
  • Docker Compose 版本 1.22.0 及以上
  • harbor 版本 V1.6.0
  • 安装位置 /opt/harbor

安装步骤
1.安装前置组件
yum -y install wget python-devel libevent-devel epel-release python-pip gcc gcc-c++ xz-devel
2.安装Dcoker CEyum install -y yum-utils device-mapper-persistent-data lvm2yum-config-manager --add-repohttps://download.docker.com/linux/centos/docker-ce.repo
yum -y install docker-ce
3.安装Dcoker compose
curl -L"https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
4.安装Harbor
下载安装包
cd /usr/local/src
wget https://storage.googleapis.com/harbor-releases/release-1.7.0/harbor-offline-installer-v1.7.1.tgz
解压缩到目录/usr/local/harbor
tar -xvf harbor-offline-installer-v1.7.1.tgz -C /usr/local/
5.配置 Harbor
Harbor 的配置文件是 harbor.cfg,里面有各种参数可以配置。修改配置文件harbor.cfg
必须参数

  • hostname:目标主机的主机名,用于访问UI和注册表服务。它应该是目标机器的IP地址或完全限定域名(FQDN),例如192.168.1.10或reg.yourdomain.com。
  • ui_url_protocol:(http或https。默认为http)用于访问UI和令牌/通知服务的协议。如果启用公证,则此参数必须为https。默认情况下,这是http。要设置https协议,请参阅使用HTTPS访问harbor。
  • db_password:用于db_auth的MySQL数据库的根密码。更改此密码以供任何生产用途!
  • max_job_workers:(默认值为3)作业服务中的最大复制工作数。对于每个映像复制作业,工作程序将存储库的所有标签同步到远程目标。增加此数字允许系统中更多的并发复制作业。但是,由于每个工作人员都会消耗一定数量的网络/ CPU / IO资源,请根据主机硬件资源选择该属性的值。
  • customize_crt:(打开或关闭,默认为打开)当此属性打开时,准备脚本将为注册表令牌的生成/验证创建私钥和根证书。当密钥和根证书由外部源提供时,将此属性设置为off。有关详细信息,请参阅自定义密钥和harbor令牌服务证书。
  • ssl_cert:SSL证书的路径,仅当协议设置为https时才应用
  • ssl_cert_key:SSL密钥的路径,仅当协议设置为https时才应用
  • secretkey_path:用于在复制策略中加密或解密远程注册表的密码的密钥路径。


可选参数

  • 电子邮件设置:Harbor需要这些参数才能向用户发送“密码重设”电子邮件,只有在需要该功能时才需要这些参数。另外,请注意,在默认情况下SSL连接时没有启用-如果你的SMTP服务器需要SSL,但不支持STARTTLS,那么你应该通过设置启用SSL email_ssl = TRUE。email_server = http://smtp.mydomain.com email_server_port = 25 email_username = sample_admin@mydomain.com email_password = abc email_from = admin sample_admin@mydomain.com email_ssl = false
  • harbor_admin_password:管理员的初始密码。该密码仅在Harbor 第一次启动时生效。之后,此设置将被忽略,并且应在UI中设置管理员的密码。请注意,默认用户名/密码为admin / Harbor12345。
  • auth_mode:使用的身份验证类型。默认情况下,它是db_auth,即凭据存储在数据库中。对于LDAP身份验证,请将其设置为ldap_auth。重要提示:从现有的Harbor 实例升级时,必须确保auth_modeharbor.cfg在启动新版本的Harbor之前是一样的。否则,升级后用户可能无法登录。
  • ldap_url:LDAP端点URL(例如ldaps://ldap.mydomain.com)。 仅当auth_mode设置为ldap_auth时才使用。
  • ldap_searchdn:具有搜索LDAP / AD服务器权限的用户的DN(例如uid=admin,ou=people,dc=mydomain,dc=com)。
  • ldap_search_pwd:由ldap_searchdn指定的用户的密码。
  • LDAP_BASEDN:基本DN查找用户,如ou=people,dc=mydomain,dc=com。 仅当auth_mode设置为ldap_auth时才使用。
  • LDAP_FILTER:用于查找用户,例如,搜索过滤器(objectClass=person)。
  • ldap_uid:用于在LDAP搜索期间匹配用户的属性,它可以是uid,cn,电子邮件或其他属性。
  • ldap_scope:搜索用户的范围,1-LDAP_SCOPE_BASE,2-LDAP_SCOPE_ONELEVEL,3-LDAP_SCOPE_SUBTREE。默认值为3。
  • self_registration:(开或关,默认为开)启用/禁用用户注册自己的能力。禁用时,只能由管理员用户创建新用户,只有管理员用户才能在海港创建新用户。 注意:当auth_mode设置为ldap_auth时,自注册功能始终被禁用,并且该标志被忽略。
  • token_expiration:令牌服务创建的令牌的到期时间(以分钟为单位),默认值为30分钟。
  • project_creation_restriction:用于控制用户有权创建项目的标志。默认情况下,每个人都可以创建一个项目,设置为“adminonly”,以便只有admin才能创建项目。
  • verify_remote_cert:(上或关闭,默认为上)该标志,判断是否验证SSL / TLS证书时码头与远程注册表实例通信。将此属性设置为off可绕过SSL / TLS验证,SSL / TLS验证通常在远程实例具有自签名或不受信任的证书时使用

hostname = 172.19.212.198
ui_url_protocol = http安装Harbor
[root@harbor01 harbor]# ./prepare
Generated and saved secret to file: /data/secretkey
Generated configuration file: ./common/config/nginx/nginx.conf
Generated configuration file: ./common/config/adminserver/env
Generated configuration file: ./common/config/core/env
Generated configuration file: ./common/config/registry/config.yml
Generated configuration file: ./common/config/db/env
Generated configuration file: ./common/config/jobservice/env
Generated configuration file: ./common/config/jobservice/config.yml
Generated configuration file: ./common/config/log/logrotate.conf
Generated configuration file: ./common/config/registryctl/env
Generated configuration file: ./common/config/core/app.conf
Generated certificate, key file: ./common/config/core/private_key.pem, cert file: ./common/config/registry/root.crt
The configuration files are ready, please use docker-compose to start the service.
[root@harbor01 harbor]# ./install.sh
[Step 0]: checking installation environment ...
Note: docker version: 18.09.0
Note: docker-compose version: 1.23.2
[Step 1]: loading Harbor images ...
ae18db924eef: Loading layer [==================================================>] 32.92MB/32.92MB
1c06074dba9c: Loading layer [==================================================>] 8.955MB/8.955MB
7a719a639e34: Loading layer [==================================================>] 3.072kB/3.072kB
49f7bca05da9: Loading layer [==================================================>] 2.56kB/2.56kB
e86d69bef97e: Loading layer [==================================================>] 2.56kB/2.56kB
81e122d773f5: Loading layer [==================================================>] 2.048kB/2.048kB
5fe5adb8cf31: Loading layer [==================================================>] 22.8MB/22.8MB
d760045419e4: Loading layer [==================================================>] 22.8MB/22.8MB
Loaded image: goharbor/registry-photon:v2.6.2-v1.7.1
c0f668a21621: Loading layer [==================================================>] 133.2MB/133.2MB
f8cb0bf39ff2: Loading layer [==================================================>] 684MB/684MB
444ac38a117b: Loading layer [==================================================>] 7.68kB/7.68kB
2e16f24ac8bc: Loading layer [==================================================>] 212kB/212kB
Loaded image: goharbor/harbor-migrator:v1.7.1
fa2dcaba747a: Loading layer [==================================================>] 8.955MB/8.955MB
eeaaf4c760eb: Loading layer [==================================================>] 15.6MB/15.6MB
98ffd6175b61: Loading layer [==================================================>] 18.94kB/18.94kB
fc1db6c4f652: Loading layer [==================================================>] 15.6MB/15.6MB
Loaded image: goharbor/harbor-adminserver:v1.7.1
8d55a6a034d6: Loading layer [==================================================>] 8.955MB/8.955MB
01ef68a17913: Loading layer [==================================================>] 27.24MB/27.24MB
f9258cfa4b48: Loading layer [==================================================>] 5.632kB/5.632kB
dcf5c61ede76: Loading layer [==================================================>] 27.24MB/27.24MB
Loaded image: goharbor/harbor-core:v1.7.1
1f65d10893c9: Loading layer [==================================================>] 50.39MB/50.39MB
358f40be2091: Loading layer [==================================================>] 3.584kB/3.584kB
c7f3ef058d0b: Loading layer [==================================================>] 3.072kB/3.072kB
154caf7c7173: Loading layer [==================================================>] 4.096kB/4.096kB
42c7764aa777: Loading layer [==================================================>] 3.584kB/3.584kB
023f3a96f324: Loading layer [==================================================>] 10.24kB/10.24kB
Loaded image: goharbor/harbor-log:v1.7.1
a1b528067504: Loading layer [==================================================>] 8.955MB/8.955MB
2d3d34f3ba5b: Loading layer [==================================================>] 21.51MB/21.51MB
a5da70777097: Loading layer [==================================================>] 21.51MB/21.51MB
Loaded image: goharbor/harbor-jobservice:v1.7.1
ab31dfc84e9d: Loading layer [==================================================>] 8.954MB/8.954MB
b130423af762: Loading layer [==================================================>] 13.43MB/13.43MB
357c059d0598: Loading layer [==================================================>] 17.3MB/17.3MB
fabc6edfac55: Loading layer [==================================================>] 11.26kB/11.26kB
cfaa3b5d445a: Loading layer [==================================================>] 3.072kB/3.072kB
12c73a4b2c7a: Loading layer [==================================================>] 30.72MB/30.72MB
Loaded image: goharbor/notary-server-photon:v0.6.1-v1.7.1
50a6467bd619: Loading layer [==================================================>] 113MB/113MB
6ae61fc91943: Loading layer [==================================================>] 11.46MB/11.46MB
5c840c272f78: Loading layer [==================================================>] 2.048kB/2.048kB
077d16ebcba8: Loading layer [==================================================>] 48.13kB/48.13kB
b822f5ff7858: Loading layer [==================================================>] 3.072kB/3.072kB
4548140152fd: Loading layer [==================================================>] 11.51MB/11.51MB
Loaded image: goharbor/clair-photon:v2.0.7-v1.7.1
232024be30e3: Loading layer [==================================================>] 3.39MB/3.39MB
a73624ae3fad: Loading layer [==================================================>] 4.721MB/4.721MB
96b8c5c532c3: Loading layer [==================================================>] 3.584kB/3.584kB
Loaded image: goharbor/harbor-portal:v1.7.1
e2fd12afe6e8: Loading layer [==================================================>] 63.31MB/63.31MB
e973513bcb58: Loading layer [==================================================>] 40.74MB/40.74MB
4f45af643b2b: Loading layer [==================================================>] 6.656kB/6.656kB
54a84094f024: Loading layer [==================================================>] 2.048kB/2.048kB
2d78cf8a687b: Loading layer [==================================================>] 7.68kB/7.68kB
e96067b83a72: Loading layer [==================================================>] 2.56kB/2.56kB
38a7d304147f: Loading layer [==================================================>] 2.56kB/2.56kB
a36c0cb6a35a: Loading layer [==================================================>] 2.56kB/2.56kB
Loaded image: goharbor/harbor-db:v1.7.1
b0c31ad64c85: Loading layer [==================================================>] 65.01MB/65.01MB
22fbab41769e: Loading layer [==================================================>] 3.072kB/3.072kB
7f28bf5373b2: Loading layer [==================================================>] 59.9kB/59.9kB
abb9969cff2a: Loading layer [==================================================>] 61.95kB/61.95kB
Loaded image: goharbor/redis-photon:v1.7.1
933cd9a15fc5: Loading layer [==================================================>] 3.39MB/3.39MB
Loaded image: goharbor/nginx-photon:v1.7.1
6ee16a137af2: Loading layer [==================================================>] 8.955MB/8.955MB
954443cb7d20: Loading layer [==================================================>] 22.8MB/22.8MB
302a998137db: Loading layer [==================================================>] 3.072kB/3.072kB
e342723aef9b: Loading layer [==================================================>] 7.465MB/7.465MB
4eeb61ed730b: Loading layer [==================================================>] 30.26MB/30.26MB
Loaded image: goharbor/harbor-registryctl:v1.7.1
5b40d957fafd: Loading layer [==================================================>] 12.11MB/12.11MB
63489681dd6c: Loading layer [==================================================>] 17.3MB/17.3MB
696209dcd336: Loading layer [==================================================>] 11.26kB/11.26kB
8dc53997aa1f: Loading layer [==================================================>] 3.072kB/3.072kB
cb6d560a9958: Loading layer [==================================================>] 29.41MB/29.41MB
Loaded image: goharbor/notary-signer-photon:v0.6.1-v1.7.1
dc1e16790c89: Loading layer [==================================================>] 8.96MB/8.96MB
046c7e7a0100: Loading layer [==================================================>] 35.08MB/35.08MB
8c8428e3d6c6: Loading layer [==================================================>] 2.048kB/2.048kB
ebb477ee35a2: Loading layer [==================================================>] 3.072kB/3.072kB
19636f39e29d: Loading layer [==================================================>] 35.08MB/35.08MB
Loaded image: goharbor/chartmuseum-photon:v0.7.1-v1.7.1
[Step 2]: preparing environment ...
Clearing the configuration file: ./common/config/core/app.conf
Clearing the configuration file: ./common/config/core/private_key.pem
Clearing the configuration file: ./common/config/core/env
Clearing the configuration file: ./common/config/db/env
Clearing the configuration file: ./common/config/registryctl/env
Clearing the configuration file: ./common/config/registryctl/config.yml
Clearing the configuration file: ./common/config/adminserver/env
Clearing the configuration file: ./common/config/jobservice/env
Clearing the configuration file: ./common/config/jobservice/config.yml
Clearing the configuration file: ./common/config/registry/root.crt
Clearing the configuration file: ./common/config/registry/config.yml
Clearing the configuration file: ./common/config/nginx/nginx.conf
Clearing the configuration file: ./common/config/log/logrotate.conf
loaded secret from file: /data/secretkey
Generated configuration file: ./common/config/nginx/nginx.conf
Generated configuration file: ./common/config/adminserver/env
Generated configuration file: ./common/config/core/env
Generated configuration file: ./common/config/registry/config.yml
Generated configuration file: ./common/config/db/env
Generated configuration file: ./common/config/jobservice/env
Generated configuration file: ./common/config/jobservice/config.yml
Generated configuration file: ./common/config/log/logrotate.conf
Generated configuration file: ./common/config/registryctl/env
Generated configuration file: ./common/config/core/app.conf
Generated certificate, key file: ./common/config/core/private_key.pem, cert file: ./common/config/registry/root.crt
The configuration files are ready, please use docker-compose to start the service.
[Step 3]: checking existing instance of Harbor ...
[Step 4]: starting Harbor ...
Creating network "harbor_harbor" with the default driver
Creating harbor-log ... done
Creating harbor-adminserver ... done
Creating registry ... done
Creating harbor-db ... done
Creating redis ... done
Creating registryctl ... done
Creating harbor-core ... done
Creating harbor-portal ... done
Creating harbor-jobservice ... done
Creating nginx ... done
✔ ----Harbor has been installed and started successfully.----
Now you should be able to visit the admin portal at http://172.19.212.198.
For more details, please visit https://github.com/goharbor/harbor .
[root@harbor01 harbor]#
访问Harbor门户

fac38387f616abe16854459807efee35.png

3815cd5f543518a3afb72d4613310861.png


管理Harbor
停止harbor
#cd /usr/local/harbor
#sudo docker-compose stop 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
启动harbor
#cd /usr/local/harbor
#docker-compose start Starting log ... done Starting adminserver ... done Starting registry ... done Starting ui ... done Starting mysql ... done Starting jobservice ... done Starting proxy ... done
查看harbor状态
docker-compose ps Name Command State Ports ------------------------------------------------------------------------------------------------------------------------------ harbor-adminserver /harbor/start.sh Up harbor-db /usr/local/bin/docker-entr ... Up 3306/tcp harbor-jobservice /harbor/start.sh Up harbor-log /bin/sh -c /usr/local/bin/ ... Up 127.0.0.1:1514->10514/tcp harbor-ui /harbor/start.sh Up nginx nginx -g daemon off; Up 0.0.0.0:443->443/tcp, 0.0.0.0:4443->4443/tcp, 0.0.0.0:80->80/tcp registry /entrypoint.sh serve /etc/ ... Up 5000/tcp
更改harbor的配置
# docker-compose down -v # vim harbor.cfg # ./prepare # docker-compose up -d
删除Harbor 的容器,同时保留图像数据和Harbor的数据库文件在文件系统上
# docker-compose down -v
删除Harbor 的数据库和图像数据(为了干净的重新安装)
# rm -rf /data/database
# rm -rf /data/registry为项目添加镜像
登陆本地私有registrydocker login -u admin -p xxxxxx 172.19.212.198 Error response from daemon: Get https://172.19.212.198 /v2/: dial tcp 172.19.212.198
使用docker login命令登录时报错了,这是因为默认情况下,docker对registry的操作是基于https协议的,而Harbor默认是以http协议访问的>.
其实在harbor官方安装配置文档中,就有下面一段做了说明:IMPORTANT: The default installation of Harbor uses HTTP - as such, you will need to add the option --insecure-registry to your client's Docker daemon and restart the Docker service.重要信息: Harbor的默认安装使用HTTP – 因此,您需要将该选项添加--insecure-registry到客户端的Docker守护程序中,然后重新启动Docker服务。
添加insecure-registry选项
我们去Docker守护进程中(/etc/docker/daemon.json ,CentOS7下没有这个文件,需要手动创建)添加 –insecure-registry 参数#vim /etc/docker/daemon.json#cat /etc/docker/daemon.json{ "insecure-registries":["172.19.212.198"] }
重启docker
#systemctl restart docker
重启harbor
#cd /usr/local/harbor
#docker-compose stop 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
#cd /usr/local/harbor
#docker-compose start Starting log ... done Starting adminserver ... done Starting registry ... done Starting ui ... done Starting mysql ... done Starting jobservice ... done Starting proxy ... done
登录成功
#docker login -u admin -p xxxxxx 172.19.212.198 Login Succeeded
上传镜像
给镜像打tag
#docker tag repository:tag hostname:port/projectname/repository:tag
以hello-world镜像为例#docker tag hello-world 192.168.2.200/shdk_01/hello-world:test
#docker images | grep hello-world 192.168.2.200/library/hello-world test f2a91732366c 3 months ago 1.85kB hello-world latest f2a91732366c
上传镜像docker push 172.19.212.198/library/hello-world:test
The push refers to a repository [172.19.212.198/library/hello-world] f999ae22f308: Layer already exists test: digest: sha256:8072a54ebb3bc136150e2f2860f00a7bf45f13eeb917cca2430fcd0054c8e51b size: 524 docker push 172.19.212.198/library/harbor-log:test The push refers to a repository [172.19.212.198/library/harbor-log] a84e69fb619b: Layer already exists 058531639e75: Layer already exists da2a19f80b81: Layer already exists 1864f9818562: Layer already exists 95aed61ca251: Layer already exists dd4753242e59: Layer already exists 651f69aef02c: Layer already exists test: digest: sha256:6b7e914eadc358c17929b0e7230ea951e5962441485e85c7245d2b25b601743a
在Harbor门户在管理镜像

f55e1ca2b620677d5cff9b5163e1a900.png


拉取镜像
docker rmi 172.19.212.198/library/harbor-log:test Untagged: 172.19.212.198/library/harbor-log:test Untagged: 172.19.212.198/library/harbor-log@sha256:6b7e914eadc358c17929b0e7230ea951e5962441485e85c7245d2b25b601743a docker pull 172.19.212.198/library/harbor-log:test test: Pulling from library/harbor-log Digest: sha256:6b7e914eadc358c17929b0e7230ea951e5962441485e85c7245d2b25b601743a Status: Downloaded newer image for 172.19.212.198/library/harbor-log:test docker images | grep harbor-log
172.19.212.198
vmware/harbor-log v1.4.0 9e818c7a27ab

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值