Docker仓库之分布式Harbor

1.Harbor的介绍

1.Docker registry和Harbor的区别

Habor是由VMWare公司开源的容器镜像仓库。事实上,Habor是在Docker Registry上进行了相应的企业级扩展(也就是二次开发,底层是Registry),从而获得了更加广泛的应用,这些新的企业级特性包括:管理用户界面,基于角色的访问控制 ,AD/LDAP集成以及审计日志等。
容器的核心在于镜象的概念,由于可以将应用打包成镜像,并快速的启动和停止,因此容器成为新的炙手可热的基础设施CAAS,并为敏捷和持续交付包括DevOps提供底层的支持。

总结:Harbor以Docker公司开源的registry为基础,额外提供了如下功能:

->  基于角色的访问控制(Role Based Access Control)
->  基于策略的镜像复制(Policy based image replication)

->  镜像的漏洞扫描(Vulnerability Scanning)
->  AD/LDAP集成(LDAP/AD support)

->  镜像的删除和空间清理(Image deletion & garbage collection)
->  友好的管理UI(Graphical user portal)

->  审计日志(Audit logging)
->  RESTful API (可以理解成公共的标准接口)
->  部署简单(Easy deployment)

Harbor的所有组件都在Dcoker中部署,所以Harbor可使用Docker Compose快速部署。需要特别注意:由于Harbor是基于Docker Registry V2版本,所以docker必须大于等于1.10.0版本docker-compose必须要大于1.6.0版本

2.Harbor仓库结构

Harbor的每个组件都是以Docker容器的形式构建的,可以使用Docker Compose来进行部署。如果环境中使用了kubernetes,Harbor也提供了kubernetes的配置文件。Harbor大概需要以下几个容器组成

ui(Harbor的核心服务)、

log(运行着rsyslog的容器,进行日志收集)、

mysql(由官方mysql镜像构成的数据库容器)、

Nginx(使用Nginx做反向代理)、

registry(官方的Docker registry)、

adminserver(Harbor的配置数据管理器)、

jobservice(Harbor的任务管理服务)、

redis(用于存储session)。

Harbor依赖的外部组件

-> Nginx(即Proxy代理层) Nginx前端代理,主要用于分发前端页面ui访问和镜像上传和下载流量; Harbor的registry,UI,token等服务,通过一个前置的反向代理统一接收浏览器、Docker客户端的请求,并将请求转发给后端不同的服务。

 -> Registry v2: 镜像仓库,负责存储镜像文件; Docker官方镜像仓库, 负责储存Docker镜像,并处理docker push/pull命令。由于我们要对用户进行访问控制,即不同用户对Docker image有不同的读写权限,Registry会指向一个token服务,强制用户的每次docker pull/push请求都要携带一个合法的token, Registry会通过公钥对token进行解密验证。
-> Database(MySQL或Postgresql)为core services提供数据库服务,负责储存用户权限、审计日志、Docker image分组信息等数据。

Harbor自有组件

-> Core services(Admin Server): 这是Harbor的核心功能,主要提供以下服务:

         -> UI:提供图形化界面,帮助用户管理registry上的镜像(image), 并对用户进行授权。

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

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

         -> API: 提供Harbor RESTful API(一种统一发规范化请求接口)

-> Replication Job Service:提供多个 Harbor 实例之间的镜像同步功能。

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

Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器,通过上面的自有组件介绍,下面的结构还是比较清楚了。

 再来仔细看下Harbor主要组件和数据流走向:

 

-> proxy,它是一个nginx前端代理,主要是分发前端页面ui访问和镜像上传和下载流量,上图中通过深蓝色先标识;
-> ui提供了一个web管理页面,当然还包括了一个前端页面和后端API,底层使用mysql数据库;
-> registry是镜像仓库,负责存储镜像文件,当镜像上传完毕后通过hook通知ui创建repository,上图通过红色线标识,当然registry的token认证也是通过ui组件完成;
-> adminserver是系统的配置管理中心附带检查存储用量,ui和jobserver启动时候回需要加载adminserver的配置,通过灰色线标识;
-> jobsevice是负责镜像复制工作的,他和registry通信,从一个registry pull镜像然后push到另一个registry,并记录job_log,上图通过紫色线标识;
-> log是日志汇总组件,通过docker的log-driver把日志汇总到一起,通过浅蓝色线条标识。

