啃Docker之Docker consul的容器服务更新与发现和Harbor私有仓库部署与管理

一、Consul 概述

1.1、Consul 简介

  • Consul 是一个支持多数据中心分布式高可用服务发现 和 配置共享服务软件,由 HashiCorp 公司用 Go 语言开发,基于 Mozilla Public License 2.0 的协议进行开源。

  • 主要特性:

  • Consul 支持健康检查,并允许 HTTP 、GRPC 和 DNS 协议调用 API 存储键值对。

  • 一致性协议采用 Raft 算法,用来保证服务的高可用。

  • 使用 GOSSIP 协议管理成员和广播消息, 并且支持 ACL 访问控制。

  • 方便部署,与Docker等轻量级容器可无缝配合

  • consul的实例叫agent,agent有两种运行模式:server和client 。

  • 官方建议每个Consul Cluster数据中心至少有3个或以上的运行在Server Mode的Agent,Client节点不限。

1.2、Consul 使用场景

  • Docker 容器的注册与配置共享
  • Coreos 实例的注册与配置共享
  • SaaS 应用的配置共享、服务发现和健康检查。
  • vitess 集群
  • 与 confd 服务集成,动态生成 nginx 和 haproxy 配置文件

1.3、Consul 优势

  • 市面现在有很多类似的软件比如:zookeeper 、Etcd、doozerd、eureka,Consul 相比这些软件有什么优势呢?
    下面来总结一下 Consul 的优势有那几点:
    • 使用 Raft 算法来保证一致性,比复杂的 Paxos 算法更直接。相比较而言,zookeeper 采用的是 Paxos,而 etcd 使用的则是 Raft。
    • 支持 多数据中心,内外网的服务采用不同的端口进行监听。 多数据中心集群可以避免单数据中心的单点故障,而其部署则需要考虑网络延迟,分片等情况等. zookeeper 和 etcd 均不提供多数据中心功能的支持。
    • 支持 健康检查。 etcd 不提供此功能。
    • 支持 HTTP、DNS 和 GPRS 协议接口。 zookeeper 的集成较为复杂,etcd 只支持 http 协议。
    • 官方提供 WEB管理界面,etcd 无此功能。

1.4、consul 端口的了解

端口说明
TCP/83008300端口用于服务器节点。客户端通过改端口RPC协议调用服务端节点
C8301端口用于单个数据中心所有节点之间的互相通信,即对LAN池信息的同步。它便得整个数据中心能够自动发现服务器地址,分布式检测节点故障,时间广播(如领导选举时间)
TCP/UDP/83028302端口用于单个或多个数据中心之间的服务器节点的信息同步,即对WAN池信息的同步。它针对互联网的高延迟进行了优化,能够实现跨数据中心请求。
85008500端口基于HTTP协议,用于API接口或WEB UI访问
86008600端口作为DNS服务器,它使得我们可以通过节点名查询节点信息

1.5:基于nginx和consul构建高可用及自动发现的Docker服务架构

在这里插入图片描述

上方拓扑图是基于Docker完成的,然后将consul、consul template、registrator和nginx组装成一个值得信任且可扩展的服务框架,此架构可以灵活的、不需要重启任何服务、不需要重写任何配置的添加和移除服务。

  • 拓扑图解释
    • consul template:配置文件模板
    • registrator:注册机制
    • consul server:consul服务

例如:当后方增加了一个容器时,容器会注册registrator,registrator发现增加了一个容器的时候,会通知consul server要更新,consul server使用consul template模板更新

二:Docker consul自动发现服务架构的构建

  • 环境
主机IP地址需要安装的软件
Consul 服务20.0.0.51Docker-ce、Consul、Consul-template模板、nginx服务
容器服务20.0.0.54Docker-ce
  • 两台虚拟机都提前安装了Docker-ce,可以启用docker服务

2.1:Consul 服务器

  • 在主节点上部署consul
