【Elasticsearch】DockerでElasticsearchを使えるようにする

## 目的
Elasticsearchについてキャッチアップしていくにあたって、手を動かせる環境がほしい。
そのために今回はDockerを使ってElasticStackを使えるようにしました。

## 結論
[docker-elk](https://github.com/deviantony/docker-elk)を見て進めたらすぐにできちゃいます。

## いざ作成
### cloneする
[docker-elk](https://github.com/deviantony/docker-elk)からcloneしてきます。
``` bash
git clone https://github.com/deviantony/docker-elk
```

### 日本語分析のためにプラグインを入れる
`elasticsearch/Dockerfile`に下記を追加する
``` dockerfile
ARG ELASTIC_VERSION

# https://www.docker.elastic.co/
FROM docker.elastic.co/elasticsearch/elasticsearch:${ELASTIC_VERSION}

# Add your elasticsearch plugins setup here
# Example: RUN elasticsearch-plugin install analysis-icu
RUN curl -L -k -O https://artifacts.elastic.co/downloads/elasticsearch-plugins/analysis-kuromoji/analysis-kuromoji-8.7.0.zip
RUN curl -L -k -O https://artifacts.elastic.co/downloads/elasticsearch-plugins/analysis-icu/analysis-icu-8.7.0.zip 

RUN cp analysis-* /tmp

RUN /usr/share/elasticsearch/bin/elasticsearch-plugin install file:///tmp/analysis-kuromoji-8.7.0.zip
RUN /usr/share/elasticsearch/bin/elasticsearch-plugin install file:///tmp/analysis-icu-8.7.0.zip
```
コメントにも書かれているように本来であれば
`RUN elasticsearch-plugin install analysis-kuromoji`でインストールできると思います。今回は諸事情のため上記の書き方をしています。

### ビルド、起動
ビルドと起動をしていきます。
``` bash
docker compose build
~
docker compose up
```

### Kibanaにアクセス
`http://localhost:5601`にアクセス
認証情報はdefaultで下記の通り
User: elastic
Password: changeme
認証されてホーム画面が表示されたら成功です。

### パスワードの更新
defaultで利用されているパスワードは万が一があると危険なので更新します。
下記を順番に実行します。
`New value:`のところが新しいパスワードのため控えてください。
``` bash
docker compose exec elasticsearch bin/elasticsearch-reset-password --batch --user elastic
Password for the [elastic] user successfully reset.
New value: new_password
```

``` bash
docker compose exec elasticsearch bin/elasticsearch-reset-password --batch --user logstash_internal
Password for the [logstash_internal] user successfully reset.
New value: new_password
```

``` bash
docker compose exec elasticsearch bin/elasticsearch-reset-password --batch --user kibana_system
Password for the [kibana_system] user successfully reset.
New value: new_password
```

## envの更新
envファイルの下記の部分を先程発行したパスワードに置き換える
```
ELASTIC_VERSION=8.7.0

## Passwords for stack users
#

# User 'elastic' (built-in)
#
# Superuser role, full access to cluster management and data indices.
# https://www.elastic.co/guide/en/elasticsearch/reference/current/built-in-users.html
ELASTIC_PASSWORD='new_password' #　ここを更新

# User 'logstash_internal' (custom)
#
# The user Logstash uses to connect and send data to Elasticsearch.
# https://www.elastic.co/guide/en/logstash/current/ls-security.html
LOGSTASH_INTERNAL_PASSWORD='new_password' #　ここを更新

# User 'kibana_system' (built-in)
#
# The user Kibana uses to connect and communicate with Elasticsearch.
# https://www.elastic.co/guide/en/elasticsearch/reference/current/built-in-users.html
KIBANA_SYSTEM_PASSWORD='new_password' #　ここを更新
~
```

下記のコマンドを実行して再起動します。
```
docker-compose up -d logstash kibana
```

## 再度Kibanaにアクセス
`http://localhost:5601`にアクセス
認証情報はdefaultで下記の通り
User: elastic
Password: new_password

### 試しにGETしてみる
Dev Toolsにて下記を実行する
```
GET _security/role
```
defaultでのロールが確認できれば大丈夫。
`watcher_user`などなど