3.Harbor的误区

误区一: Harbor是负责存储容器镜像的 (Harbor是镜像仓库,那么它就应当是存储镜像的)
其实关于镜像的存储,Harbor使用的是官方的docker registry服务去完成,至于registry是用本地存储或者s3都是可以的,Harbor的功能是在此之上提供用户权限管理、镜像复制等功能,提高使用的registry的效率。

误区二:Harbor镜像复制是存储直接复制 (镜像的复制,很多人以为应该是镜像分层文件的直接拷贝)
其实Harbor镜像复制采用了一个更加通用、高屋建瓴的做法,通过docker registry 的API去拷贝,这不是省事,这种做法屏蔽了繁琐的底层文件操作、不仅可以利用现有docker registry功能不必重复造轮子,而且可以解决冲突和一致性的问题。

2.Harbor仓库环境的部署

1.建议配置

Harbor仓库部署的官方要求的最小系统配置
-> 2个cpu
-> 4g内存
-> 40g硬盘,因为是存储镜像的所以推荐硬盘大点。

2.环境要求和准备工作

Harbor以容器的形式进行部署, 因此可以被部署到任何支持Docker的Linux发行版, 要使用Harbor,需要安装docker和docker-compose编排工具,并且具备如下环境:
Python2.7+    (centos7自带的python版本就是2.7.5)
Docker Engine 1.10+
Docker Compose 1.6.0+
系统版本在Centos7.5以上
ip_forward路由转发功能要打开

Docker 18.09.1 及以上的版本,系统内核版本需要升级到4.4.x,原因如下

1)CentOS 7.x 系统自带的3.10.x内核存在一些Bugs,导致运行的Docker、Kubernetes不稳定。
2)高版本的 docker(1.13 以后) 启用了3.10 kernel实验支持的kernel memory account功能(无法关闭),当docker节点压力大 (如频繁启动和停止容器) 时会导致 cgroup memory leak;
3)Docker 18.09.1 及以上的版本,需要手动升级内核到 4.4.X 以上;

内核升级步骤如下:

[root@manager-node1 ~]# uname -r
3.10.0-957.el7.x86_64
#要在 CentOS 7 上启用 ELRepo 仓库,注意这里最好DNS用谷歌的。不然可能会报网络问题。
[root@manager-node1 ~]# rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm
#安装完成后检查 /boot/grub2/grub.cfg 中对应内核 menuentry 中是否包含 initrd16 配置,如果没有,再安装一次!
[root@manager-node1 ~]# cat /boot/grub2/grub.cfg |grep initrd16
    initrd16 /initramfs-3.10.0-1160.11.1.el7.x86_64.img
    initrd16 /initramfs-3.10.0-957.el7.x86_64.img
    initrd16 /initramfs-0-rescue-187831681d0c49d3b33d1629cd34429f.img
#这里需要注意的是,在 ELRepo 中有两个内核选项,一个是 kernel-lt(长期支持版本),一个是 kernel-ml(主线最新版本),采用长期支持版本(kernel-lt),更稳定一些
[root@manager-node1 ~]# yum --enablerepo=elrepo-kernel install -y kernel-lt
#设置开机从新内核启动
[root@manager-node1 ~]# grub2-set-default 0
#重启后检查。
[root@manager-node1 ~]# init 6
[root@manager-node1 ~]# uname -r
4.4.248-1.el7.elrepo.x86_64

docker和docker-compose的安装这里就不演示了,可以参考我其它文章。

环境的检查和补充

