概要
-
Docker Composeを利用して、Elasticsearchを3ノード1クラスタ構成で起動させた -
Kibanaも立ち上げて、Elasticsearchと連携させた -
Docker Composeの設定値について、自分の理解した内容をまとめた
更新履歴
- 2020/06/07
- Elasctic Stackのver.を
6.3.1=>7.7へ変更 - Docker Compose(Mac)のver.を
1.22.0=>1.25.5で動作確認
- Elasctic Stackのver.を
GitHub
環境
- Elasticsearch 7.7.1
- Kibana 7.7.1
- Docker Compose 1.25.5
必要なファイル
.
├── docker-compose.yml
├── es
│ ├── Dockerfile
│ └── config
│ ├── elasticsearch.yml # 必要に応じて設定を追記する
│ └── log4j2.properties # 必要に応じて設定を追記する
└── kibana
└── Dockerfile
└── config
└── kibana.yml # 必要に応じて設定を追記する
動作確認
起動
以下の手順でElasticsearchとKibanaのコンテナを起動させる
# リポジトリをcloneして、docker-compose.ymlが配置されているディレクトリに移動
$ git clone git@github.com:sugikeitter/elasticsearch-kibana-docker.git
$ cd elasticsearch-kibana-docker
# docker-compose.ymlからDockerイメージをビルド
$ docker-compose build
# ビルドが成功したらコンテナ起動
$ docker-compose up
Kibanaへ接続
ブラウザでhttp://localhost:5601/へアクセス
docker-compose.ymlの設定について
services
- この下にコンテナを定義していく
-
ここで定義したservice名はコンテナ間で通信する時のホスト名のような役割になる
- 下で出てくる
container_nameと違い、Docker Composeで利用される名称 - ElasticSearchの設定である
node.nameやdiscovery.seed_hostsの値をコンテナ間の通信する時の名前として利用するようなので、serviceの名前とこの設定値は合わせておいた方が良い
- 下で出てくる
- 今回の場合だと
es01,es02,es03,kibana01という4つ定義している
build
- 指定したディレクトリのDockerfileを利用してコンテナを起動させることができる
-
Elasticsearchプロセス用のコンテナは3つあるが、今回は3つとも利用するDockerイメージは同じにしているため、全て./esを指定する- つまり
./es/Dockerfileからコンテナを起動する
- つまり
-
Kibanaプロセス用のコンテナは./kibanaを指定し、./kibana/Dockerfileからコンテナを起動する
container_name
-
docker psした時に表示されるdockerコンテナの名前 -
Docker ComposeではなくDocker側の機能で、同一ホストマシン上では同じ名前のコンテナは複数起動できないので注意
environment
- 環境変数を追加することができる
- 今回は
ES_JAVA_OPTSというElasticsearchで利用されるJava起動引数を追加で設定した-
Elasticsearchとしてはjvm.optionsを利用すればJava起動引数を一括でまとめることもできる - 今回はデフォルトの
jvm.optionsにヒープサイズだけ追加したかった(のとenvironment設定も使って見たかった)ため、これを利用した
-
- 今回は
ulimits
- コンテナの
ulimitコマンドで設定できる値をデフォルト値から上書きする
volumes
- ホスト側のファイルをコンテナ側へ渡したりできる
-
HOST:CONTAINERの順で設定 - トップレベルの
volumesに名前を定義することで以下のことができる- 複数サービスをまたがってボリュームを利用
- ホスト側へデータを永続化
port
- 公開するポートの設定
-
HOST:CONTAINERの順で設定 - 今回は
es0*はそれぞれポート9200を利用してプロセスを立ち上げているが、ホストマシン経由でコンテナへアクセスする場合にlocalhost:920[1,2,3]でそれぞれのコンテナのElasticsearchへアクセスできるように設定している-
localhost:9201->es01:9200 -
localhost:9202->es02:9200 -
localhost:9203->es03:9200
-
networks
-
Docker Composeの中でさらにネットワークを分けられる設定 - トップレベルの
networksにキーを設定しておき、serviceごとのnetworksでそれを利用することができる - これをserviceに設定すると、同じキーを設定していないserviceからは接続できない
- 最初
kibana01でnetworksを設定していなかったのでKibana->Elasticsearchへ接続できなくてハマった
- 最初