Harbor企业镜像仓库部署

目录

1、案例概述

2、什么是 Harbor 

3、Harbor 架构构成 

4、案例环境

5、部署harbor环境

安装docker-ce(所有主机)

阿里云镜像加速器

部署Docker Compose 服务

部署 Harbor 服务 

启动并安装 Harbor 

创建一个新项目

6、客户端上传镜像 

7、Harbor 日常操作管理 

1、通过 Harbor Web 创建项目 

2、创建 Harbor 用户 

3、管理 Harbor 


1、案例概述

        Docker 官方镜像仓库是用于管理公共镜像的地方,大家可以在上面找到想要的镜像,也可以把自己的镜像推送上去。但是有时候服务器无法访问互联网,或者不希望将自己的镜像放到互联网上,那么就需要用到 Docker Registry 私有仓库,它可以用来存储和管理自己的镜像。最近公司将项目全部打包成镜像有部署私有仓库服务的需求,经过几轮商讨,最终选择 Docker Harbor,Docker Harbor 有可视化的 Web 管理界面可以方便管理Docker 镜像操作也很方便简单,又提供了多个项目的镜像权限管理控制功能等。

2、什么是 Harbor 

        Harbor 是 VMware 公司开源的企业级 Docker Registry 项目,其目标是帮助用户迅速搭建一个企业级的 Docker Registry 仓库服务。它以Docker公司开源的Registry为基础,提供了管理 UI。基于角色的访问控制(Role Based AccessControl)、AD/LDAP集成、以及审计日志 (Auditlogging) 等企业用户需求的功能。通过添加一些企业必需的功能特性,例如安全、标识和管理等,扩展了开源Docker Distribution。作为一个企业级私有Registry服务器,Harbor提供了更好的性能和安全,以提升用户使用 Registry 构建和运行环境传输镜像的效率。

Harbor 的优势

  1. 基于角色控制:用户和仓库都是基于项目进行组织的,而用户基于项目可以拥有不同的权限。
  2. 基于镜像的复制策略: 镜像可以在多个 Harbor 实例之间进行复制(同步)。适用于负载平衡、高可用性、多数据中心、混合和多云场景。
  3. 支持 LDAP / AD:Harbor 与现有的企业 LDAP / ADA 集成,用于用户认证和管理。
  4. 图像删除和垃圾收集:镜像可以被删除,也可以回收镜像占用的空间。
  5. 图形 UI:用户可以轻松浏览、搜索镜像仓库以及对项目进行管理。
  6. 审计: 对存储库的所有操作都进行记录。
  7. RESTful API:用于大多数管理操作的 RESTful API,易于与外部系统集成。

