使用Docker Compose在中运行Elasticsearch + Kibana
概括
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で動作確認
GitHub = GitHub
杰特哈布
- https://github.com/sugikeitter/elasticsearch-kibana-docker
环境
-
- 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的配置
这次创建的docker-compose.yml文件在这里。
服务
-
- この下にコンテナを定義していく
ここで定義したservice名はコンテナ間で通信する時のホスト名のような役割になる
下で出てくるcontainer_nameと違い、Docker Composeで利用される名称
ElasticSearchの設定であるnode.nameやdiscovery.seed_hostsの値をコンテナ間の通信する時の名前として利用するようなので、serviceの名前とこの設定値は合わせておいた方が良い
今回の場合だとes01, es02, es03, kibana01という4つ定義している
建设
-
- 指定したディレクトリのDockerfileを利用してコンテナを起動させることができる
Elasticsearchプロセス用のコンテナは3つあるが、今回は3つとも利用するDockerイメージは同じにしているため、全て./esを指定する
つまり./es/Dockerfileからコンテナを起動する
Kibanaプロセス用のコンテナは./kibanaを指定し、./kibana/Dockerfileからコンテナを起動する
容器名称 qì
docker psした時に表示されるdockerコンテナの名前
Docker ComposeではなくDocker側の機能で、同一ホストマシン上では同じ名前のコンテナは複数起動できないので注意
环境
-
- 環境変数を追加することができる
今回はES_JAVA_OPTSというElasticsearchで利用されるJava起動引数を追加で設定した
Elasticsearchとしてはjvm.optionsを利用すればJava起動引数を一括でまとめることもできる
今回はデフォルトのjvm.optionsにヒープサイズだけ追加したかった(のとenvironment設定も使って見たかった)ため、これを利用した
资源限制
- コンテナのulimitコマンドで設定できる値をデフォルト値から上書きする
分卷
-
- ホスト側のファイルをコンテナ側へ渡したりできる
HOST:CONTAINERの順で設定
トップレベルのvolumesに名前を定義することで以下のことができる
複数サービスをまたがってボリュームを利用
ホスト側へデータを永続化
港口
-
- 公開するポートの設定
HOST:CONTAINERの順で設定
今回はes0*はそれぞれポート9200を利用してプロセスを立ち上げているが、ホストマシン経由でコンテナへアクセスする場合にlocalhost:920[1,2,3]でそれぞれのコンテナのElasticsearchへアクセスできるように設定している
localhost:9201->es01:9200
localhost:9202->es02:9200
localhost:9203->es03:9200
网络
Docker Composeの中でさらにネットワークを分けられる設定
トップレベルのnetworksにキーを設定しておき、serviceごとのnetworksでそれを利用することができる
これをserviceに設定すると、同じキーを設定していないserviceからは接続できない
最初kibana01でnetworksを設定していなかったのでKibana->Elasticsearchへ接続できなくてハマった
请参考
-
- Install Elasticsearch with Docker
-
- Running Kibana on Docker
-
- Compose file version 3 reference
-
- はじめての Elasticsearch – Qiita
- Dockerを利用して Elasticsearch + Kibana の環境を作る – Qiita