LoginSignup
6

More than 5 years have passed since last update.

Docker上でElasticsearchのデータをNamed Data Volumeに保存しFessで利用する

Last updated at Posted at 2016-12-23

この記事は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の設定

docker-compose.yml
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が一番とっつきやすかったです。
お試しあれ。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6