3、Harbor 架构构成 

        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(Harbor-ui):提供图形化界面,帮助用户管理 Registry 上的镜像(image), 并对用户进行授权。
  2. Webhook:为了及时获取 registry 上image状态变化的情况,在Registry上配置webhook,把状态变化传递给UI模块。
  3. Token 服务:负责根据用户权限给每个Docker push/pull命令签发token.Docker客户端向 Regiøstry服务发起的请求,如果不包含token,会被重定向到这里,获得token后再重新向 Registry进行请求。

        4、Database(Harbor-db):为 core services 提供数据库服务,负责储存用户权限、审计日志、Docker image 分组信息等数据。

        5、Log collector(Harbor-log):为了帮助监控 Harbor 运行,负责收集其他组件的log,供日后进行分析。

 

 

         Harbor的每个组件都是以Docker容器的形式构建的,因此,使用Docker Compose 来 对它进行部署。在源代码中(https://github.com/vmware/Harbor), 用于部署Harbor的Docker Compose 模板位于 Harbor/make/docker-compose.tpl。

4、案例环境

主机规划

操作系统

主机名

IP地址

软件

CentOS7.x

master

192.168.2.118

docker-ce、docker-compose、Harbor-offline

CentOS7.x

slave

192.168.2.117

docker-ce、docker-compose、Harbor-offline

CentOS7.x

ldns-nfs

192.168.2.116

docker-ce、mysql、redis、postgres 、nfs、bind

 拓扑图

 

架构隐患:

  1. NFS有单点问题
  2. 镜像太多导致占用大量的磁盘空间及镜像访问时磁盘IO过大

解决方案:

               1、 NFS做成高可用NFS+DRBD+Heartbeat

               2、 存储使用分布式文件系统(GlusterFS)

               3、Harbor支持主从复制(双向)+Keepalived

 

5、部署harbor环境

安装docker-ce(所有主机)

​
[root@localhost ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo[root@localhost ~]# yum -y install yum-utils device-mapper-persistent-data lvm2[root@localhost ~]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo[root@localhost ~]# ls /etc/yum.repos.d/backup  Centos-aliyun.repo  CentOS-Media.repo  docker-ce.repo[root@localhost ~]# yum -y install docker-ce[root@localhost ~]# systemctl start docker[root@localhost ~]# systemctl enable docker​

阿里云镜像加速器

阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台欢迎登录阿里云,全球领先的云计算及人工智能科技公司,阿里云为200多个国家和地区的企业、开发者和政府机构提供云计算基础服务及解决方案。阿里云云计算、安全、大数据、人工智能、企业应用、物联网等云计算服务。https://cr.console.aliyun.com/

 

 

[root@localhost ~]# cat << END > /etc/docker/daemon.json{"registry-mirrors":[ "https://nyakyfun.mirror.aliyuncs.com" ]
}
END[root@localhost ~]# systemctl daemon-reload[root@localhost ~]# systemctl restart docker[root@localhost ~]# docker versionClient: Docker Engine - CommunityVersion:           19.03.8API version:       1.40Go version:        go1.12.17Git commit:        afacb8bBuilt:             Wed Mar 11 01:27:04 2020OS/Arch:           linux/amd64Experimental:      falseServer: Docker Engine - CommunityEngine:Version:          19.03.8API version:      1.40 (minimum version 1.12)Go version:       go1.12.17Git commit:       afacb8bBuilt:            Wed Mar 11 01:25:42 2020OS/Arch:          linux/amd64Experimental:     falsecontainerd:Version:          1.2.13GitCommit:        7ad184331fa3e55e52b890ea95e65ba581ae3429runc:Version:          1.0.0-rc10GitCommit:        dc9208a3303feef5b3839f4323d9beb36df0a9dddocker-init:Version:          0.18.0GitCommit:        fec3683

部署Docker Compose 服务

Docker-Compose提取链接:https://pan.baidu.com/s/1QBi4pzSC-4S1QtUAW1pfmw?pwd=dovj 
提取码:dovj

上传Docker-Compose(两台harbor主机)

[root@master ~]# rz -E
rz waiting to receive.[root@master ~]# mv docker-compose /usr/local/bin/[root@master ~]# chmod +x /usr/local/bin/docker-compose

 查看 Docker-Compose 版本判断安装是否成功

[root@master ~]# docker-compose --version
docker-compose version 1.21.1, build 5a3f1a3

部署 Harbor 服务 

Harbor 被部署为多个 Docker 容器,因此可以部署在任何支持 Docker 的 Linux 发行版上。目标主机需要安装 Python、Docker 和 Docker Compose。

Harbor提取链接:https://pan.baidu.com/s/1VoNjocGt_ho7CJRL1DVsPQ?pwd=q8xu 
提取码:q8xu

上传Harbor 安装程序(两台harbor主机)

[root@master ~]# rz -E
rz waiting to receive.[root@master ~]# tar xf harbor-offline-installer-v1.6.1.tgz [root@master ~]# mv harbor/ /usr/local/

配置 Harbor 参数文件  

配置参数位于文件/usr/local/harbor/harbor.cfg 中。安装之前需要修改IP地址。

[root@master ~]# vim /usr/local/harbor/harbor.cfg7     hostname = 192.168.2.118

 

关于 Harbor.cfg 配置文件中有两类参数,所需参数和可选参数

              1、所需参数:这些参数需要在配置文件 Harbor.cfg 中设置。如果用户更新它们并运行 install.sh 脚本重新安装 Harbor,参数将生效。具体参数如下:

  • hostname:用于访问用户界面和 register 服务。它应该是目标机器的 IP 地址或完全限定的域名(FQDN),例如 192.168.200.111或 www.crushlinux.com。不要使用 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.cfg 将被忽略。

注意:如果选择通过 UI 设置这些参数,请确保在启动 Harbour 后立即执行此操作。具体来说,必须在注册或在 Harbor 中创建任何新用户之前设置所需的 auth_mode。当系统中有用户时(除了默认的 admin 用户), auth_mode 不能被修改。具体参数如下:

  • 电子邮件设置: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 用户创建,只有管理员用户可以在 Harbour 中创建新用户。注意:当 auth_mode 设置为 ldap_auth 时,自注册功能将始终处于禁用状态,并且该标志被忽略。
  • token_expiration:由令牌服务创建的令牌的到期时间(分钟),默认为 30 分钟。
  • project_creation_restriction:用于控制哪些用户有权创建项目的标志。默认情况下,每个人都可以创建一个项目。如果将其值设置为“adminonly”,那么只有admin 可以创建项目。
  • verify_remote_cert:打开或关闭,默认打开。此标志决定了当 Harbour 与远程register 实例通信时是否验证 SSL/TLS 证书。将此属性设置为 off 将绕过 SSL/TLS验证,这在远程实例具有自签名或不可信证书时经常使用。

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

启动并安装 Harbor 

配置完成就可以启动 Harbor 了,如下操作:

[root@master ~]# sh /usr/local/harbor/install.sh

查看 Harbor 启动镜像

[root@master ~]# cd /usr/local/harbor/[root@master harbor]# docker-compose psName                  Command              State                Ports         
-------------------------------------------------------------------------------------
harbor-adminserver   /harbor/start.sh          Up (healthy)                          
harbor-db            /entrypoint.sh postgres   Up (healthy)   5432/tcp               
harbor-jobservice    /harbor/start.sh          Up                                    
harbor-log           /bin/sh -c                Up (healthy)   127.0.0.1:1514->10514/t/usr/local/bin/ ...                      cp                     
harbor-ui            /harbor/start.sh          Up (healthy)                          
nginx                nginx -g daemon off;      Up (healthy)   0.0.0.0:443->443/tcp,:::443->443/tcp, 0.0.0.0:4443->4443/tcp,:::4443->4443/tcp, 0.0.0.0:80->80/tcp,:::80->80/tcp   
redis                docker-entrypoint.sh      Up             6379/tcp               redis ...                                                       
registry             /entrypoint.sh            Up (healthy)   5000/tcp               /etc/regist ...                                                 

如果一切都正常,应该可以打开浏览器访问 http://192.168.2.118的管理页面,默认的管理员用户名和密码是 admin/Harbor12345。

 

 

至此, Harbor已经搭建完成,具体在WEB UI下面操作也是非常的简单,只有几个选项。

创建一个新项目

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

 

 2)填写项目名称为“myproject-crushlinux”。

 3)点击“确定”按钮,成功创建

 

