如何在docker swarm上部署应用程序,并将该ip地址暴露给A记录



我已经成功地用nginx建立了docker集群。在我的ec2实例中。使用本教程

https://botleg.com/stories/load-balancing-with-docker-swarm/

我正在像这个一样使用

经理1

节点1

节点2

我正在使用带有registrator的consol进行服务发现。

领事机docker run--restart=除非停止-d-p 8500:8500-h consur progresium/consur-server-bootstrap

Swarm Managerdocker run--restart=除非停止-d-p 3375:2375群管理--复制--advertise=管理:3375consul://consulip:8500/

docker run--restart=除非已停止-d--name=registrator-h=host--volume=/var/run/docker.sock:/tmp/doker.sock-liderlabs/registrator:最新consul://consulip:8500

节点1docker run--restart=除非停止-d swarm join--advertise=node1ip:2375consul://consulip:8500/

docker run--restart=除非已停止-d--name=registrator-h=host--volume=/var/run/docker.sock:/tmp/doker.sock-liderlabs/registrator:最新consul://consulip:8500

节点2docker run--restart=除非停止-d swarm join--advertise=node2:2375consul://consulip:8500/

docker run--restart=除非已停止-d--name=registrator-h=host--volume=/var/run/docker.sock:/tmp/doker.sock-liderlabs/registrator:最新consul://consulip:8500

我的Dockerfile

FROM nginx:latest
RUN apt-get update 
  && apt-get install -y unzip
ADD files/start.sh /bin/start.sh
RUN chmod +x /bin/start.sh
ADD files/default.ctmpl /templates/default.ctmpl
ADD https://releases.hashicorp.com/consul-template/0.12.2/consul-template_0.12.2_linux_amd64.zip /usr/bin/
RUN unzip /usr/bin/consul-template_0.12.2_linux_amd64.zip -d /usr/local/bin
EXPOSE 80
ENTRYPOINT ["/bin/start.sh"]

start.sh

#!/bin/bash
service nginx start
consul-template -consul=$CONSUL_URL -template="/templates/default.ctmpl:/etc/nginx/conf.d/default.conf:service nginx reload"

default.ctmpl

{{$app := env "APP_NAME"}}
upstream {{printf $app}} {
    least_conn;
    {{range service $app}}
    server {{.Address}}:{{.Port}} max_fails=3 fail_timeout=60 weight=1;{{end}}
}
server {
    listen 80 default;
    location / {
        proxy_pass http://{{printf $app}};
    }
}

docker-compose.yml

version: '2'
services:
  lb:
    build: .
    container_name: lb
    ports:
      - "80:80"
    environment:
      - APP_NAME=tutum-nodejs-redis
      - CONSUL_URL=${KV_IP}:8500
    depends_on:
      - web
    networks:
      - front-tier
  web:
    image: hanzel/tutum-nodejs-redis
    ports:
      - "4000"
    environment:
      - APP_PORT=4000
      - REDIS_IP=redis
      - REDIS_PORT=6379
    depends_on:
      - redis
    networks:
      - front-tier
      - back-tier
  redis:
    image: redis
    container_name: redis
    command: redis-server --appendonly yes
    volumes:
      - redis-data:/data
    networks:
      - back-tier
volumes:
  redis-data:
    driver: local
networks:
  front-tier:
    driver: overlay
  back-tier:
    driver: overlay

这个问题,我需要哪个Ip地址指向一个记录,因为docker群自动拾取节点。

比方说,当我第一次运行这个程序时,它可能会获取第一个节点。如果我删除这个并重新执行步骤,那么它将选择不同的节点和不同的ip。所以这一次我需要改变我的A记录。为了解决这个问题,

我在谷歌上搜索了一下,发现了这个笑话。这给了我基于DNS的服务dicovery,这很酷。但我想这是非常基本的,我不知道这是否已经准备好了。

请任何人告诉我,如何从A到Z流,即从部署到配置IP地址到A记录。或者只是给我一些链接。

我认为您不需要为此更改A记录。由于您已经知道集群的ip地址,并且如果您使用docker-compose进行部署,您可以在负载均衡器环境中添加一个constraintconstraint:node==node1

相关内容

  • 没有找到相关文章

最新更新