通过registrator自动发现容器内的服务,注册到consul,通过consul -template动态修改nginx配置文件实现动态负载。
docker-compose.yml:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
   | version: '3'
  services:   consul:     image: consul     environment:       SERVICE_8500_NAME: "consul-ui"       SERVICE_8500_TAGS: "consul,http,ui"     ports:       - 8500:8500     network_mode: host     volumes:       - /data/consul/data:/consul/data       - ./conf.d:/consul/config     command: "agent -server -bootstrap-expect 1 -ui -disable-host-node-id -client 0.0.0.0 -bind 172.17.0.13"
    registrator:     image: gliderlabs/registrator     depends_on:       - consul     volumes:       - /var/run/docker.sock:/tmp/docker.sock     network_mode: host     environment:       CONSUL_HTTP_TOKEN: ${CONSUL_HTTP_TOKEN}     command: -internal consul://127.0.0.1:8500
    nginx-consul:     image: nginx-consul:alpine     build: .     depends_on:       - consul       - registrator     ports:       - 80:80     network_mode: host     volumes:       - ./files/nginx.conf.ctmpl:/etc/nginx/nginx.conf.ctmpl     environment:       HOST_TYPE: ${HOST_TYPE}       CONSUL_HTTP_TOKEN: ${CONSUL_HTTP_TOKEN}     command: -consul-addr=127.0.0.1:8500 -wait=5s -template /etc/nginx/nginx.conf.ctmpl:/etc/nginx/conf.d/app.conf:/etc/nginx/nginx.sh
   | 
 
Dockerfile:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
   | FROM nginx:alpine
  RUN apk update && \     apk add --no-cache unzip
 
  ENV PACKAGE consul-template_0.20.0_linux_amd64.zip
 
  ADD files/nginx.conf files/nginx.conf.ctmpl files/nginx.sh files/${PACKAGE} /etc/nginx/
  RUN unzip /etc/nginx/${PACKAGE} -d /usr/bin && \     chmod +x /usr/bin/consul-template && \     rm -f /etc/nginx/${PACKAGE} && \     chmod +x /etc/nginx/nginx.sh && \     apk del unzip
  WORKDIR /etc/nginx ENTRYPOINT ["/usr/bin/consul-template"]
   | 
 
conf.d/acl.json:
1 2 3 4 5 6 7 8
   | [root@VM_0_13_centos nginx-consul] {     "acl_datacenter": "dc1",     "acl_master_token": "xxxxxxxxxxxxxxxxxxxxxxxxxxxx",     "acl_agent_token": "xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxxx",     "acl_default_policy": "deny",     "acl_down_policy": "extend-cache" }
   |