4)可以使用 Docker 命令在Harbor本地通过 127.0.0.1 来登录和推送镜像了。默认情况下, Register 服务器在端口 80 上侦听。

5)登录 Harbor

[root@master ~]# docker login -u admin -p Harbor12345 http://127.0.0.1WARNING! 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-storeLogin Succeeded

6)下载体积小点的镜像进行测试。

[root@master ~]# docker pull cirrosUsing default tag: latest
latest: Pulling from library/cirros
d0b405be7a32: Pull complete 
bd054094a037: Pull complete 
c6a00de1ec8a: Pull complete 
Digest: sha256:1e695eb2772a2b511ccab70091962d1efb9501fdca804eb1d52d21c0933e7f47
Status: Downloaded newer image for cirros:latest
docker.io/library/cirros:latest

7)镜像打 tag。

[root@master ~]# docker tag cirros 127.0.0.1/myproject-crushlinux/cirros:v1

8)上传镜像到 Harbor。

[root@master ~]# docker push 127.0.0.1/myproject-crushlinux/cirros:v1The push refers to repository [127.0.0.1/myproject-crushlinux/cirros]
984ad441ec3d: Pushed 
f0a496d92efa: Pushed 
e52d19c3bee2: Pushed 
v1: digest: sha256:483f15ac97d03dc3d4dcf79cf71ded2e099cf76c340f3fdd0b3670a40a198a22 size: 943

9)在 Harbor 界面 myproject-crushlinux目录下就可以看见这个镜像,以及这个镜像的一些信息。

 

 

6、客户端上传镜像 

        以上操作都是在master 服务器本地操作,如果其他客户端上传镜像到 Harbor,就会报如下错误。出现这问题的原因是 Docker 自从 1.3.X 之后 Docker Registry 交互默认使用的是 HTTPS,但是搭建私有镜像默认使用的是 HTTP 服务,所以与私有镜像交互时出现以下错误。

 

