Docker Composeを利用したElasticsearch + Kibanaの作成方法(Elasticsearch7.14.0) 

# はじめに

Elasticsearch+Kibanaで情報を取得して可視化する際に、本番環境以外に自分自身で好き放題触れる環境が欲しかったため、CentOSの開発マシンと個人のMac端末にDocker ComposeでHTTP版のElasticsearch+Kibanaの環境を作成しました。備忘録として情報を残します。今回はElasticsearch,KibanaのDocker公式イメージだけで作成しています。カスタマイズしたい場合、別途Docker Fileを作成してbuildする必要があります。

社内proxyに阻まれそうであれば、事前に、
.bashrc、/etc/yum.conf、/etc/systemd/system/docker.service等にproxy設定をしておきます。

## 1 Dockerのインストール

repositoryのセットアップ

```bash
$ sudo yum install -y yum-utils

$ sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
```

必要なパッケージのインストール

```bash
$ sudo yum install docker-ce docker-ce-cli containerd.io
```

dockerの起動とバージョン確認

```bash
$ sudo systemctl start docker
$ sudo docker --version
```

その他のディストリビューションや別バージョンは以下の公式参照<br>
[Install Docker Engine ](https://docs.docker.com/engine/install/)

## 2 Docker Composeのインストール

必要なパッケージのインストール

```bash
$ sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
```

バイナリの実行権限を適用する

```bash
$ sudo chmod +x /usr/local/bin/docker-compose
```

バージョン確認


```bash
$ docker-compose --version
docker-compose version 1.29.2, build 1110ad01
```

その他のディストリビューションや別バージョンは以下の公式参照<br>
[Install Docker Compose](https://docs.docker.com/compose/install/)

## 3 Docker ComposeでElasticsearch及びKibanaの起動

ディレクトリ構成は以下のようにしています。
任意のディレクトリ配下にelasticstackディレクトリを作成し、その配下でDocker　Composeファイル群を管理しています。（今回の定義ファイルdocker-compose.ymlは最も簡易的な構成にしたため、elasticsearch.yml,kibana.ymlのマウントはしていません。マウントする場合はdocker-compose.ymlに追記します。）

```
./elasticstack/
├── docker-compose.yml
├── elasticsearch
│   └── conf
│       └── elasticsearch.yml
└── kibana
    └── conf
        └── kibana.yml
```



elasticstackディレクトリ配下にdocker-compose.ymlを作成します。
[elasticの公式ページ](https://www.elastic.co/guide/en/elasticsearch/reference/current/docker.html)のElasticsearchの記述に加え、Kibanaの情報も記載します。

```yml
#docker-yml from elastic sample +kibana
version: '2.2'
services:
  es01:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.14.0
    container_name: es01
    environment:
      - node.name=es01
      - cluster.name=es-docker-cluster
      - discovery.seed_hosts=es02,es03
      - cluster.initial_master_nodes=es01,es02,es03
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - data01:/usr/share/elasticsearch/data
    ports:
      - 9200:9200
    networks:
      - elastic
  es02:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.14.0
    container_name: es02
    environment:
      - node.name=es02
      - cluster.name=es-docker-cluster
      - discovery.seed_hosts=es01,es03
      - cluster.initial_master_nodes=es01,es02,es03
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - data02:/usr/share/elasticsearch/data
    networks:
      - elastic
  es03:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.14.0
    container_name: es03
    environment:
      - node.name=es03
      - cluster.name=es-docker-cluster
      - discovery.seed_hosts=es01,es02
      - cluster.initial_master_nodes=es01,es02,es03
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - data03:/usr/share/elasticsearch/data
    networks:
      - elastic
  kibana:
    image: docker.elastic.co/kibana/kibana:7.14.0
    ports:
      - 5601:5601
    environment:
      SERVER_NAME: localhost:5601
      ELASTICSEARCH_HOSTS: http://es01:9200
    networks:
      - elastic

volumes:
  data01:
    driver: local
  data02:
    driver: local
  data03:
    driver: local

networks:
  elastic:
    driver: bridge


```

out of memory exceptions回避のため、docker-composeを起動する前に以下の設定を実施します。
（デフォルト値だと容量が足りず、エラーで起動できない）

```bash
$ grep vm.max_map_count /etc/sysctl.conf
vm.max_map_count=262144
```

```bash
$ sysctl -w vm.max_map_count=262144
```

docker-composeでコンテナを起動します。（-dはバックグラウンドオプション）

```bash
$ docker-compose up -d
```

コンテナの起動状態を確認します。


```bash
$ docker-compose ps
        Name                       Command               State                         Ports                       
-------------------------------------------------------------------------------------------------------------------
elasticstack_kibana_1   /bin/tini -- /usr/local/bi ...   Up      0.0.0.0:5601->5601/tcp,:::5601->5601/tcp          
es01                    /bin/tini -- /usr/local/bi ...   Up      0.0.0.0:9200->9200/tcp,:::9200->9200/tcp, 9300/tcp
es02                    /bin/tini -- /usr/local/bi ...   Up      9200/tcp, 9300/tcp                                
es03                    /bin/tini -- /usr/local/bi ...   Up      9200/tcp, 9300/tcp  
```

コンテナが正常に起動していれば、Chrome等のブラウザから http://localhost:5601 にアクセスすると、KibanaからElasticStackの状態を確認できます。

![b5907042f914b42bbf452530488b78ce.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/269521/e4760e09-7843-5c09-285a-3c38943bcb65.gif)


# 参考
* [Install Docker Engine ](https://docs.docker.com/engine/install/)
* [Install Docker Compose](https://docs.docker.com/compose/install/)
* [Install Elasticsearch with Docker](https://www.elastic.co/guide/en/elasticsearch/reference/current/docker.html)