docker consul registrator 服务自动注册consul 微服务动态扩容

背景

使用consul做服务发现需要服务将ip、端口注册到consul中,规模较小的微服务可以通过配置来维护,但是一旦规模过大或者需要动态扩容时固定的ip、端口就无法使用了。
可以通过registrator这个服务来自动监控docker中的容器,将识别到的ip和端口注册到consul中,这样就可以自适应扩容后的微服务了。

network

sudo docker network create consul-net

consul

sudo docker run -d \
    --name consul \
    --network consul-net \
    -p 8500:8500 \
    consul:latest agent -server -bootstrap-expect=1 -ui -client=0.0.0.0

registrator

# 注意标签是master不是latest
sudo docker pull gliderlabs/registrator:master

sudo docker run -d \
    --name registrator \
    --network consul-net \
    --volume=/var/run/docker.sock:/tmp/docker.sock \
    gliderlabs/registrator:master \
    -internal consul://consul:8500

# 可以指定绑定的ip而不是使用internal局域网模式
sudo docker run -d \
    --name registrator \
    --network consul-net \
    --volume=/var/run/docker.sock:/tmp/docker.sock \
    gliderlabs/registrator:master \
    -internal=false -ip=192.168.1.1 consul://consul:8500

测试服务

sudo docker run -d \
    --name my-web-app \
    --network consul-net \
    -p 8080:80 \
    --label "SERVICE_NAME=my-web-service" \
    --label "SERVICE_TAGS=web,production" \
    nginx:alpine

# 可以让docker自动分配随机端口
# 只指定容器内的80端口,或直接-P(大写的P) 不带额外的参数将所有端口都暴露出来并随机分配
sudo docker run -d \
    --name my-web-app \
    --network consul-net \
    -p 80 \
    --label "SERVICE_NAME=my-web-service" \
    --label "SERVICE_TAGS=web,production" \
    nginx:alpine

sudo docker run -d \
    --name my-web-app \
    --network consul-net \
    -P \
    --label "SERVICE_NAME=my-web-service" \
    --label "SERVICE_TAGS=web,production" \
    nginx:alpine

备注

可以通过docker port查看容器的端口情况

image

posted @ 2026-06-02 17:38  Hey,Coder!  阅读(6)  评论(0)    收藏  举报