[root@dns-nfs ~]# docker login -u admin -p Harbor12345 http://192.168.2.118WARNING! Using --password via the CLI is insecure. Use --password-stdin.
Error response from daemon: Get "https://192.168.2.118/v2/": dial tcp 192.168.2.118:443: connect: connection refused

1) 在 Docker 客户端配置操作如下:

解决办法是:在 Docker server 启动的时候,增加启动参数,默认使用 HTTP 访问

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

 2)重启 Docker,再次登录

[root@dns-nfs ~]# systemctl daemon-reload
[root@dns-nfs ~]# systemctl restart docker 

 3)再次登录 Harbor

[root@dns-nfs ~]# docker login -u admin -p Harbor12345 192.168.2.118WARNING! 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-storeLogin Succeeded

4)下载体积小一点的镜像进行测试

[root@dns-nfs ~]# docker pull cirrosUsing default tag: latest
latest: Pulling from library/cirros
d0b405be7a32: Pull complete 
bd054094a037: Pull complete 
c6a00de1ec8a: Pull complete 
Digest: sha256:1e695eb2772a2b511ccab70091962d1efb9501fdca804eb1d52d21c0933e7f47
Status: Downloaded newer image for cirros:latest
docker.io/library/cirros:latest

5)镜像打标签及上传到 myproject-crushlinux 项目里面

[root@dns-nfs ~]# docker tag cirros 192.168.2.118/myproject-crushlinux/cirros:v2[root@dns-nfs ~]# docker push 192.168.2.118/myproject-crushlinux/cirros:v2The push refers to repository [192.168.2.118/myproject-crushlinux/cirros]
984ad441ec3d: Layer already exists 
f0a496d92efa: Layer already exists 
e52d19c3bee2: Layer already exists 
v2: digest: sha256:483f15ac97d03dc3d4dcf79cf71ded2e099cf76c340f3fdd0b3670a40a198a22 size: 943

6)查看 Harbor 的 web 管理界面,myproject-crushlinux 项目里面有两个镜像。

 

7、Harbor 日常操作管理 

1、通过 Harbor Web 创建项目 

点击“+项目”时按规范填写项目名称。项目级别:私有即不勾选(勾选后会变为"公开")。如果设置为公共仓库,则所有人对此项目下的镜像拥有读权限,命令行中不需要执行"Docker login"即可下载镜像,镜像操作与Docker hub 一致。

2、创建 Harbor 用户 

1)创建用户并分配权限

系统管理->用户管理->创建用户,填写用户名为“crushlinux-user01”,邮箱为 crushlinux-user01@crushlinux.cn,全名为“harbor admin”,密码为“A123a456”,注释为“管理员”。

 

 

 

 

2)添加项目成员

项目-> myproject-crushlinux->成员->+成员,填写上述创建的用户并分配角色为“项目管理员”。

 ​​​​​​​

 

 

 可对成员角色进行变更或者删除操作。

 

3)在客户端上用普通账户镜像操作

(1)删除上述打标签的本地镜像.

[root@dns-nfs ~]# docker rmi 192.168.2.118/myproject-crushlinux/cirros:v2 Untagged: 192.168.2.118/myproject-crushlinux/cirros:v2
Untagged: 192.168.2.118/myproject-crushlinux/cirros@sha256:483f15ac97d03dc3d4dcf79cf71ded2e099cf76c340f3fdd0b3670a40a198a22[root@dns-nfs ~]# docker imagesREPOSITORY   TAG       IMAGE ID       CREATED       SIZE
cirros       latest    f9cae1daf5f6   2 years ago   12.6MB

(2)首先退出当前用户,然后使用上述创建的账户crushlinux-user01 登录。

[root@dns-nfs ~]# docker logout 192.168.2.118Removing login credentials for 192.168.2.118[root@dns-nfs ~]# docker login 192.168.2.118Username: crushlinux-user01
Password: A123a456
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-storeLogin Succeeded

(3)下载 192.168.2.118/myproject-kgc/cirros 标签为 v1 的镜像。

