MENU
A.I. とか最近流行っているらしいよ

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

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

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

この記事が気に入ったら
フォローしてね!

この記事を書いた人

コメント

コメントする

目次
閉じる