この CookBook では、Solr の Docker の作成手順について紹介しています。
レシピ
- ベースイメージの作成
- Solr の Docker イメージを作成します
- 実行します
1. ベースイメージの作成
CentOS 6.9 を使用します。
Dockerfile
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
FROM centos:centos6.9 EXPOSE 22 ENV DEBIAN_FRONTEND noninteractive # yum RUN yum -y update && yum clean all # locale RUN yum reinstall -y glibc-common RUN localedef -i ja_JP -f UTF-8 ja_JP.utf8 RUN touch /etc/sysconfig/i18n RUN echo 'LANG="ja_JP.UTF-8"' >> /etc/sysconfig/i18n ENV LANG ja_JP.UTF-8 ENV LC_ALL ja_JP.UTF-8 ENV LANGUAGE ja_JP:ja # timezone RUN yum install -y tzdata RUN echo 'ZONE="Asia/Tokyo"' > /etc/sysconfig/clock RUN echo 'UTC=false' >> /etc/sysconfig/clock RUN ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime # tools RUN yum groupinstall -y 'Development Tools' RUN yum install -y --enablerepo centosplus wget curl vim emacs tar unzip mlocate perl ssh openssh-server openssl-devel # root passwd RUN bash -c 'echo "root:password" | chpasswd' # ssh RUN sed -i -e "s/#PasswordAuthentication yes/PasswordAuthentication yes/g" /etc/ssh/sshd_config RUN sed -i -e "s/#PermitRootLogin yes/PermitRootLogin yes/g" /etc/ssh/sshd_config RUN sed -i -e "s/UsePAM yes/UsePAM no/g" /etc/ssh/sshd_config RUN updatedb CMD /etc/init.d/sshd restart && /bin/bash |
ロケールを ja_JP, タイムゾーンを Asia/Tokyo に変更し、root/password で ssh 接続ができるように設定します。
mycentos:6.9 というタグでビルドします。
1 |
docker build -t mycentos:6.9 . |
2. Solr の Docker イメージを作成します
先ほど作成したベースイメージを利用します。
jdk-8u172-linux-x64.tar.gz と solr_setup.zip を事前にダウンロードしておきます。
Dockerfile
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
FROM mycentos:6.9 EXPOSE 22 8983 ENV DEBIAN_FRONTEND noninteractive # yum RUN yum -y update && yum clean all RUN yum -y upgrade && yum -y update && yum clean all # JDK COPY jdk-8u172-linux-x64.tar.gz /jdk-8u172-linux-x64.tar.gz COPY setup_jdk.sh /setup_jdk.sh RUN chmod u+x /setup_jdk.sh RUN /setup_jdk.sh RUN rm -f /setup_jdk.sh ENV JAVA_HOME /usr/local/java/jdk ENV PATH /usr/local/java/jdk/bin:$PATH RUN echo 'JAVA_HOME=/usr/local/java/jdk' >> /root/.bashrc RUN echo 'PATH=$PATH:/usr/local/java/jdk/bin' >> /root/.bashrc RUN rm -f /jdk-8u172-linux-x64.tar.gz # Solr COPY solr_setup.zip /solr_setup.zip COPY setup_solr.sh /setup_solr.sh RUN chmod u+x /setup_solr.sh RUN /setup_solr.sh RUN rm -f /setup_solr.sh RUN rm -f /solr_setup.zip COPY run.sh /run.sh RUN chmod u+x /run.sh RUN updatedb CMD /run.sh |
細かいセットアップはシェルスクリプトに逃がし、Dockerfile からはそれを実行するようにします。
これにより、Dockerfile をシンプルにでき、かつイメージ容量の削減にもつながります。
setup_jdk.sh
1 2 3 4 5 6 |
#!/bin/sh tar zxvf /jdk-8u172-linux-x64.tar.gz mkdir -p /usr/local/java mv jdk1.8.0_172 /usr/local/java/jdk1.8.0_172 ln -s /usr/local/java/jdk1.8.0_172 /usr/local/java/jdk |
setup_solr.sh
1 2 3 4 5 6 7 8 9 10 11 12 |
#!/bin/sh unzip /solr_setup.zip -d solr_setup cd solr_setup chmod u+x ./setup.sh ./setup.sh jetty mkdir -p /usr/local/solr mv dist/jetty/jetty /usr/local/solr/jetty cd .. rm -rf solr_setup |
docker run 時に実行するスクリプトです。
run.sh
1 2 3 4 5 6 7 8 |
#!/bin/bash /etc/init.d/sshd restart cd /usr/local/solr/jetty ./startup.sh > startup.log 2>&1 & touch /usr/local/solr/jetty/startup.log tail -F /usr/local/solr/jetty/startup.log |
sshd と Solr を起動しています。
mysolr というタグでビルドします。
1 |
docker build -t mysolr . |
3. 実行します
1 |
docker run -it -p 2222:22 -p 8983:8983 mysolr |
solr-config.xml
次のように設定します。
localhost の部分は、docker run しているマシンの IP アドレスに置き換えてください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
<?xml version="1.0" encoding="UTF-8"?> <solr-config xmlns="http://intra-mart.co.jp/system/solr/config/solr-config" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://intra-mart.co.jp/system/solr/config/solr-config ../schema/solr-config.xsd "> <group name="default"> <searcher> <method>POST</method> <distribution-policy>FIRST</distribution-policy> <servers> <url>http://localhost:8983/solr/default</url> </servers> </searcher> <indexer> <distribution-policy>IDHASH</distribution-policy> <servers> <url>http://localhost:8983/solr/default</url> </servers> </indexer> <extractor ref="im_default" /> </group> </solr-config> |
root/password で ssh 接続ができるようになっています。
あくまで検証用の Docker としてこのように設定しているため、セキュリティにはご注意ください。
このように、Docker イメージ化するだけで、検証用の Solr をすぐに準備できます。
是非ご活用ください。