Docker Composeを利用してPythonでMaCabが使えるDockerコンテナを作成したので、その方法をまとめておく。MeCabはオープンソースの形態素解析エンジン。
環境
Docker Desktop(Windows10 Pro)。
MeCabインストールに必要なファイルを準備
MeCabをソースファイルからインストールするので、MeCab: Yet Another Part-of-Speech and Morphological AnalyzerからMeCab本体のソース(mecab-0.996.tar.gz)とIPA辞書(mecab-ipadic-2.7.0-20070801.tar.gz)をダウンロードしておく。
Dockerfileの作成
Docker Hubにある公式Pythonイメージのpython:3.8-busterをベースにイメージを作成する。Dockerfileでは主に以下のことを行う。ダウンロードしたmecab-0.996.tar.gzとmecab-ipadic-2.7.0-20070801.tar.gzはmecabというフォルダに置いておく。
- MeCabのインストール
- IPA辞書のインストール
- 日本語フォント(fonts-takao)インストール
- ロケールの設定
- デフォルト設定だとMeCabでは半角記号が名詞・サ変接続に分類されるので記号に分類されるように設定を変更
- MeCabのPythonラッパーインストール
- ユーザーの作成
FROM python:3.8-buster
# 作業ディレクトリを作り移動する
WORKDIR /work
# localesと日本語フォントのインストール
RUN apt update \
&& apt -y install --no-install-recommends \
locales \
fonts-takao \
&& sed -i -e 's/# ja_JP.UTF-8 UTF-8/ja_JP.UTF-8 UTF-8/' /etc/locale.gen \
&& locale-gen \
&& apt clean \
&& fc-cache -fv
COPY ./mecab/* /work/
# MeCabインストール
# ldconfigはライブラリパスのキャッシュ更新用
RUN tar zxvf mecab-0.996.tar.gz \
&& cd mecab-0.996 \
&& ./configure \
&& make \
&& make check \
&& make install \
&& ldconfig \
&& cd ../ \
&& rm -rf mecab-0.996
# IPA辞書インストール
# 半角記号が名詞・サ変接続になるのを記号・一般に変更
RUN tar zxvf mecab-ipadic-2.7.0-20070801.tar.gz \
&& cd mecab-ipadic-2.7.0-20070801 \
&& iconv -f eucjp -t utf8 unk.def > unk_utf8.def \
&& sed -i -e 's/SYMBOL,1283,1283,17585,名詞,サ変接続,\*,\*,\*,\*,\*/SYMBOL,1283,1283,17585,記号,一般,\*,\*,\*,\*,\*/' unk_utf8.def \
&& mv unk.def unk.def.original \
&& iconv -f utf8 -t eucjp unk_utf8.def > unk.def \
&& ./configure --with-charset=utf8 --enable-utf8-only \
&& make \
&& make install \
&& cp unk.def /usr/local/lib/mecab/dic/ipadic \
&& cd ../ \
&& rm -rf mecab-ipadic-2.7.0-20070801
# ロケールの設定
ENV LANG="ja_JP.UTF-8" \
LANGUAGE="ja_JP:ja" \
LC_ALL="ja_JP.UTF-8"
# MeCabのPythonラッパーインストール
COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt
# インストールに使用したファイルを削除
RUN rm -rf /work/*
# ユーザーを作成してデフォルトユーザーにする
RUN groupadd -r pyuser \
&& useradd --no-log-init -r -g pyuser pyuser
USER pyuserインストールするPythonラッパーはrequirments.txtに記載しておく。Docker-compose.ymlの作成
Dockerfileでイメージ作成の準備が出来たので、次はdocker-compose.ymlを用意する。
version: "3"
services:
pymecab:
build:
context: .
dockerfile: Dockerfile
container_name: pymecab
hostname: pymecab
# コンテナを起動し続ける
tty: true
environment:
# タイムゾーン設定
TZ: 'Asia/Tokyo'
最終的に以下のファイル構成となる。
イメージのビルド。
コンテナを起動してコンテナに入る。
コンテナ上のPythonでMeCabを使ってみる。
コンテナ上のPythonでMeCabを使う
コンテナを起動してコンテナに入る。
コンテナ上のPythonでMeCabを使ってみる。
0 件のコメント:
コメントを投稿