目的
- DockerコンテナでElasticSearchを起動する
- AWSのLambda + ElasticSearchServiceを作る前段階のお勉強のためにやった
やらないこと
- ElasticSearchの基礎的な説明(公式なり他記事を参照してください)
- Docker、docker-composeの環境構築について
環境
- OS: macOS Catalina 10.15.4
- Docker: 2.2.0.5
- docker-compose: 1.25.4
- ElasticSearch: 7.4.2
やったこと
フォルダ構成
今回試したフォルダ構成は以下の通り
将来的にPythonから操作したいため、Pythonのコンテナも用意する
/sample
├ /elasticsearch
└ Dockerfile
├ /python3
└ Dockerfile
└ docker-compose.yaml
Dockerfileの作成
ElasticSearch用のDockerfileを作成
Dockerfile
# Version 7.4.2 を選択してイメージを取得する
FROM docker.elastic.co/elasticsearch/elasticsearch:7.4.2
# 日本語を扱う場合はplugin「analysis-kuromoji」をインストールする
RUN elasticsearch-plugin install analysis-kuromoji
Python3用のDockerfileを作成
Dockerfile
FROM python:3.8
USER root
SHELL ["/bin/bash", "-c"]
ENV DEBCONF_NOWARNINGS yes
RUN apt-get update && apt-get -y install locales && \
localedef -f UTF-8 -i ja_JP ja_JP.UTF-8
ENV LANG ja_JP.UTF-8
ENV LANGUAGE ja_JP:ja
ENV LC_ALL ja_JP.UTF-8
ENV TZ JST-9
ENV TERM xterm
RUN apt-get install -y vim less
RUN pip install --upgrade pip
RUN pip install --upgrade setuptools
# clientである「elasticsearch」をインストール
RUN pip install numpy \
matplotlib \
pandas \
elasticsearch \
docker-compose.yamlの作成
ElasticSearchとpythonのコンテナを立ち上げるためにdocker-compose.yamlを作成
docker-compose.yaml
version: '3'
services:
elasticsearch:
build: ./elasticsearch
container_name: elasticsearch
environment:
- discovery.type=single-node # 1台構成で十分なため「single-node」を設定
- cluster.name=docker-cluster
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
ulimits:
memlock:
soft: -1
hard: -1
ports:
- 9200:9200
volumes:
- ./elasticsearch:/usr/share/elasticsearch/data
networks:
- esnet
python3:
build: ./python3
container_name: python3
working_dir: '/root/dev/'
tty: true
volumes:
- ./python3/:/root/dev/
networks:
- esnet
# Elasticsearchとpython3のコンテナを同じdocker network上に起動させるため、networksを作成
networks:
esnet:
docker-composeコマンドを実行
docker-composeコマンドでコンテナを起動する
$ docker-compose build
$ docker-compose up -d
コンテナが起動していることを確認する
ElasticSearchとpython3の両コンテナが起動していればOK
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d33d23acd0c6 sample_python3 "python3" About a minute ago Up About a minute python3
e3b929c0f521 sample_elasticsearch "/usr/local/bin/dock…" About a minute ago Up About a minute 0.0.0.0:9200->9200/tcp, 9300/tcp elasticsearch
ElastisSearchの起動確認
curlコマンドを使用してElasticsearchに接続する
cluster-nameなどが返却されればOK
$ curl -X GET http://localhost:9200
{
"name" : "37a5326e5c64",
"cluster_name" : "docker-cluster",
"cluster_uuid" : "RX8UaCNpSmmCiyX2p2ra0w",
"version" : {
"number" : "7.4.2",
"build_flavor" : "default",
"build_type" : "docker",
"build_hash" : "2f90bbf7b93631e52bafb59b3b049cb44ec25e96",
"build_date" : "2019-10-28T20:40:44.881551Z",
"build_snapshot" : false,
"lucene_version" : "8.2.0",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}
次回のお話
pythonコンテナからElasticserviceに接続してindexの操作をしてみた
pythonでElasticsearchを操作する(登録・検索)