[root@dns-nfs ~]# docker pull 192.168.2.118/myproject-crushlinux/cirros:v1v1: Pulling from myproject-crushlinux/cirros
Digest: sha256:483f15ac97d03dc3d4dcf79cf71ded2e099cf76c340f3fdd0b3670a40a198a22
Status: Downloaded newer image for 192.168.2.118/myproject-crushlinux/cirros:v1
192.168.2.118/myproject-crushlinux/cirros:v1[root@dns-nfs ~]# docker imagesREPOSITORY                                  TAG       IMAGE ID       CREATED       SIZE
192.168.2.118/myproject-crushlinux/cirros   v1        f9cae1daf5f6   2 years ago   12.6MB
cirros                                      latest    f9cae1daf5f6   2 years ago   12.6MB

4查看日志

Web 界面日志,操作日志按时间顺序记录用户相关操作。

 

3、管理 Harbor 

可以使用 docker-compose来管理Harbor。一些有用的命令如下所示(必须在与docker-compose.yml 相同的目录中运行)。

1、停止/启动/重启 Harbor

[root@master harbor]# docker-compose stop[root@master harbor]# docker-compose startStarting log         ... done
Starting registry    ... done
Starting postgresql  ... done
Starting adminserver ... done
Starting ui          ... done
Starting redis       ... done
Starting jobservice  ... done
Starting proxy       ... done[root@master harbor]# docker-compose restartRestarting nginx              ... done
Restarting harbor-jobservice  ... done
Restarting harbor-ui          ... done
Restarting registry           ... done
Restarting harbor-db          ... done
Restarting harbor-adminserver ... done
Restarting redis              ... done
Restarting harbor-log         ... done

2、修改 Harbor.cfg 配置文件

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

[root@master harbor]# docker-compose down -vStopping nginx              ... done
Stopping harbor-jobservice  ... done
Stopping harbor-ui          ... done
Stopping registry           ... done
Stopping harbor-db          ... done
Stopping harbor-adminserver ... done
Stopping redis              ... done
Stopping harbor-log         ... done
Removing nginx              ... done
Removing harbor-jobservice  ... done
Removing harbor-ui          ... done
Removing registry           ... done
Removing harbor-db          ... done
Removing harbor-adminserver ... done
Removing redis              ... done
Removing harbor-log         ... done
Removing network harbor_harbor[root@master harbor]# vim harbor.cfg [root@master harbor]# ./prepare Clearing the configuration file: ./common/config/adminserver/env
Clearing the configuration file: ./common/config/ui/env
Clearing the configuration file: ./common/config/ui/app.conf
Clearing the configuration file: ./common/config/ui/private_key.pem
Clearing the configuration file: ./common/config/db/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/config.yml
Clearing the configuration file: ./common/config/registry/root.crt
Clearing the configuration file: ./common/config/registryctl/env
Clearing the configuration file: ./common/config/registryctl/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/ui/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/ui/app.conf
Generated certificate, key file: ./common/config/ui/private_key.pem, cert file: ./common/config/registry/root.crt
The configuration files are ready, please use docker-compose to start the service.[root@master harbor]# docker-compose up -dCreating network "harbor_harbor" with the default driver
Creating harbor-log ... done
Creating harbor-db          ... done
Creating registry           ... done
Creating redis              ... done
Creating harbor-adminserver ... done
Creating harbor-ui          ... done
Creating harbor-jobservice  ... done
Creating nginx              ... done

3、移除 Harbor 服务容器同时保留镜像数据/数据库

[root@master harbor]# docker-compose down -vStopping harbor-jobservice  ... done
Stopping nginx              ... done
Stopping harbor-ui          ... done
Stopping harbor-adminserver ... done
Stopping redis              ... done
Stopping registry           ... done
Stopping harbor-db          ... done
Stopping harbor-log         ... done
Removing harbor-jobservice  ... done
Removing nginx              ... done
Removing harbor-ui          ... done
Removing harbor-adminserver ... done
Removing redis              ... done
Removing registry           ... done
Removing harbor-db          ... done
Removing harbor-log         ... done
Removing network harbor_harbor

4、移除 Harbor 服务容器全部数据(重新部署时采用)

持久数据,如镜像,数据库等在宿主机的/data/目录下,日志在宿主机的

/var/log/Harbor/目录下

[root@master harbor]#  rm -rf /data/database 
[root@master harbor]#  rm -rf /data/registry

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

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

相关文章

Blender如何给fbx模型添加材质贴图并导出带有材质贴图的模型

