search
LoginSignup
56

More than 5 years have passed since last update.

posted at

updated at

Organization

Ambassadorパターンを使った複数のDockerホストにおけるコンテナ間通信

概要

Dockerコンテナが複数のサーバにデプロイされているときに、コンテナ同士が通信する必要がある。通信させるためには、いくつかの方法がある。

  • PipeworkでIPを割り当て、ホスト間でブリッジをGRE接続する。
  • 各ホスト間でVPN接続する。
  • Ambassadorパターンで通信する。

Pipeworkや、VPNを使った通信ではDockerの外部で設定を行う必要があるため、手順が多くなるという欠点がある。

今回は、Ambassadorパターンで通信してみる。
Ambassadorパターンは、各DockerホストにプロキシとなるAmbassadorコンテナ配置する。このパターンを使うと、クライアントやサーバコンテナは具体的なIPを隠蔽することが可能になる。

簡単な概要図を示す。

Docker_Ambassadorパターン.png

Ambassadorコンテナも通常のコンテナと同様にOSも含まれているが、docker-ut(docker unittest)イメージを基礎として構築されており、フットプリントは非常に軽く、7MB程度である。

環境

クライアント側DockerホストIP: 172.12.8.151
サーバ側DockerホストIP: 172.12.8.152

サーバ側の起動

今回は、前回の記事で構築したElasticsearchのコンテナを使う。

Elasticsearchコンテナの起動

run_elasticsearch_container
docker run -d -name elasticsearch reoring/docker-elasticsearch

サーバ側Ambassadorコンテナの起動

run_elasticsearch_ambassador_container
docker run -d -link elasticsearch:elasticsearch -name elasticsearch_ambassador -p 9200:9200 svendowideit/ambassador

接続確認

サーバ側Dockerホストから

netcat_on_server
% nc -vn 127.0.0.1 9200
Connection to 127.0.0.1 9200 port [tcp/*] succeeded!

クライアント側Dockerホストから

netcat_on_client
% nc -vn 172.12.8.152 9200
Connection to 172.12.8.152 9200 port [tcp/*] succeeded!

クライアント側の起動

run_ambassador
docker run -d -name elasticsearch_ambassador -expose 9200 -e ELASTICSEARCH_PORT_9200_TCP=tcp://172.12.8.152:9200 svendowideit/ambassador
test_shell
docker run -i -t -rm -link elasticsearch_ambassador:elasticsearch ubuntu /bin/bash

接続確認

直前に起動したクライアント側から、サーバ側にクエリを行なう。

curl -X GET http://$ELASTICSEARCH_PORT_9200_TCP_ADDR:9200/

結果

result
{
  "ok" : true,
  "status" : 200,
  "name" : "Bill Foster",
  "version" : {
    "number" : "0.90.10",
    "build_hash" : "0a5781f44876e8d1c30b6360628d59cb2a7a2bbb",
    "build_timestamp" : "2014-01-10T10:18:37Z",
    "build_snapshot" : false,
    "lucene_version" : "4.6"
  },
  "tagline" : "You Know, for Search"
}

おわりに

今回は、Ambassadorと、Docker Linkの組み合せで通信を行なったが、環境変数に依存しており現実のアプリケーションでどのように通信するかまでは言及していない。次回ではどのようにしてアプリケーションから通信するかまでを踏まえて書いていく。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
56