Spring Cloud Consul 和 Consul Clients dockerized
Posted
技术标签:
【中文标题】Spring Cloud Consul 和 Consul Clients dockerized【英文标题】:Spring Cloud Consul and Consul Clients dockerized 【发布时间】:2020-05-18 22:23:18 【问题描述】:我有 2 个应用程序,都是使用 spring boot 编写的。两者都在不同的 docker 容器中运行。我也有领事在不同的 docker 容器中运行。我使用 docker-compose.yml 文件为 consul 公开了端口 8500。那么,我如何指定我的 Spring Boot 应用程序在哪里注册自己,即 consul 在哪里运行。我要给出映射端口的地址(映射到我的本地机器的端口),还是进行一些其他更改?
我现在使用的例子:https://github.com/Java-Techie-jt/cloud-consul-service-discovery
编辑:
docker-compose.yml:
version: "2"
services:
consul:
container_name: consul
image: consul
expose:
- "8300"
- "8400"
- "8500"
restart: always
registrator:
container_name: registrator
image: gliderlabs/registrator:master
volumes:
- "/var/run/docker.sock:/tmp/docker.sock"
command: -internal consul://consul:8500
restart: always
depends_on:
- consul
web1:
image: deis/mock-http-server
container_name: web1
expose:
- "8080"
environment:
SERVICE_NAME: "web"
SERVICE_TAGS: "web"
restart: always
depends_on:
- registrator
web2:
image: deis/mock-http-server
container_name: web2
expose:
- "8080"
environment:
SERVICE_8080_NAME: "web"
SERVICE_8080_TAGS: "web"
restart: always
depends_on:
- registrator
haproxy:
build: ./haproxy
container_name: my-haproxy
image: anthcourtney/haproxy-consul
ports:
- 80
depends_on:
- web1
- web2
test:
container_name: test-client
build: ./test
depends_on:
- haproxy
networks:
default:
【问题讨论】:
【参考方案1】:您可以将注册器用于您的服务注册。 Registrator 通过在容器上线时检查容器来自动注册和注销任何 Docker 容器的服务。 Registrator 支持可插拔的服务注册中心,目前包括 Consul、etcd 和 SkyDNS 2。 您可以将注册器作为容器运行。它将注册您应用程序的每个端口。以下是示例撰写文件:-
version: '2'
services:
registrator:
image: "$REGISTRYgliderlabs/registrator:latest"
command: [
"-ip=<docker-host-ip>",
"-retry-attempts", "100",
"-cleanup",
# "-internal",
"consul://vconsul:8500"
]
官方文档:https://gliderlabs.github.io/registrator/latest/
【讨论】:
我已编辑问题以包含我的 docker-compose.yml 文件。在此,我计划用我的 2 个 Spring Boot 应用程序替换模拟 http 服务器。所以,你告诉我我只需要更改镜像(包括构建),注册器会在容器上线(制作)时自动将它们注册到 consul。在 application.properties 中不需要任何额外的配置,只需指定它将运行的端口就足够了。 你只需要添加注册服务。它将注册您的撰写文件中提供的所有其他服务。它将使用服务名称和服务端口进行注册。所以多个服务可以有相同的图像。你不需要做任何额外的事情,只需在你的撰写文件中添加注册者。 欢迎。如果你觉得这有帮助,请投赞成票:) 另外,在他们的官方网站上,注册器的用法如下:注册器监视新的 Docker 容器并检查它们以确定它们提供的服务。就我们的目的而言,服务是侦听端口的任何东西。 Registrator 在容器上找到的任何服务都将被添加到服务注册中心,例如 Consul 或 etcd。那么,我们是否必须添加注解 @EnableDiscoveryClient 将服务添加到服务发现或自动添加所有服务? 所有服务都会自动添加为注册器监听docker事件。以上是关于Spring Cloud Consul 和 Consul Clients dockerized的主要内容,如果未能解决你的问题,请参考以下文章
Spring Cloud Consul—git2consul与配置
Spring Cloud Consul 和 Consul Clients dockerized