Juman++2.0 は結構新しいパッケージが必要で、 yum install だけでの安易インストールが出来ないので、
色んなパッケージを自分で落としてコンパイルする必要がある為、非常に時間がかかるんです。

なので、設定した Docker ファイルを公開しようと思います。
フォルダ構成はこんな感じ
pythonweb
│ docker-compose.yml
└─web
│ Dockerfile
│
├─conf
│ init.sh
│
├─docroot
│ index.php
│
└─package
Anaconda3-2019.10-Linux-x86_64.sh
boost_1_72_0.tar.gz
cmake-3.16.2.tar.gz
gcc-7.5.0.tar.gz
jumanpp-2.0.0-rc3.tar.xz
Python-3.7.6.tgz
フォルダ構成を作ったら今度は各ファイルを作成します。
まず、インストールする時必要なパッケージを落としますので、
ファイルをダウンロードして pythonweb/web/package 内に置いときます。
新しいコンパイラーじゃないとコンパイルできないので、gcc 7.5 導入
http://ftp.tsukuba.wide.ad.jp/software/gcc/releases/gcc-7.5.0/gcc-7.5.0.tar.gz
コンパイルする為の新しい cmake バーション
https://cmake.org/files/v3.16/cmake-3.16.2.tar.gz
Boostもコンパイル時いるので
https://dl.bintray.com/boostorg/release/1.72.0/source/boost_1_72_0.tar.gz
機械学習用に Anaconda 入れておく(Jupyter Notebook など使うため)
https://repo.anaconda.com/archive/Anaconda3-2019.10-Linux-x86_64.sh
python 3.7
https://www.python.org/ftp/python/3.7.6/Python-3.7.6.tgz
そして、目的のjumanpp2.0.0
https://github.com/ku-nlp/jumanpp/releases/download/v2.0.0-rc2/jumanpp-2.0.0-rc2.tar.xz
パッケージをそろったら今度は docker-compose.yml を作ります。
# version 2.3 にすると後で GPU などcudaを使える
version : '2.3'
services:
web:
build: ./web
ports:
# 80 は apache 側で使うので、使わない場合消してもいい
- '80:80'
# 8888 は jupyter notebook 用
- '8888:8888'
environment:
- "TZ=Asia/Tokyo"
- "ENV=localhost"
- "SERVER_NAME=127.0.0.1"
tty: true
volumes:
# mount しておけば、コンテナ再作成時にファイルが消えないので便利
- ./web/docroot:/docroot
# init.sh で起動時のコマンドなど入れる
command: >
/bin/sh -c
"sh /etc/init.sh"
次に Dockerfile を作ります。
# 最新の centos7 をインストール
FROM centos:centos7
# yum を更新し必要なツールをインストールします
RUN yum -y update
RUN yum -y install tar wget bzip2 gcc gcc-c++ make epel-release
COPY ./package/gcc-7.5.0.tar.gz /usr/src/
RUN pushd /usr/src/ && \
tar -zxvf gcc-7.5.0.tar.gz && \
pushd /usr/src/gcc-7.5.0 && \
./contrib/download_prerequisites && \
./configure --disable-multilib --enable-languages=c,c++ && \
make -j$(nproc) && \
make install && \
rm /usr/src/gcc-7.5.0.tar.gz
# ここは必要に応じて入れなくてもいいです。
RUN yum -y install which vim git sudo openssh-server openssh-clients rsync
# locale を日本語にする
RUN localedef -f UTF-8 -i ja_JP ja_JP.UTF-8
ENV LANGUAGE="ja_JP:ja" LANG="ja_JP.UTF-8" LC_ALL="ja_JP.UTF-8"
# apache ウェブサーバをいれますが、要らなければスキップしてもいい
RUN yum -y install httpd
RUN rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
RUN yum -y install php php-devel php-mbstring php-pdo php-mysqlnd php-pear php-mcrypt php-opcache php-pecl-apcu php-ldap php-gd php-pecl-redis php-zip --enablerepo=remi-php71
# pythonをインストールする
RUN yum -y install openssl-devel libffi-devel
COPY ./package/Python-3.7.6.tgz /usr/src/
RUN pushd /usr/src/ && \
tar xzf Python-3.7.6.tgz && \
pushd /usr/src/Python-3.7.6/ && \
./configure --enable-optimizations && \
make altinstall -j$(nproc) && \
rm /usr/src/Python-3.7.6.tgz
# Boost をインストール
COPY ./package/boost_1_72_0.tar.gz /usr/src/
RUN pushd /usr/src/ && \
tar xzvf boost_1_72_0.tar.gz && \
pushd /usr/src/boost_1_72_0 && \
./bootstrap.sh && \
./b2 install -j4; exit 0 && \
rm /usr/src/boost_1_72_0.tar.gz
# protobuf と cmake は jumannppをインストールするのに必要なので入れます。
COPY ./package/cmake-3.16.2.tar.gz /usr/src/
RUN pushd /usr/src/ && \
tar -zxvf cmake-3.16.2.tar.gz && \
pushd /usr/src/cmake-3.16.2 && \
echo "/usr/local/lib64/" >> /etc/ld.so.conf && \
mv /usr/local/lib64/libstdc++.so.6.0.24-gdb.py /usr/local/lib64/back.libstdc++.so.6.0.24-gdb.py && \
ldconfig && \
./bootstrap --prefix=/usr/local && \
make -j$(nproc) && \
make install && \
export PATH=/usr/local/bin:$PATH && \
rm /usr/src/cmake-3.16.2.tar.gz
# protobuf を落としてインストール
RUN wget http://cbs.centos.org/kojifiles/packages/protobuf/2.5.0/10.el7.centos/x86_64/protobuf-2.5.0-10.el7.centos.x86_64.rpm && \
wget http://cbs.centos.org/kojifiles/packages/protobuf/2.5.0/10.el7.centos/x86_64/protobuf-devel-2.5.0-10.el7.centos.x86_64.rpm && \
wget http://cbs.centos.org/kojifiles/packages/protobuf/2.5.0/10.el7.centos/x86_64/protobuf-compiler-2.5.0-10.el7.centos.x86_64.rpm && \
yum -y install protobuf-2.5.0-10.el7.centos.x86_64.rpm protobuf-compiler-2.5.0-10.el7.centos.x86_64.rpm protobuf-devel-2.5.0-10.el7.centos.x86_64.rpm && \
yum -y install protobuf-devel
# Jumanpp をインストール
COPY ./package/jumanpp-2.0.0-rc3.tar.xz /usr/src/
RUN pushd /usr/src/ && \
tar Jxfv jumanpp-2.0.0-rc3.tar.xz && \
pushd /usr/src/jumanpp-2.0.0-rc3 && \
mkdir bld && \
pushd /usr/src/jumanpp-2.0.0-rc3/bld/ && \
CC=gcc CXX=g++ cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local/juman/ && \
make install -j$(nproc) && \
export PATH=/usr/local/juman/bin:$PATH && \
rm /usr/src/jumanpp-2.0.0-rc3.tar.xz
# anaconda をインストールし、jupyter notebook を起動します
# Browserから jupyter notebook を接続する時使うので token は自由に設定してください
COPY ./package/Anaconda3-2019.10-Linux-x86_64.sh /usr/src/
RUN pushd /usr/src/ && \
sh Anaconda3-2019.10-Linux-x86_64.sh -b && \
export PATH=/root/anaconda3/bin:$PATH && \
echo "export PATH=/root/anaconda3/bin:\$PATH" >> ~/.bashrc && \
jupyter notebook --generate-config && \
echo "c.NotebookApp.port = 8888" >> /root/.jupyter/jupyter_notebook_config.py && \
echo "c.NotebookApp.ip = '0.0.0.0'" >> /root/.jupyter/jupyter_notebook_config.py && \
echo "c.NotebookApp.token = 'f2f22dsad8usa9d8yasl65413lad14f1075e8d7be7'" >> /root/.jupyter/jupyter_notebook_config.py && \
echo "c.NotebookApp.allow_root = True" >> /root/.jupyter/jupyter_notebook_config.py
# 起動時によばれるスクリプトをコピーします
COPY ./conf/init.sh /etc/
# 最後に yum をclean していらないものを削除
RUN yum clean all
RUN rm -rf /var/cache/yum
起動時に apache と jupyter notebook server を動けるよう、 init.sh を作成して conf フォルダに置いときます。
#!/bin/sh
ldconfig
/root/anaconda3/bin/jupyter notebook &
/usr/sbin/httpd -D FOREGROUND
while [ $? -ne 0 ]; do
/usr/sbin/httpd -D FOREGROUND
sleep 3
done
docker-compose.yml にあるフォルダに入り、下記のコマンドで container を作成します。
docker-compose up –build

うまくいけば、これで juman++2.0、 python3.7、apache php サーバの出来上がりです。


コメント