[root@manager-node1 ~]# cat /etc/redhat-release 
CentOS Linux release 7.6.1810 (Core) 
[root@manager-node1 ~]# uname -r
4.4.248-1.el7.elrepo.x86_64
#开启路由转发
[root@manager
-node1 ~]# echo 1 > /proc/sys/net/ipv4/ip_forward [root@manager-node1 ~]# vim /etc/sysctl.conf net.ipv4.ip_forward = 1 #关闭防火墙,并检查
[root@manager
-node1 ~]# systemctl stop firewalld && systemctl disable firewalld && firewall-cmd --state not running [root@manager-node1 ~]# vim /etc/sysconfig/selinux SELINUX=disabled [root@manager-node1 ~]# getenforce Disabled #检查python版本
[root@manager
-node1 ~]# python --version Python 2.7.5
#检查docker版本
[root@manager-node1 ~]# docker --version Docker version 20.10.1, build 831ebea
#检查docker-compose版本
[root@manager-node1 ~]# docker-compose --version
docker-compose version 1.27.4, build 40524192

3.HTTPS证书自签

如果线上环境有已购买好的HTTPS证书可以直接拿过来用,如果没有,就在Harbor本机进行HTTPS证书自签。这里Harbor本机ip地址是192.168.195.166

#生成CA证书私钥
[root@manager-node1 ~]# openssl genrsa -out ca.key 4096 #生成CA证书
[root@manager
-node1 ~]# openssl req -x509 -new -nodes -sha512 -days 3650 > -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=192.168.195.166" > -key ca.key > -out ca.crt
生成服务器证书
1.生成私钥
[root@manager
-node1 ~]# openssl genrsa -out 192.168.195.166.key 4096 2.生成证书签名请求(CSR)
[root@manager
-node1 ~]# openssl req -sha512 -new > -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=192.168.195.166" > -key 192.168.195.166.key > -out 192.168.195.166.csr 3.生成一个x509 v3扩展文件(两种方式根据情况二选一) #################################################################################### 第一种方式:域名 cat > v3.ext <<-EOF authorityKeyIdentifier=keyid,issuer basicConstraints=CA:FALSE keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment extendedKeyUsage = serverAuth subjectAltName = @alt_names [alt_names] DNS.1=172.16.60.238 DNS.2=yourdomain DNS.3=hostname EOF #################################################################################### 第二种方式:IP cat > v3.ext <<-EOF authorityKeyIdentifier=keyid,issuer basicConstraints=CA:FALSE keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment extendedKeyUsage = serverAuth subjectAltName = IP:172.16.60.238 EOF #################################################################################### #我们这里选择第二种的IP方式 [root@manager-node1 ~]# openssl req -sha512 -new > -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=192.168.195.166" > -key 192.168.195.166.key > -out 192.168.195.166.csr [root@manager-node1 ~]# cat > v3.ext <<-EOF > authorityKeyIdentifier=keyid,issuer > basicConstraints=CA:FALSE > keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment > extendedKeyUsage = serverAuth > subjectAltName = IP:192.168.195.166 > EOF 4.使用该v3.ext文件为您的Harbor主机生成证书 [root@manager-node1 ~]# openssl x509 -req -sha512 -days 3650 > -extfile v3.ext > -CA ca.crt -CAkey ca.key -CAcreateserial > -in 192.168.195.166.csr > -out 192.168.195.166.crt Signature ok subject=/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=192.168.195.166 Getting CA Private Key

4.提供证书给Harbor和Docker

1.将服务器证书和密钥复制到Harbor主机上的certficates文件夹中,根据自己实际环境需求创建Harbor的certficates文件夹
[root@manager-node1 ~]# mkdir -p /data/cert/
[root@manager-node1 ~]# cp 192.168.195.166.crt /data/cert/
[root@manager-node1 ~]# cp 192.168.195.166.key /data/cert/
2.转换 192.168.195.166.crt 为192.168.195.166.cert,供Docker使用。
[root@manager
-node1 ~]# openssl x509 -inform PEM -in 192.168.195.166.crt -out 192.168.195.166.cert 3.将服务器证书,密钥和CA文件复制到Harbor主机上的Docker certificate文件夹中。记住必须首先创建适当的文件夹
[root@manager
-node1 ~]# mkdir -p /etc/docker/certs.d/192.168.195.166/ [root@manager-node1 ~]# cp 192.168.195.166.cert /etc/docker/certs.d/192.168.195.166/ [root@manager-node1 ~]# cp 192.168.195.166.key /etc/docker/certs.d/192.168.195.166/ [root@manager-node1 ~]# cp ca.crt /etc/docker/certs.d/192.168.195.166/ 4.重启Docker
[root@manager
-node1 ~]# systemctl restart docker [root@manager-node1 ~]# systemctl status docker ● docker.service - Docker Application Container Engine Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled) Active: active (running) since Mon 2020-12-28 03:52:18 CST; 6s ago Docs: https://docs.docker.com Main PID: 10538 (dockerd) Tasks: 12 Memory: 46.6M CGroup: /system.slice/docker.service └─10538 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock 5.将名为"ca.crt"的CA证书下载到本地电脑,然后安装证书。 这样就可以在本地电脑的浏览器里正常访问https地址的Harbor了(证书可被信任)

