Docker ComposeでFessとElasticsearchのコンテナを一気に作成＆起動

# Fessとは
公式サイト: [http://fess.codelibs.org/ja/](http://fess.codelibs.org/ja/)
Fessとは、Javaで作られた全文検索サーバーです。Github上にApacheライセンスで公開されており、Webサイト、ファイルシステム等のクロールを行い、Googleの検索エンジンのようなものを簡単に導入することができるものです。
また、GUIによる操作で設定を行えるため、管理も容易に行えます。
今回はDocker Composeを使って、FessのコンテナとElasticsearchのコンテナを連携して立ち上げてみます。

# 環境
Ubuntu 16.10
java version "1.8.0_111"
Fess 10.2.3
Elasticsearch 2.3.5

# 手順
今回はFessの公式リポジトリにCompose fileが公開されているので、これをそのまま利用してみます。

```
$ git clone git@github.com:codelibs/docker-fess.git
Cloning into 'docker-fess'...
remote: Counting objects: 116, done.
remote: Compressing objects: 100% (19/19), done.
remote: Total 116 (delta 5), reused 0 (delta 0), pack-reused 95
Receiving objects: 100% (116/116), 18.00 KiB | 0 bytes/s, done.
Resolving deltas: 100% (37/37), done.
$ cd ./docker-fess/compose
$ docker-compose up -d
~中略~
Creating compose_elasticsearch_1
Creating compose_fess_1
```
初回はコンテナの作成に時間がかかりますが、無事起動したようです。確かめてみましょう。

```
$ docker ps
12ee47c27373        compose_fess            "/docker-entrypoint.s"   About a minute ago   Up About a minute   0.0.0.0:8080->8080/tcp   compose_fess_1
c3d18d223903        compose_elasticsearch   "/docker-entrypoint.s"   About a minute ago   Up About a minute   9200/tcp, 9300/tcp       compose_elasticsearch_1

$ curl localhost:8080 -I
HTTP/1.1 200 
Set-Cookie: JSESSIONID=F3C021989F8EF3DD4340DE872AE168A6;path=/;HttpOnly
Pragma: no-cache
Cache-Control: no-cache, no-store
Expires: Thu, 01 Dec 1994 16:00:00 GMT
Content-Type: text/html;charset=UTF-8
Transfer-Encoding: chunked
Date: Fri, 02 Dec 2016 06:54:32 GMT
```
ちゃんとアクセスできるようです。
しかしこのままではElasticsearchは外部に公開されないので、ホストOSからアクセスできません。
何かと不便なこともあるかもしれないので、ポートフォワーディングの設定を追加してみます。

Compose fileの書式は、[公式リファレンス](http://docs.docker.jp/compose/compose-file.html)に詳しく載っており、また日本語化もされているので非常にわかりやすいです。
ここを読み進めていくと、どうやら[ports](http://docs.docker.jp/compose/compose-file.html#ports)をいじればよさそうなので、早速Compose fileを編集してみましょう。

```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
    ports:
      - "9200:9200"
      - "9300:9300"
```

最後の3行を付け足し、もう一度立ち上げ直してみましょう。

```
$ docker-compose restart
Restarting compose_fess_1 ... done
Restarting compose_elasticsearch_1 ... done

$ docker ps
2ec1784e9f32        compose_fess            "/docker-entrypoint.s"   About a minute ago   Up 32 seconds       0.0.0.0:8080->8080/tcp                           compose_fess_1
e87eb4194bdf        compose_elasticsearch   "/docker-entrypoint.s"   About a minute ago   Up 32 seconds       0.0.0.0:9200->9200/tcp, 0.0.0.0:9300->9300/tcp   compose_elasticsearch_1

$ curl localhost:9200
{
  "name" : "Man-Wolf",
  "cluster_name" : "elasticsearch",
  "version" : {
    "number" : "2.3.5",
    "build_hash" : "90f439ff60a3c0f497f91663701e64ccd01edbb4",
    "build_timestamp" : "2016-07-27T10:36:52Z",
    "build_snapshot" : false,
    "lucene_version" : "5.5.0"
  },
  "tagline" : "You Know, for Search"
}
```

うまくいきました。



# まとめ
今回は公式に配布されているCompose fileから、FessとElasticsearchをまとめてあげてみました。
ほとんど構築の手間がかからないので、お手軽に使えるのではないでしょうか。