Docker上でPython+自然言語処理+基本的な機械学習を行うための環境構築方法について説明します.
また,Dockerについての基本的な知識があることを前提としています.
#導入するもの
- ベース
- Alpine Linux 3.9
- Python
- Python 3.7.3
- numpy
- scipy
- scikit-learn
- gensim
- 自然言語処理
- mecab
- cabocha
#実行環境
- Ubuntu 18.04 LTS
- Docker 18.09.5
#Alpine Linux
Alpine Linuxは, 軽量なLinuxディストリビューションです.
Dockerイメージを簡単に軽量化できることから,ベースイメージとして多く採用されています.
ただし,Alpineはデフォルトではかなり機能が制限されています.
そのため,追加で色々なツールやパッケージをインストールしていく必要があります.
#各種ファイルの作成
###Dockerfile
# ベースイメージ
FROM python:3.7.3-alpine3.9
# 環境変数
ENV LANG C.UTF-8
ENV TZ Asia/Tokyo
ENV PYTHONUNBUFFERED 1
# 各種パッケージのインストール
RUN apk add --update bash git curl build-base swig gfortran linux-headers
# Mecab
RUN cd /tmp \
&& git clone https://github.com/taku910/mecab.git \
&& cd mecab/mecab/ \
&& ./configure --enable-utf8-only --with-charset=utf8 \
&& make \
&& make install \
&& cd ../mecab-ipadic \
&& ./configure --with-charset=utf8 \
&& make \
&& make install
# CRF++ (Cabochaで必要)
RUN wget -O /tmp/CRF++-0.58.tar.gz 'https://drive.google.com/uc?export=download&id=0B4y35FiV1wh7QVR6VXJ5dWExSTQ' \
&& cd /tmp/ \
&& tar zxf CRF++-0.58.tar.gz \
&& cd CRF++-0.58 \
&& ./configure \
&& make \
&& make install
# Cabocha
RUN cd /tmp \
&& DOWNLOAD_URL="https://drive.google.com`curl -c cookies.txt \
'https://drive.google.com/uc?export=download&id=0B4y35FiV1wh7SDd1Q1dUQkZQaUU' \
| sed -r 's/"/\n/g' |grep id=0B4y35FiV1wh7SDd1Q1dUQkZQaUU |grep confirm |sed 's/&/\&/g'`" \
&& curl -L -b cookies.txt -o /tmp/cabocha-0.69.tar.bz2 "$DOWNLOAD_URL" \
&& tar jxf cabocha-0.69.tar.bz2 \
&& cd cabocha-0.69 \
&& ./configure --with-mecab-config=`which mecab-config` --with-charset=utf8 \
&& make \
&& make install \
&& cd python \
&& python setup.py build \
&& python setup.py install \
# LAPACK/BLAS (scikit-learnで必要)
RUN cd /tmp \
&& wget http://www.netlib.org/lapack/lapack-3.8.0.tar.gz \
&& tar zxf lapack-3.8.0.tar.gz \
&& cd lapack-3.8.0/ \
&& cp make.inc.example make.inc \
&& make blaslib \
&& make lapacklib \
&& cp librefblas.a /usr/lib/libblas.a \
&& cp liblapack.a /usr/lib/liblapack.a \
&& cd / \
&& rm -rf /tmp/*
# pip
COPY requirements.txt /home
WORKDIR /home
RUN pip install --upgrade pip
RUN pip install -r requirements.txt
###requirements.txt
pipでインストールするパッケージを記載します.
バージョンを指定したい場合は numpy==1.16.2
のようにしてください.
今回は必要最低限なものしかインストールしません.
mecab-python3
numpy
scipy
scikit-learn
gensim
#Dockerイメージを作成
Dockerfileとrequirements.txtを同じディレクトリに置きます.
以下のコマンドでDockerビルド(Dockerイメージを作成するコマンド)を実行します.
※Cabochaのダウンロードに失敗してビルドができないことがあります.
少し時間をおきながら何度か再実行してみて下さい.
$ cd <Dockerfileが存在するディレクトリ>
$ docker build -t nlp-ml:1 .
(docker build -t <Dockerイメージ名> <Dockerfileが存在するディレクトリ>)
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nlp-ml 1 4b7930388f08 3 minutes ago 93.5MB
これでDockerイメージが作成できました.
このDockerイメージを使用して,コンテナを起動します.
$ docker run -it --name hoge nlp-ml:1 bash