5.安装Harbor

到 Harbor的GitHub仓库的Release页面 , 下载最新的安装包,安装包分为在线版,和离线版本,两个版本的区别就是离线版把需要的依赖都提前打到一个包里去了,在线版本就是在安装的时候去拉依赖。安装前的配置都是一样的。下面演示的是在线版。

#这里下载Harbor v2.1.2版本的在线安装包
[root@manager-node1 ~]# cd /usr/local/src/
[root@manager-node1 src]# wget https://github.com/goharbor/harbor/releases/download/v2.1.2/harbor-online-installer-v2.1.2.tgz
#上面下载的是在线版安装包,很小,如果想要下载离线版本的,地址如下。
https://github.com/goharbor/harbor/releases/download/v2.1.2/harbor-offline-installer-v2.1.2.tgz
[root@manager-node1 src]# tar -zvxf harbor-online-installer-v2.1.2.tgz [root@manager-node1 src]# mv harbor /opt/ #修改harbor安装的配置文件
[root@manager
-node1 src]# cd /opt/harbor/ [root@manager-node1 harbor]# cp harbor.yml.tmpl harbor.yml [root@manager-node1 harbor]# vim harbor.yml
#主要修改参数如下:
.........

........

hostname: 192.168.195.166     //需要写IP地址或者域名 

# http related config

http:

  # port for http, default is 80. If https enabled, this port will redirect to https port

  port: 80

  

#https配置(如不需要可不配置),因为我们上面进行了https证书自签,所以需要进行如下配置
# https related config

https:

  # https port for harbor, default is 443

  port: 443

  # The path of cert and key files for nginx

  certificate: /data/cert/192.168.195.166.crt

  private_key: /data/cert/192.168.195.166.key

........

........

harbor_admin_password: Harbor@123456    #harbor初始管理员密码为Harbor12345, 这里最好修改成自己的密码,默认密码至少8位,最好是大小写、数字和特殊字符。

........

........

data_volume: /data        ##持久化数据目录

#
运行install.sh, 注意运行时加上--with-clair 选项,启动clair镜像扫描功能
[root@manager-node1 harbor]# ./install.sh --with-clair
✔ ----Harbor has been installed and started successfully.----
#出现上面的信息,说明Harbor已经安装完成了。查看harbor启动情况。docker-compose 命令必须要在harbor安装目录
(这里就是
/opt/harbor)路径下才能执行。
[root@manager-node1 harbor]# docker-compose ps
      Name                     Command                  State                    Ports             
---------------------------------------------------------------------------------------------------
clair               ./docker-entrypoint.sh           Up (healthy)                                  
clair-adapter       /home/clair-adapter/entryp ...   Up (healthy)                                  
harbor-core         /harbor/entrypoint.sh            Up (healthy)                                  
harbor-db           /docker-entrypoint.sh            Up (healthy)                                  
harbor-jobservice   /harbor/entrypoint.sh            Up (healthy)                                  
harbor-log          /bin/sh -c /usr/local/bin/ ...   Up (healthy)   127.0.0.1:1514->10514/tcp      
harbor-portal       nginx -g daemon off;             Up (healthy)                                  
nginx               nginx -g daemon off;             Up (healthy)   0.0.0.0:80->8080/tcp,          
                                                                    0.0.0.0:443->8443/tcp          
