この記事はFess Advent Calendar 2016の24日目の記事になります。
←前の記事 次の記事→
今回は、Dockerを使ってデータを永続化させるひとつの手段であるNamed Data Volume機能を用いて、ElasticsearchのデータをNamed Data Volumeに保存してみたいと思います。
Named Data Volumeとは
コンテナでデータを管理する — Docker-docs-ja 1.9.0b ドキュメント
こちらに書かれているように、データ保持のため Named Volume と呼ばれる領域をホストOSに作成し、それに名前をつけて管理しています。
ここでは詳しくは述べませんが、以下のリンクがわかりやすかったです。
Docker の Data Volume まわりを整理する
それでは、ElasticsearchのデータをNamed Data Volumeに保存してみましょう。
環境
Ubuntu 16.10
java version "1.8.0_111"
Fess 10.2.3
Elasticsearch 2.3.5
Docker version 1.12.3, build 6b644ec
Docker Composeの設定
version: '2'
services:
fess:
build: ./fess
ports:
- "8080:8080"
depends_on:
- elasticsearch
environment:
- ES_HTTP_URL=http://compose_elasticsearch_1:9200
- ES_TRANSPORT_URL=compose_elasticsearch_1:9300
- FESS_DICTIONARY_PATH=/usr/share/elasticsearch/config/
elasticsearch:
build: ./elasticsearch
volumes:
- esdata:/usr/share/elasticsearch/data
- esconfig:/usr/share/elasticsearch/config
volumes:
esdata:
driver: local
esconfig:
driver: local
ElasticsearchのDocker file
FROM elasticsearch:2.3.5
RUN /usr/share/elasticsearch/bin/plugin install org.codelibs/elasticsearch-analysis-fess/2.3.0 && \
/usr/share/elasticsearch/bin/plugin install org.codelibs/elasticsearch-analysis-ja/2.3.0 && \
/usr/share/elasticsearch/bin/plugin install org.codelibs/elasticsearch-analysis-synonym/2.3.0 && \
/usr/share/elasticsearch/bin/plugin install org.codelibs/elasticsearch-configsync/2.3.1 && \
/usr/share/elasticsearch/bin/plugin install org.codelibs/elasticsearch-dataformat/2.3.0 && \
/usr/share/elasticsearch/bin/plugin install org.codelibs/elasticsearch-langfield/2.3.0 && \
/usr/share/elasticsearch/bin/plugin install http://maven.codelibs.org/archive/elasticsearch/plugin/kopf/elasticsearch-kopf-2.0.1.0.zip && \
/usr/share/elasticsearch/bin/plugin install org.codelibs/elasticsearch-analysis-kuromoji-neologd/2.3.1
RUN (echo "configsync.config_path: /usr/share/elasticsearch/config"; \
echo "script.engine.groovy.inline.update: on") | \
tee -a /usr/share/elasticsearch/config/elasticsearch.yml
EXPOSE 9200 9300
ENTRYPOINT ["/docker-entrypoint.sh"]
CMD ["elasticsearch"]
他はそのままでOKです。
結果
ここで$ docker-compose up -d --build
して起動した後、ウェブのクロール設定などから適当にクローラ設定を追加してみます。
そして
$ docker-compose stop
$ docker rm `docker ps -a -q`
$ docker-compose up -d --build
で再起動してやると、Elasticsearchのコンテナは削除されたのにクローラの設定が復元されています!
つまり、コンテナ削除&作成しても消去されないデータの作成に成功しました。便利ですね。
今まで作成した実際のVolumeを確認するには$ docker volume ls
で確認できます。
Dockerを使用していると、どんどん不要なVolumeが作成されていることがあるので、定期的に
$ docker volume ls -f "dangling=true" -q | xargs docker volume rm
で削除してあげましょう(参考:Dockerの不要なボリュームを削除する - 座敷牢日誌)。
他にも、データの永続化にはホストOSのディレクトリを直接マウントさせることや、Data Volume Containerと呼ばれるデータ保持用のコンテナを作成することもできますが、Named Data Volumeが一番とっつきやすかったです。
お試しあれ。