Dockerコンテナ上にElasticsearchとKibanaの環境をつくる

概要

Dockerのお勉強として、Dockerを利用して、ElasticsearchとKibanaの環境をつくって見たいと思います。 また、複数のコンテナを扱うため、docker-composeを使用してみます。

Dockerの環境構築は下で記事でまとめました。 ugap.hatenablog.com

環境

  • Docker 1.11.1
  • docker-compose 1.7.1

構成

$ tree
.
├── docker-compose.yml
└── es_config
    ├── elasticsearch.yml
    ├── log4j2.properties
    └── scripts

docker-compose.yml

es: #--(1)
  image: elasticsearch:5 #--(2)
  ports:
    - "9200:9200" #--(3)
    - "9300:9300" #--(3)
  volumes:
    - "$PWD/es_config:/usr/share/elasticsearch/config" #--(4)
  environment:
    ES_JAVA_OPTS: "-Xms512m -Xmx512m" #--(5)

ki:
  image: kibana:5
  ports:
    - "5601:5601"
  links:
    - es
  environment:
    - ELASTICSEARCH_URL=http://192.168.33.10:9200
項番 説明
(1) elasticsearchの設定をesというサービス名で定義。
(2) elasticsearch公式のdockerイメージのversion5を指定。
(3) Elasticsearch で使用する HTTP用のデフォルトポートは9200、ノード間のコミュニケーション用に 9300を使用するため、ポートを公開する。
(4) es_configというディレクトリとelasticsearchを動かすdockerコンテナ上の/usr/share/elasticsearch/configのパスを紐づけ。
/usr/share/elasticsearch/configにはelasticsearchの設定ファイルelasticsearch.ymlが置いてある。(中身は後述)
(5) デフォルトではヒープサイズが2gのようで、下げてあげないとエラーがでてしまうので、ここで設定する。

Kibanaの設定も同様の考え方なので省略します。

elasticsearch.ymlの設定

http.host: 0.0.0.0 #--(1)

http.cors.enabled: true #--(2)
http.cors.allow-origin: "*" #--(3)
項番 説明
(1) HTTPサービスをバインドするホストアドレス。
(2) クロスドメイン通信を有効にする。
(3) 許容するドメインを指定。(今回は*としていますが、セキュリティ上のリスクがあります。)

実行

docker-composeを実行してみます。

$ docker-compose up -d

-dオプションでバックグラウンド実行になります。

ブラウザでhttp://192.168.33.10:5601/にアクセスしてみます。

f:id:uggds:20170716232919p:plain

うまく表示されました。

まとめ

docker-composeで複数のdockerコンテナを管理することができました。
elasticsearch、kibanaは様々なデータの解析・可視化をするのに注目されているOSSですが、設定できることがたくさんあるので、 一度つくった環境をどこでも作れるようにするansibleやdockerとのコラボが適しているなと思いました。

次はこの環境を利用して、何かKibanaで可視化してみたいと思います。