推荐&#xff1a;使用 NSDT场景编辑器快速助你搭建可二次编辑的3D应用场景 此教程适合新手用户&#xff0c;专业人士直接可直接绕路。 本教程中介绍了利用Blender建模软件&#xff0c;只需要简单几步就可以为模型添加材质贴&#xff0c;图&#xff0c;并且导出带有材质的模型文…

法律监督大数据平台有什么作用?

大数据赋能时代法律监督&#xff0c;构建法律行业领域大数据监督模型。法律监督大数据研判系统助力检察机关以社会公正为核心价值追求&#xff0c;对执法不严、司法不公“零容忍”&#xff0c;强化对诉讼活动的法律监督&#xff0c;坚决维护法律尊严&#xff0c;坚决捍卫公平正…

一、Kubernetes介绍与集群架构

Kubernetes介绍与集群架构 一、认识容器编排工具 docker machine 主要用于准备docker host现已弃用建议使用docker desktop docker compose Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。使用 Compose&#xff0c;您可以使用 YAML 文件来配置应用程序的服务。…

Redis-简单动态字符串(SDS)

文章目录 文章概要SDS数据结构定义SDS和C字符串的区别总结参考 文章概要 本篇文章&#xff0c;我们来学习Redis字符串的编码格式SDS编码&#xff0c;文章将将从以下几个方面介绍SDS&#xff1a; SDS的底层数据结构定义Redis是C写的&#xff0c;那SDS和C中的字符串的区别是什么…

f1tenth仿真设置

文章目录 一、安装依赖二、进入工作空间克隆三、编译四、运行 一、安装依赖 tf2_geometry_msgs ackermann_msgs joy map_server sudo apt-get install ros-noetic-tf2-geometry-msgs ros-noetic-ackermann-msgs ros-melodic-joy ros-noetic-map-server 二、进入工作空间克隆…

爬虫018_urllib库_cookie反爬_post请求百度翻译获取百分翻译内容_以及详细翻译内容---python工作笔记037

然后我们来看如何用urllib发送post请求,这里我们 用百度翻译为例 我们翻译一个spider,然后我们看请求,可以看到有很多 找到sug这个 可以看到这里的form data,就是post请求体中的内容 然后我们点击preview其实就是 返回的实际内容 然后请求方式用的post 然后我们把上面的信息…

php代码审计,php漏洞详解

文章目录 1、输入验证和输出显示2、命令注入(Command Injection)3、eval 注入(Eval Injection)4、跨网站脚本攻击(Cross Site Scripting, XSS)5、SQL 注入攻击(SQL injection)6、跨网站请求伪造攻击(Cross Site Request Forgeries, CSRF)7、Session 会话劫持(Session Hijacking…

Centos7.9_解决每次重启机器配置的java环境变量都需要重新source /etc/profile才生效的问题---Linux工作笔记060

这种情况需要把环境变量,java的环境变量在/root/.bashrc文件中也放一份,注意这个文件是隐藏的,默认是,需要进行ls -a才能显示. #jdk export JAVA_HOME/lib/jvm export JRE_HOME${JAVA_HOME}/jre export CLASSPATH.:${JAVA_HOME}/lib:${JRE_HOME}/lib export PATH${JAVA_HOME}/b…

maven Jar包反向install到本地仓库

maven Jar包反向install到本地仓库 需求实现 需求 项目打包时报错&#xff0c;缺少一个jar包。 但是在maven仓库都找不到此jar包&#xff0c;其他人提供了这个jar包。 需要把这个jar包install到本地仓库&#xff0c;使项目能正常打包运行。 实现 使用git bash命令执行以下脚…

详解如何计算字符中的字节数

文章目录 字符概念转义 进制的表示前缀区分后缀区分 什么是ASCII产生表述局限性字节计算 什么是Unicode编码方式UCS-2UCS-4 实现方式UTF的字节序和BOM字节计算 JavaScript中使用字符字符使用缺陷规避字符使用缺陷 MIME 编码Base64编码字节计算QP(Quote-Printable) 总结 字符概念…

C++笔记之将定时器加入向量并设置定时器的ID为i

C笔记之将定时器加入向量并设置定时器的ID为i code review! 文章目录 C笔记之将定时器加入向量并设置定时器的ID为i关于代码中的void operator()() 运行 代码 #include <chrono> #include <iostream> #include <thread> #include <vector>// 定义定时…