Registrator(注册器)简介
Registrator在线自动检测docker容器,支持热插拔的注册与撤销服务,目前可支持以下组件:consul、etcd与skydns2.
获得注册器
获得最新版本及任何版本:https://hub.docker.com/r/gliderlabs/registrator/
下载方式
docker pull gliderlabs/registrator:latest
其中,latest标签总是指向最新版本。
使用Registrator
想看说明的话,这儿是我们的快速入门教程:http://gliderlabs.com/registrator/latest/user/quickstart/
案例,通常是这么使用的:
docker run -d \
–name=registrator \
–net=host \
–volume=/var/run/docker.sock:/tmp/docker.sock \
gliderlabs/registrator:latest \
consul://localhost:8500
快速入门教程
概述
注册器监听容器并确定其提供了什么服务,在发现容器内的服务后,将其添加到服务注册中心如consul、etcd等。本教程中,我们将使用注册器与consul,并运行一个redis容器,将自动被添加到consul注册中心。
出发之前我们需要一个运行中的consul环境。
启动Registrator
注册器需要运行在每一台宿主机上,但因为我们只有一台实验host,所以我们可以只运行一次。在这个实验里,我们开始配置注册器的前提是如何连接到consul注册表。
除了选项标志,唯一的参数是一个注册表的url,它标注的是什么类型的注册以及如何连接到它:
docker run -d \
–name=registrator \
–net=host \
–volume=/var/run/docker.sock:/tmp/docker.sock \
gliderlabs/registrator:latest \
consul://localhost:8500
首先是我们运行容器的名称和主机,我们在主机网络模式下运行,这可以确保注册器更容易连接到consul。最后一行是consul注册器的url,我们用默认的8500端口。
查看启动情况:
docker logs registrator
现在,当你开始容器服务,服务将被添加到领事。我们运行redis:
docker run -d -P –name=redis redis
我们使用-d发布所有端口,除了使用registrator外,这不是经常使用的,它不仅发布了所有暴露的端口,而且将它们随机分配给主机上的端口,由于注册器和consul的关键点是提供服务发现,端口不要紧。生产环境下,还是
需要你手动指定端口情况。
让我们再来看一下consul的服务点
curl ip:8500/v1/catalog/services
{“consul”:[],”redis”:[]}
现在,我们就已经有了一个叫redis的服务了,我们可以看到更多关于redis服务的信息包括哪些端口等:
curl 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容器
docker rm -f redis
我们可以看到
curl ip:8500/v1/catalog/service/redis
[]
运行参考
docker run [docker options] gliderlabs/registrator[:tag] [options] <registry uri>
Registry URI
<backend>://<address>[/<path>]
服务对象
注册器主要关注的是服务,将其添加到服务注册表。在我们的例子中,一个服务是在一个端口上监听的。如果一个容器在多个端口上侦听,它具有多个服务。
服务是从容器中创建的,包括容器上的用户定义元数据,到中介服
务对象。此服务对象随后被传递到一个注册表后端,并将此对象放置到特定的注册表中。
type Service struct {
ID string // unique service instance ID
Name string // service name
IP string // IP address service is located at
Port int // port service is listening on
Tags []string // extra tags to classify service
Attrs map[string]string // extra attribute metadata
}
Consul service
consul://<address>:<port>
consul-unix://<filepath>
Consul Key/Value
consulkv://<address>:<port>/<prefix>
consulkv-unix://<filepath>:/<prefix>
以consul key/value方式启动
docker run -d \
–name=registrator \
–net=host \
–volume=/var/run/docker.sock:/tmp/docker.sock \
gliderlabs/registrator:latest \
consulkv://127.0.0.1:8500/customer