服务注册器快速入门教程

34 篇文章 0 订阅
33 篇文章 0 订阅


今天我们要来探讨一下注册器的用法,内容不多,主要是为了让大家能够快速上手。

简介

  先来说说什么是注册器。注册器会对新创建的Docker容器进行监测并取得容器提供的服务信息。对于我们开发人员来说,所有监听某个端口的进程都可以视为服务,注册器一旦发现容器上运行的服务,就会将其加入到Service Registry中。

  下面我会用Consul来做Registry,然后在容器上跑Redis,注册器会自动把这个服务加入到Consul中。

准备工作

  第一步,首先要在宿主机上把Docker启起来,宿主机要求比较简单,可以是物理机,也可以是虚拟机,大家在本地机子上装一个boot2docker 虚拟机也是可以的。然后我们要在shell 里面运行docker client来操作这个主机。当然了,Consul也要先跑起来,不过这次我们要把Consul放到容器里面运行。大家可以通过下面的命令行,用server bootstrap 模式来创建Consul实例:

$ docker run -d --name=consul --net=host gliderlabs/consul-server -bootstrap

  在生产环境中运行Consul的方式跟上面还是有差别的,不过今天我们的重点不是这个,这里只是为了给大家打个基础。Consul实例创建好之后,大家可以输入下面的Docker machineIP地址来访问ConsulHTTP API

$ curl $(boot2docker ip):8500/v1/catalog/services
{"consul":[]}

  接下来就可以启动注册器了。

启动注册器

  在一个服务架构中,每个主机节点上都有一个注册器。这里我们只有一台主机,所以我们只需启动一次就可以了。首先大家可能需要做一点配置,指定注册器和Registry(这里我们用的Consul)的连接方式。

  除了可选参数之外,注册器用到的参数只有RegistryURI,这个值包含了Registry的类型、连接方式和其他一些选项。

$ docker run -d \
    --name=registrator \
    --net=host \
    --volume=/var/run/docker.sock:/tmp/docker.sock \
    gliderlabs/registrator:latest \
      consul://localhost:8500

  上面的Docker run命令后面跟了几个参数,整个run命令的工作流程如下:首先系统会以detach的方式启动容器并赋给容器一个名称,--net参数表示容器是以主机的network模式运行的,这样注册器才能取到宿主机的主机名和IP,而且以这种模式运行的话容器就比较容易连上Consul。然后我们在--volume参数中加载了Docker socket,这个是必选项,大家一定要记得写。

  最后一行命令指定了RegistryURI。因为本例中Consul的网络接口就是本机的8500端口,所以这里我们将consul监听的端口设为localhost:8500

$ docker logs registrator

  运行上面的命令就可以启动Consul了,系统会显示“Docker事件监听中”,看到这个就表示Consul已经成功跑起来了。

运行Redis

  容器启动之后,注册器会自动获取在容器中运行的服务信息,并将其添加到Consul。接下来我们要输入下面的命令,从标准的library镜像来启动Redis

$ docker run -d -P --name=redis redis

  注意这里我们用了-P参数来发布所有端口。这个参数一般情况下很少用到,主要还是和注册器配合使用。该参数的作用是发布容器锁暴露的所有端口,并随机地为容器分配一个主机端口。因为Consul注册器可以提供服务发现功能,所以用哪个端口都可以。当然大家也可以根据具体情况手动设置端口号。

  运行下面的命令可以查看Consul的服务端点信息:

$ curl $(boot2docker ip):8500/v1/catalog/services
{"consul":[],"redis":[]}

  可以看到Consul下面已经有redis服务的信息了。大家可以运行下面的命令查看redis的服务端点信息,关于服务的详细信息都在里面。比方说我们可以查看容器的哪些端口被转发了:

$ curl $(boot2docker ip):8500/v1/catalog/service/redis
[{"Node":"boot2docker","Address":"10.0.2.15","ServiceID":"boot2docker:redis:6379","ServiceName":"redis","ServiceTags":null,"ServiceAddress":"","ServicePort":32768}]

  如果我们删除了redis容器,在Consul里面也可以看到容器被删除的信息:

$ docker rm -f redis
redis
$ curl $(boot2docker ip):8500/v1/catalog/service/redis
[]

  本文只讲了如何通在Consul中注册容器服务,可能会有点枯燥,但还是建议大家好好看一看。在Consul中注册服务之后,我们就可以对服务进行大量操作,不过这些不在本文探讨范围之内,以后我们会逐渐讲到这些内容。当然,注册器的设置和容器的运行都存在很多种方式,我们也可以通过其他的办法来创建自定义服务,大家如果感兴趣的话可以自己去网上找相关教程来学习,这里就不再赘述了。

 

  如果我们删除了redis容器,在Consul里面也可以看到容器被删除的信息:

$ docker rm -f redis
redis
$ curl $(boot2docker ip):8500/v1/catalog/service/redis
[]

  本文只讲了如何通在Consul中注册容器服务,可能会有点枯燥,但还是建议大家好好看一看。在Consul中注册服务之后,我们就可以对服务进行大量操作,不过这些不在本文探讨范围之内,以后我们会逐渐讲到这些内容。当然,注册器的设置和容器的运行都存在很多种方式,我们也可以通过其他的办法来创建自定义服务,大家如果感兴趣的话可以自己去网上找相关教程来学习,这里就不再赘述了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值