[root@localhost ~]# hostnamectl set-hostname consul
[root@localhost ~]# su
[root@consul ~]# mkdir consul
[root@consul ~]# cd consul/
[root@consul consul]# rz -E  '上传压缩包'
rz waiting to receive.
[root@consul consul]# ls
consul_0.9.2_linux_amd64.zip  consul-template_0.19.3_linux_amd64.zip
[root@consul consul]# unzip consul_0.9.2_linux_amd64.zip 
Archive:  consul_0.9.2_linux_amd64.zip
  inflating: consul                  
[root@consul consul]# ls
consul  consul_0.9.2_linux_amd64.zip  consul-template_0.19.3_linux_amd64.zip
[root@consul consul]# mv consul /usr/local/bin/
[root@localhost consul]# consul agent \		'设置代理'
-server \	'服务功能'
-bootstrap \		'参与选举'
-ui \			'提供web界面'
-data-dir=/var/lib/consul-data \		'提供一个代理存储数据目录'
-bind=20.0.0.51 \		'绑定本地地址'
-client=0.0.0.0 \		'面对的客户端地址'
-node=consul-server01 &> /var/log/consul.log &	'定义节点名称,日志混合输出到log,并且放到后台运行'
[root@localhost consul]# jobs		'查看后台任务'
[1]+  运行中               consul agent -server -bootstrap -ui -data-dir=/var/lib/consul-data -bind=20.0.0.51 -client=0.0.0.0 -node=consul-server01 &>/var/log/consul.log &
[root@localhost consul]# consul members	'查看集群信息'
Node             Address               Status  Type    Build  Protocol  DC
consul-server01  20.0.0.51:8301  alive   server  0.9.2  2         dc1
[root@localhost consul]# consul info |grep leader	'查看管理信息'
	leader = true
	leader_addr = 20.0.0.51:8300
  • 通过HTTP api获取集群信息
curl 127.0.0.1:8500/v1/status/peers '查看集群server成员'

curl 127.0.0.1:8500/v1/status/leaders '查看集群Raf leader'

curl 127.0.0.1:8500/v1/catalog/services '查看注册的所有服务'

curl 127.0.0.1:8500/v1/catalog/nginx '查看nginx服务的信息'

curl 127.0.0.1:8500/v1/catalog/nodes   '集群节点详细信息'
  • nginx服务器上连接consul,创建nginx容器服务
[root@localhost ~]# docker run -d \
> --name=registrator \
> --net=host \
> -v /var/run/docker.sock:/tmp/docker.sock \
> --restart=always \
> gliderlabs/registrator:latest \
> -ip=20.0.0.54 \
> consul://20.0.0.51:8500
[root@localhost ~]# docker images
REPOSITORY               TAG                 IMAGE ID            CREATED             SIZE
gliderlabs/registrator   latest              3b59190c6c80        4 years ago         23.8MB
[root@localhost ~]# docker ps
CONTAINER ID        IMAGE                           COMMAND                  CREATED             STATUS              PORTS               NAMES
d48e3f01f0a4        gliderlabs/registrator:latest   "/bin/registrator -i…"   16 seconds ago      Up 16 seconds                           registrator
  • 访问浏览器20.0.0.51:8500

在这里插入图片描述

  • 测试服务发现功能是否正常
[root@localhost ~]# docker run -itd -p:83:80 --name test-01 -h test1 nginx
[root@localhost ~]# docker run -itd -p:84:80 --name test-02 -h test2 nginx
[root@localhost ~]# docker run -itd -p:85:80 --name test-03 -h test3 httpd
[root@localhost ~]# docker run -itd -p:86:80 --name test-04 -h test4 httpd
  • 验证

访问浏览器
20.0.0.51:8500

在这里插入图片描述

  • 在consul服务器上查看服务
curl 127.0.0.1:8500/v1/catalog/services

