現場データサイエンティスト奮闘記

とある企業で働くデータサイエンティストの日々のアウトプット

MeCab入りのPythonを実行するDockerfileの書き方

概要

自然言語処理を含んだアプリケーションをDocker imageで構築しようとしたらDockerfileの書き方を少し工夫しなきゃいけなかったので、そのメモです。

Dockerfileの書き方

プロジェクトは以下のような状況だとします。

project
├ src
│ ├ main.py
│ └ requirements.txt
└ Dockerfile

各ファイルの中身はこんな感じです。

main.py

# -*- coding: utf-8 -*-
import MeCab

def main():
  # 自然言語処理など

if __name__ == '__main__':
  main()

requirements.txt

mecab-python3

ここで普通に mecab-python3 を pip install するだけだと image のビルドでコケます。
そこで Dockerfile は以下のように書きます。

FROM python:3.6

RUN mkdir src
COPY src src/

RUN apt-get update \
  && apt-get install -y mecab \
  && apt-get install -y mecab-ipadic \
  && apt-get install -y libmecab-dev \
  && apt-get install -y mecab-ipadic-utf8 \
  && apt-get install -y swig

RUN pip install -r ./src/requirements.txt

WORKDIR ./src/
ENTRYPOINT ["python", "main.py"]

これで無事 MeCabPython で使える Docker image ができました。