redis               redis-server /etc/redis.conf     Up (healthy)                                  
registry            /home/harbor/entrypoint.sh       Up (healthy)                                  
registryctl         /home/harbor/start.sh            Up (healthy)
#查看harbor镜像
[root@manager-node1 harbor]# docker images
REPOSITORY                      TAG       IMAGE ID       CREATED       SIZE
goharbor/redis-photon           v2.1.2    ab361cc80013   2 weeks ago   68.8MB
goharbor/clair-adapter-photon   v2.1.2    b43551e703c2   2 weeks ago   58MB
goharbor/clair-photon           v2.1.2    0e9f86b78780   2 weeks ago   168MB
goharbor/harbor-registryctl     v2.1.2    da26ae6a8d51   2 weeks ago   132MB
goharbor/registry-photon        v2.1.2    417d60a20a94   2 weeks ago   80.1MB
goharbor/nginx-photon           v2.1.2    f9ea32db995f   2 weeks ago   40.1MB
goharbor/harbor-log             v2.1.2    7514c453345e   2 weeks ago   106MB
goharbor/harbor-jobservice      v2.1.2    123382c0d590   2 weeks ago   169MB
goharbor/harbor-core            v2.1.2    46211d9a0f44   2 weeks ago   150MB
goharbor/harbor-portal          v2.1.2    6eedd3daad4c   2 weeks ago   49.5MB
goharbor/harbor-db              v2.1.2    f0c14faef5d5   2 weeks ago   172MB
goharbor/prepare                v2.1.2    cc5f5219b08b   2 weeks ago   161MB
#确保harbpr启动后的80和443端口都起来了
[root@manager-node1 harbor]# lsof -i:80
COMMAND     PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
docker-pr 15359 root    4u  IPv6  80740      0t0  TCP *:http (LISTEN)
[root@manager-node1 harbor]# lsof -i:443
COMMAND     PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
docker-pr 15345 root    4u  IPv6  80711      0t0  TCP *:https (LISTEN)

 3.Harbor的使用

1.web界面的介绍和使用

到这里就可以访问harbor了,访问地址为:https://192.168.195.166
用户名为admin,密码为配置文件中定义的"Harbor@123456"

 harbor的用法概念和我们在Gitlab上的用法概念差不多。

首先在Harbor web界面里最好创建一个自己需要的"项目" (或者使用默认的"library"项目),项目公开和私有:
Public: 任何人对于公开项目都有读权限,这种方式对于你想把一些仓库分享给其他人的时候,是非常方便的.
Private: 私有项目只能被有特定用户权限的人去访问。这种方式对于内部团队来说共享也是比较方便的

比如创建一个私有项目"test-Harbor",点击进去可以看到推送镜像的信息提示

 

 

 

2.Harbor镜像的推送和下载

这里我们就可以在Harbor服务器的终端命令行里到Harbor仓库进行镜像的推送和拉取操作了:

harbor本地服务器登录

在进行harbor镜像推送和拉取操作前,需要事先login登录到harbor仓库里,这样才有harbor镜像的推送和拉取的权限!!

#因为docker1.3.2版本开始默认docker registry使用的是https,而Harbor默认设置的是http方式而不是https,所以当执行用docker login、pull、push等
命令操作非https的docker regsitry的时就会报如下错误
[root@centos-test-no ~]# docker login 172.31.46.28
Username: test1
Password: 
Error response from daemon: Get https://172.31.46.28/v2/: x509: certificate signed by unknown authority
#为了解决上面问题,/etc/docker/daemon.json文件里添加"insecure-registries"配置,(如果还不行,可以尝试将下面添加的地址由"172.31.46.28"改为"http://172.31.46.28"),
注意daemon.json配置文件两行之间有一个","逗号隔开
[root@centos-test-no ~]# vim /etc/docker/daemon.json 
[root@centos-test-no ~]# cat /etc/docker/daemon.json 
{
  "registry-mirrors": ["https://9l7fbd59.mirror.aliyuncs.com"],
  "insecure-registries": ["172.31.46.28"]
}
#修改完之后,重启docker,注意如果harbor本地服务器登录遇到上面问题的话,还需要重启harbor服务 [root@centos
-test-no ~]# systemctl restart docker #最后验证测试登录 [root@centos-test-no ~]# docker login 172.31.46.28 Username: test1 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/#credentials-store Login Succeeded
#登录的账号信息都保存到/root/.docker/config.json文件里了

