SolrをDockerで稼働させるにあたっては、公式に提供されているコンテナイメージを利用することができます。ただし、このページの説明は非常に簡素なので、利用法については GitHub の README を参照した方が分かりやすいと思います。
起動
docker run -d -p 8983:8983 --name my_solr solr solr-precreate gettingstarted
サンプルデータの投入
docker exec -it my_solr post -c gettingstarted example/exampledocs/manufacturers.xml
データの確認
$ curl 'http://localhost:8983/solr/gettingstarted/select?q=*%3A*&rows=1' { "responseHeader":{ "status":0, "QTime":1, "params":{ "q":"*:*", "rows":"1"}}, "response":{"numFound":11,"start":0,"docs":[ { "id":"adata", "compName_s":"A-Data Technology", "address_s":"46221 Landing Parkway Fremont, CA 94538", "_version_":1670098040008998912}] }}
コンテナの中はどうなっているか
コンテナに入って中を確認してみます。
$ sudo docker exec -it my_solr /bin/bash solr@ef3c76ff156a:/opt/solr-8.5.2$ pwd /opt/solr-8.5.2 solr@ef3c76ff156a:/opt/solr-8.5.2$ ls CHANGES.txt LICENSE.txt LUCENE_CHANGES.txt NOTICE.txt README.txt bin contrib dist example licenses server
Solr は /opt/solr-8.5.2 にインストールされていて、solr ユーザのホームディレクトリになっていることが分かります。
solr@ef3c76ff156a:/opt/solr-8.5.2$ cat /etc/os-release PRETTY_NAME="Debian GNU/Linux 10 (buster)" NAME="Debian GNU/Linux" VERSION_ID="10" VERSION="10 (buster)" VERSION_CODENAME=buster ID=debian HOME_URL="https://www.debian.org/" SUPPORT_URL="https://www.debian.org/support" BUG_REPORT_URL="https://bugs.debian.org/" solr@ef3c76ff156a:/opt/solr-8.5.2$ dpkg --list|grep solr
OS は Debian buster です。Solr パッケージを使っている訳ではないです。
solr@ef3c76ff156a:/opt/solr-8.5.2$ find /var/solr -type d /var/solr /var/solr/data /var/solr/data/gettingstarted /var/solr/data/gettingstarted/data /var/solr/data/gettingstarted/data/snapshot_metadata /var/solr/data/gettingstarted/data/tlog /var/solr/data/gettingstarted/data/index /var/solr/data/gettingstarted/conf /var/solr/data/gettingstarted/conf/lang /var/solr/data/userfiles /var/solr/data/filestore /var/solr/logs
データは /var/solr 以下に格納されます。
solr@ef3c76ff156a:/opt/solr-8.5.2$ ls /opt/docker-solr/scripts/ docker-entrypoint.sh init-var-solr oom_solr.sh precreate-core run-initdb solr-create solr-demo solr-fg solr-foreground solr-precreate start-local-solr stop-local-solr wait-for-solr.sh wait-for-zookeeper.sh
コンテナ外からの操作で使われるスクリプトが /opt/docker-solr/scripts 以下に置かれています。起動時に使った solr-precreate はここに置かれているものです。
solr-precreate の中身は、/opt/solr/server/solr/configsets/_defaults の設定ファイルを指定されたコアのディレクトリ(上の例なら /var/solr/data/gettingstarted/conf)にコピーしてコアを作成してから Solr を起動するというものになっています。
SolrのデータをホストOS側に置く
データサイズが気になる場合や、インデックスの使い回しをしたい場合などには、SolrのデータをホストOS側に置くこともできます。
$ mkdir solrdata $ sudo chown 8983:8983 solrdata/ $ sudo docker run -d -v "$PWD/solrdata:/var/solr" -p 8983:8983 --name my_solr2 solr solr-precreate gettingstarted
起動前に、ホスト側に作ったデータディレクトリの所有者をコンテナのsolrユーザ(8983:8983)に合わせておくことが必要です。
起動後
起動後はホストOS側から localhost:8983 でアクセスできるので、管理GUIなりウェブAPIなりで管理することができます。