2.2:consul集群添加compose-template,实现容器自动加入Nginx集群

  • compose-template介绍
    • compose-template是一个守护进程,用于实时查询consul集群信息
      并且运维人员可以在consul服务器上,定制任意的模板,生成配置文件
      compose可以查询consul中的服务目录、key、key-values等
      这种强大的抽象功能和查询语言模板使得consul-template特别适合动态的创建配置文件,也就是自动化增加服务

例如:创建apache/nginx proxy balacers、haproxy backends

  • consul服务器安装consul-template,准备模板文件
[root@localhost consul]# rz -E	'//上传consul-template软件包'
rz waiting to receive.
[root@localhost consul]# ls
consul-template_0.19.3_linux_amd64.zip
[root@localhost consul]# unzip consul-template_0.19.3_linux_amd64.zip -d /usr/bin
Archive:  consul-template_0.19.3_linux_amd64.zip
  inflating: /usr/bin/consul-template
  • consul服务器编写template nginx模板文件
    • 此模板用于nginx反向代理模板
    • nginx.ctmpl跟nginx没有直接关系
    • consul是docker的一种自动管理机制
    • nginx.ctmpl中的参数以变量的形式写入
[root@localhost consul]# vim nginx.ctmpl
upstream http_backend {
  {{range service "nginx"}}
   server {{.Address}}:{{.Port}};
   {{end}}
}

server {
  listen 83;
  server_name localhost 20.0.0.51;
  access_log /var/log/nginx/kevin-access.log;
  index index.html index.php;
  location / {
    proxy_set_header HOST $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header Client-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_pass http://http_backend;
  }
}
  • consul服务器编译安装nginx
[root@localhost consul]# yum install gcc pcre-devel zlib-devel -y
[root@localhost consul]# tar zxvf nginx-1.12.2.tar.gz -C /opt
[root@localhost consul]# cd /opt/nginx-1.12.0/
[root@consul nginx-1.12.0]# ./configure --prefix=/usr/local/nginx
[root@consul nginx-1.12.0]# make && make install
  • 配置nginx
