2016-04-03 2 views
0

nginxでドッカークラスタークラスターを正常にセットアップしました。私のec2インスタンスで。このチュートリアルにdocker swarmにアプリケーションをデプロイして、そのIPアドレスをAレコードに公開する方法

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

を使用して、私はサービスの発見のためにレジでコンソルを使用しています。この

マネージャー1

ノード1

ノード2

のように使用しています。

領事機で ドッキングウィンドウの実行--restart =でない限り、停止-d -p 8500:-bootstrap

スウォームマネージャー ドッキングウィンドウの実行--restart = -server 8500 -h領事のprogrium /領事が停止しない限り、 -d -p 3375:2375 swarm manage --replication --advertise = mangerip:3375 consul:// consulip:8500/

ドッカー実行--restart = unless-stopped -d --name = registrator -h = host --volume =/var/run/docker.sock:/tmp/docker.sock gliderlabs /登録者:最新領事://領事館:8500

ノード1 ドッカーが実行されています - restart = not-stopped -d swarm join --advertise = node1ip:2375 consul:// consulip:8500/

ドッカーが実行されています--restart = unless-stopped -d --name = registrator - h = host --volume =/var/run/docker.sock:/tmp/docker.sock gliderlabs /登録者:最新領事:// consulip:8500

ノード2 ドッカー実行--restart = d-スワーム参加--advertise = node2:2375 consul:// consulip:8500/

ドッカー実行 - restart = unless-stopped -d --name =登録者-h = host --volume =/var/run /docker.sock:/tmp/docker.sock gliderlabs /登録者:最新領事://領事館: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}}; 
    } 
} 

ドッキングウィンドウ-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アドレス私はAレコードを指し示す必要があります。ドッカーがノードを自動的にピックするので。

私が初めてこれを実行しているときに、最初のノードを取得する可能性があります。場合は、私はこれを削除し、別のノードと別のIPを選ぶだろうその時間をもう一度やり直す。私のAレコードを変更する必要があるように。この問題を解決するには、

私はそれを見つけ、waglを見つけました。それは私にDNSベースのサービスの危機管理を提供します。しかし、それは非常に基本的だったと思う、私はそれが生産準備ができているかどうかを知らない。

AからZへのフロー、つまり展開からIPアドレスをAレコードに設定する方法まで、教えてください。またはちょうど私にいくつかのリンクを指します。

答えて

2

私はそれについてあなたの記録を変更する必要はないと思います。既にクラスタのIPアドレスを知っているので、docker-composeを使用して展開する場合は、負荷バランサ環境にを追加することができます。constraint:node==node1

+0

はいこれも私が行ったことです。ありがとうございました。 –

関連する問題