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 サーバの出来上がりです。
コメント