[root@consul nginx-1.12.0]# vim /usr/local/nginx/conf/nginx.conf
http {
    include       mime.types;
    include  vhost/*.conf;      '#添加虚拟主机目录'
    default_type  application/octet-stream;
'#创建虚拟主机目录'
mkdir /usr/local/nginx/conf/vhost
'#创建日志文件目录'
mkdir /var/log/nginx
'#启动nginx'
/usr/local/nginx/sbin/nginx
  • 启动template,指定template模板文件及生成路径
'上传consul-template'
unzip consul-template
mv consul-template /usr/local/bin
[root@consul consul]# consul-template -consul-addr 20.0.0.51:8500 -template "/root/consul/nginx.ctmpl:/usr/local/nginx/conf/vhost/kevin.conf:/usr/local/nginx/sbin/nginx -s reload" --log-level=info
'指定模板路径,/consul/nginx.ctmpl,生成到/usr/locla/nginx/conf/vhost/kevin.conf,然后重载nginx -s reload'
'接下来会进入监控状态'
  • consul服务器重新打开终端查看产生的配置文件
[root@consul ~]# cat /usr/local/nginx/conf/vhost/kevin.conf 

upstream http_backend {

   server 20.0.0.54:83;

   server 20.0.0.54:84;

}

server {
  listen 83;
  server_name localhost 20.0.0.51;
  access_log /var/log/nginx/kevin-access.log;
  index index.html index.php;
  location / {
    proxy_set_header HOST $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header Client-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_pass http://http_backend;
  }
}
  • 客户端浏览器测试,结合nginx服务器日志验证

在这里插入图片描述

[root@localhost ~]# docker logs -f test-01	'nginx服务器动态查看test-01日志'
[root@localhost ~]# docker logs -f test-02	
success

在这里插入图片描述

在这里插入图片描述

  • 总结:在浏览器使用20.0.0.51访问时,查看日志会发现是轮询出现的

  • 测试consul-template自动在线更新

[root@localhost ~]# docker run -itd -p:87:80 --name test-05 -h test5 nginx
ea575d115f937d65d907f9f8d6ecffb6e480fb033d215d90bf27b9376a324e91
[root@localhost vhost]# cat /usr/local/nginx/conf/vhost/kevin.conf 
upstream http_backend {

   server 20.0.0.54:83;

   server 20.0.0.54:84;

   server 20.0.0.54:87;		'已经自动更新,是不需要我们手动更改的'

}

server {
  listen 83;
  server_name localhost 20.0.0.51;
  access_log /var/log/nginx/kevin-access.log;
  index index.html index.php;
  location / {
    proxy_set_header HOST $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header Client-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_pass http://http_backend;
  }
}

三:Harbor私有仓库部署与管理

3.1:什么是Harbor?有什么作用?

  • Harbor是VMware公司的开源级的企业级DockerRegistry(仓库)项目,项目地址为 https://github.com/vmware/harbor.

  • Harbor的目标是帮助用户迅速搭建一个企业级的DockerRegistry服务。

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

  • Harbor的每个组件都是以Docker容器的形式构建的,使用docker-compose来对它进行部署。用于部署Harbor的docker-compose模板位于/usr/local/bin/harbor/docker-compose.yml(自定义)

3.2:harbor的特性

  • 1、基于角色控制:用户与Docker镜像仓库通过"项目"进行组织管理,一个用户可以对多个镜像仓库在统一命名空间(projec)里有不同的权限

  • 2、图形化用户界面:用户可以通过浏览器来浏览,检索当前Docker镜像仓库,管理项目和命名空间

  • 3、审计管理:所有这怒地镜像仓库的错都可以被记录追溯,用于审计管理

  • 4、基于镜像的复制策略:镜像可以在多个Harbor实例之间进行复制。

  • 5、支持LDAP认证:Harbor的用户授权可以使用已经存在的用户。

  • 6、镜像删除和垃圾回收:image可以被删除并且回收image占用的空间。

  • 7、简单的部署功能:harbor提供了online、offline安装,此外还提供了virtualappliance安装

  • 8、harbor和docker registry的关系:harbor实质上是对docker registry做了封装,扩展了自己的业务模板。

3.3:harbor的简易架构

  • harbor主要有6大模块,默认的每个harbor的组件都被封装成一个docker container,所以可以通过compose来部署harbor,总共分为8个容器运行,通过docker-compose ps来查看

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3uCUcDaG-1600873578652)(C:\Users\kevin\AppData\Roaming\Typora\typora-user-images\image-20200923224312811.png)]

  1. Proxy: Harbor的registry、UI、token services等组件,都处在一个反向代理后边。该代理将来自浏览器、docker clients的请求转发到后端服务上。
  2. Registry: 负责存储Docker镜像,以及处理Docker push/pull请求。因为Harbor强制要求对镜像的访问做权限控制, 在每一次push/pull请求时,Registry会强制要求客户端从token service那里获得一个有效的token。
  3. Core services: Harbor的核心功能,主要包括如下3个服务:
  4. UI: 作为Registry Webhook, 以图像用户界面的方式辅助用户管理镜像。1) WebHook是在registry中配置的一种机制, 当registry中镜像发生改变时,就可以通知到Harbor的webhook endpoint。Harbor使用webhook来更新日志、初始化同步job等。 2) Token service会根据该用户在一个工程中的角色,为每一次的push/pull请求分配对应的token。假如相应的请求并没有包含token的话,registry会将该请求重定向到token service。 3) Database 用于存放工程元数据、用户数据、角色数据、同步策略以及镜像元数据。
  5. Job services: 主要用于镜像复制,本地镜像可以被同步到远程Harbor实例上。
  6. Log collector: 负责收集其他模块的日志到一个地方

3.4:harbor配置文件参数

  • vim /usr/local/harbor/harbor.cfg,关于 Harbor.cfg 配置文件中有两类参数:所需参数和可选参数
  • 1、所需参数:这些参数需要在配置文件 Harbor.cfg 中设置。如果用户更新它们并运行 install.sh脚本重新安装 Harbour,参数将生效。具体参数如下:
    • hostname:用于访问用户界面和 register 服务。它应该是目标机器的 IP 地址或完全限 定的域名(FQDN),例如 192.168.195.128 或 hub.kgc.cn。不要使用 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 时才应用。
    • secretkey_path:用于在复制策略中加密或解密远程 register 密码的密钥路径。

2、可选参数:这些参数对于更新是可选的,即用户可以将其保留为默认值,并在启动 Harbor 后在 Web UI 上进行更新。如果进入 Harbor.cfg,只会在第一次启动 Harbor 时生效,随后对这些参数 的更新,Harbor.cfg 将被忽略。

注意:如果选择通过UI设置这些参数,请确保在启动Harbour后立即执行此操作。具体来说,必须在注册或在 Harbor 中创建任何新用户之前设置所需的

  • auth_mode。当系统中有用户时(除了默认的 admin 用户),auth_mode 不能被修改。具体参数如下:

  • Email:Harbor需要该参数才能向用户发送“密码重置”电子邮件,并且只有在需要该功能时才需要。

  • 请注意,在默认情况下SSL连接时没有启用。如果SMTP服务器需要SSL,但不支持STARTTLS,那么应该通过设置启用SSL email_ssl = TRUE。

  • harbour_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:打开或关闭,默认打开。此标志决定了当Harbor与远程 register 实例通信时是否验证 SSL/TLS 证书。

  • 将此属性设置为 off 将绕过 SSL/TLS 验证,这在远程实例具有自签名或不可信证书时经常使用。

  • 另外,默认情况下,Harbour 将镜像存储在本地文件系统上。在生产环境中,可以考虑 使用其他存储后端而不是本地文件系统,

  • 如 S3、Openstack Swif、Ceph 等。但需要更新 common/templates/registry/config.yml 文件。

四:部署Harbor私有仓库

  • 环境
主机名IP地址所需软件
harbor20.0.0.51docker-ce、harbor、docker-compose
client20.0.0.54docker-ce
  • 两台主机都安装docker-ce,harbor服务器还需要安装docker-compose、harbo
[root@localhost ~]# systemctl start docker
[root@localhost ~]# iptables -F
[root@localhost ~]# setenforce 0
setenforce: SELinux is disabled
[root@localhost ~]# rz -E
rz waiting to receive.
[root@localhost ~]# ls
anaconda-ks.cfg  docker-compose  initial-setup-ks.cfg  
[root@localhost ~]# chmod +x docker-compose 
[root@localhost ~]# mv docker-compose /usr/local/bin/
[root@localhost ~]# docker-compose -v
docker-compose version 1.21.1, build 5a3f1a3
[root@localhost ~]# rz -E
rz waiting to receive.
[root@localhost ~]# tar zxvf harbor-offline-installer-v1.2.2.tgz -C /usr/local/
[root@localhost harbor]# vim /usr/local/harbor/harbor.cfg 
5 hostname = 20.0.0.51  '修改为监听本地地址,不可以使用localhost或者1270.0.1
59 harbor_admin_password = Harbor12345  '密码要记住,用户名叫admin'
[root@localhost harbor]# sh install.sh 
  • 查看已经生成的镜像和容器
[root@localhost ~]# docker images
REPOSITORY                  TAG                 IMAGE ID            CREATED             SIZE
vmware/harbor-log           v1.2.2              36ef78ae27df        2 years ago         200MB
vmware/harbor-jobservice    v1.2.2              e2af366cba44        2 years ago         164MB
vmware/harbor-ui            v1.2.2              39efb472c253        2 years ago         178MB
vmware/harbor-adminserver   v1.2.2              c75963ec543f        2 years ago         142MB
vmware/harbor-db            v1.2.2              ee7b9fa37c5d        2 years ago         329MB
vmware/nginx-photon         1.11.13             6cc5c831fc7f        2 years ago         144MB
vmware/registry             2.6.2-photon        5d9100e4350e        2 years ago         173MB
vmware/postgresql           9.6.4-photon        c562762cbd12        2 years ago         225MB
vmware/clair                v2.0.1-photon       f04966b4af6c        2 years ago         297MB
vmware/harbor-notary-db     mariadb-10.1.10     64ed814665c6        3 years ago         324MB
vmware/notary-photon        signer-0.5.0        b1eda7d10640        3 years ago         156MB
vmware/notary-photon        server-0.5.0        6e2646682e3c        3 years ago         157MB
photon                      1.0                 e6e4e4a2ba1b        3 years ago         128MB
[root@localhost ~]# docker ps -a
CONTAINER ID        IMAGE                              COMMAND                  CREATED             STATUS              PORTS                                                              NAMES
968d6c3ec791        vmware/harbor-jobservice:v1.2.2    "/harbor/harbor_jobs…"   21 seconds ago      Up 20 seconds                                                                          harbor-jobservice
938f21931305        vmware/nginx-photon:1.11.13        "nginx -g 'daemon of…"   21 seconds ago      Up 20 seconds       0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp, 0.0.0.0:4443->4443/tcp   nginx
7e7ca101c841        vmware/harbor-ui:v1.2.2            "/harbor/harbor_ui"      21 seconds ago      Up 20 seconds                                                                          harbor-ui
09c54252ef77        vmware/harbor-db:v1.2.2            "docker-entrypoint.s…"   22 seconds ago      Up 21 seconds       3306/tcp                                                           harbor-db
7d47b7b3d17e        vmware/registry:2.6.2-photon       "/entrypoint.sh serv…"   22 seconds ago      Up 21 seconds       5000/tcp                                                           registry
3a697152024e        vmware/harbor-adminserver:v1.2.2   "/harbor/harbor_admi…"   22 seconds ago      Up 21 seconds                                                                          harbor-adminserver
19ab947f7d23        vmware/harbor-log:v1.2.2           "/bin/sh -c 'crond &…"   24 seconds ago      Up 21 seconds       127.0.0.1:1514->514/tcp                                            harbor-log
'也可以使用docker-compose ps查看容器状态,但是需要在/usr/local/harbor目录下执行'
[root@localhost harbor]# docker-compose ps

       Name                     Command               State                                Ports                              
------------------------------------------------------------------------------------------------------------------------------

harbor-adminserver   /harbor/harbor_adminserver       Up                                                                      
harbor-db            docker-entrypoint.sh mysqld      Up      3306/tcp                                                        
harbor-jobservice    /harbor/harbor_jobservice        Up                                                                      
harbor-log           /bin/sh -c crond && rm -f  ...   Up      127.0.0.1:1514->514/tcp                                         
harbor-ui            /harbor/harbor_ui                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  
  • 上述容器解释
  1. harbor-adminserver:harbor系统管理接口,可以修改系统配置以及获取系统信息
  2. harbor-db:存储项目的元数据、用户、规则、复制策略等信息
  3. harbor-jobservice:harbor里面主要是为了镜像仓库之前同步使用的
  4. harbor-log:收集其他harbor的日志信息。rsyslogd
  5. harbor-ui:一个用户界面模块,用来管理registry。主要是前端的页面和后端CURD的接口
  6. nginx:harbor的一个反向代理组件,代理registry、ui、token等服务。这个代理会转发harbor web和docker client的各种请求到后端服务上。是个nginx。nginx负责流量转发和安全验证,对外提供的流量都是从nginx中转,它将流量分发到后端的ui和正在docker镜像存储的docker registry
  7. registry:存储docker images的服务,并且提供pull/push服务。harbor需要对image的访问进行访问控制,当client每次进行pull、push的时候,registry都需要client去token服务获取一个可用的token。
  8. redis:存储缓存信息
  9. webhook:当registry中的image状态发生变化的时候去记录更新日志、复制等操作。
    token service:在docker client进行pull/push的时候今天token的发放。
  • web网页登陆测试
    在这里插入图片描述

在这里插入图片描述

  • harbor服务器字符界面镜像仓库测试
'登录'
[root@localhost harbor]# docker login -u admin -p Harbor12345 http://127.0.0.1

'下载镜像进行测试 '' 
docker pull nginx

'添加标签'
[root@localhost harbor]# docker tag nginx:latest 127.0.0.1/kevin/nginx:v1

'上传镜像到Harbo'
[root@localhost harbor]# docker push 127.0.0.1/kevin/nginx

在这里插入图片描述

  • client客户端harbor仓库测试
[root@localhost ~]# iptables -F 
[root@localhost ~]# setenforce 0
[root@localhost ~]# vim /usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd -H fd:// --insecure-registry 20.0.0.51 
[root@localhost ~]# systemctl daemon-reload
[root@localhost ~]# systemctl restart docker.service 
[root@localhost ~]# docker login -u admin -p Harbor12345 http://20.0.0.51
[root@localhost ~]# docker pull centos:7
7: Pulling from library/centos
75f829a71a1c: Pull complete 
Digest: sha256:19a79828ca2e505eaee0ff38c2f3fd9901f4826737295157cc5212b7a372cd2b
Status: Downloaded newer image for centos:7
docker.io/library/centos:7
[root@localhost ~]# docker images;
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos              7                   7e6257c9f8d8        6 weeks ago         203MB
[root@localhost ~]# docker tag centos:7 20.0.0.51/kevin/centos:v1
[root@localhost ~]# docker images
REPOSITORY               TAG                 IMAGE ID            CREATED             SIZE
20.0.0.51/kevin/centos   v1                  7e6257c9f8d8        6 weeks ago         203MB
centos                   7                   7e6257c9f8d8        6 weeks ago         203MB
[root@localhost ~]# docker push 20.0.0.51/kevin/centos
The push refers to repository [20.0.0.51/kevin/centos]
613be09ab3c0: Pushed 
v1: digest: sha256:fe2347002c630d5d61bf2f28f21246ad1c21cc6fd343e70b4cf1e5102f8711a9 size: 529

![在这里插入图片描述](https://img-blog.csdnimg.cn/20200923230938492.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzQ3MjE5OTQy,size_16,color_FFFFFF,t_70#pic_center)

4.1:harbor仓库的维护管理

4.1.1:修改Harbor.cfg配置文件

  • 1、可以使用 docker-compose 来管理 Harbor,命令必须在与 docker-compose.yml 相同的目录中运行。

  • 2、修改harbor.cfg配置文件的时候要注意

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

[root@harbor harbor]# pwd
/usr/local/harbor
[root@harbor harbor]# docker-compose down -v	'关闭删除所有容器'
[root@harbor harbor]# vim harbor.cfg 
[root@harbor harbor]# ./prepare 	'重新填充配置'
[root@harbor harbor]# docker-compose up -d	'开启容器'

4.1.2:Harbor用户管理

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4FpFt7hM-1600873578654)(C:\Users\kevin\AppData\Roaming\Typora\typora-user-images\image-20200923192152910.png)]

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • 在客户端操作
  '登陆'
  [root@localhost ~]# docker login 20.0.0.51
  Username: zhangsan
  Password: 
  '注销登录'
  [root@localhost ~]# docker logout 20.0.0.51
  Removing login credentials for 20.0.0.51
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值