MENU

Docker Centos7.7 で Juman++ 2.0、Python3.7 のコンテナの作り方

2020 2/10

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

この記事を書いた人

Full stack developer working on Game programming, AI, Data Analysis, and various server backend tech. Feel free to contact me via Huggingface or Linkedin.

コメント

コメントする

目次
閉じる