[root@harbor-node harbor]# cat /root/.docker/config.json

{

        "auths": {

                "172.16.60.213": {

                        "auth": "YWRtaW46a2V2aW5AQk8xOTg3"

                }

        },

        "HttpHeaders": {

                "User-Agent": "Docker-Client/18.09.6 (linux)"

        }

  

#只要/root/.docker/config.json里的信息不删除,后续再次登录的时候,就不用输入用户名和密码了

[root@harbor-node ~]# docker login 172.16.60.213

Authenticating with existing credentials...

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
 

镜像的推送

#查看本机有哪些镜像
[root@centos-test-no ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE nginx latest ae2feff98a0c 2 weeks ago 133MB centos latest 300e315adb2f 3 weeks ago 209MB #在本机中标记镜像,这里我把本机的nginx镜像标记为nginx:test。准备上传到Harbor
[root@centos
-test-no ~]# docker tag nginx:latest 172.31.46.28/test-harbor/nginx:test #推送标记好镜像到当前Harbor上。
[root@centos
-test-no ~]# docker push 172.31.46.28/test-harbor/nginx:test The push refers to repository [172.31.46.28/test-harbor/nginx] 4eaf0ea085df: Pushed 2c7498eef94a: Pushed 7d2b207c2679: Pushed 5c4e5adc71a8: Pushed 87c8a1d8f54f: Pushed test: digest: sha256:13e4551010728646aa7e1b1ac5313e04cf75d051fa441396832fcd6d600b5e71 size: 1362
#这个时候回头看,发现本地镜像库中多了一个镜像,这个镜像是为了推送到harbor做的标签镜像,可以选择删除。

[root@centos-test-no ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
172.31.46.28/test-harbor/nginx test ae2feff98a0c 2 weeks ago 133MB
nginx latest ae2feff98a0c 2 weeks ago 133MB
centos latest 300e315adb2f 3 weeks ago 209MB

 

 

镜像的下载

镜像的下载和镜像的上传一样,都要先进行验证登录。这里我就不做过多演示了,直接来看怎么从harbor进行镜像的下载。

[root@manager-node2 ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
centos       latest    300e315adb2f   3 weeks ago   209MB
[root@manager-node2 ~]# docker pull 192.168.195.166/test-harbor/nginx@sha256:13e4551010728646aa7e1b1ac5313e04cf75d051fa441396832fcd6d600b5e71
192.168.195.166/test-harbor/nginx@sha256:13e4551010728646aa7e1b1ac5313e04cf75d051fa441396832fcd6d600b5e71: Pulling from test-harbor/nginx
6ec7b7d162b2: Pull complete 
cb420a90068e: Pull complete 
2766c0bf2b07: Pull complete 
e05167b6a99d: Pull complete 
70ac9d795e79: Pull complete 
Digest: sha256:13e4551010728646aa7e1b1ac5313e04cf75d051fa441396832fcd6d600b5e71
Status: Downloaded newer image for 192.168.195.166/test-harbor/nginx@sha256:13e4551010728646aa7e1b1ac5313e04cf75d051fa441396832fcd6d600b5e71
192.168.195.166/test-harbor/nginx@sha256:13e4551010728646aa7e1b1ac5313e04cf75d051fa441396832fcd6d600b5e71
[root@manager-node2 ~]# docker images
REPOSITORY                          TAG       IMAGE ID       CREATED       SIZE
192.168.195.166/test-harbor/nginx   <none>    ae2feff98a0c   2 weeks ago   133MB
centos                              latest    300e315adb2f   3 weeks ago   209MB

3.Harbor的启停以及配置生效

#harbor服务搭建成功后,默认会在安装目录下生成docker-compose.yml文件,通过这个文件harbor可以通过docker-compose进行服务的启停
[root@manager-node1 harbor]# docker-compose start
[root@manager-node1 harbor]# docker-compose stop
#如果需要修改harbor的一些配置,最好配合上面的启停中间加上下面的命令让配置生效
[root@manager-node1 harbor]# ./prepare

4.Harbor的高可用

原文地址:https://www.cnblogs.com/qingbaizhinian/p/14193553.html