7.3. Docker で実行

ウェブサービスのサーバを Docker で起動する方法について説明します。

7.3.1. イメージの作成

空のフォルダを作成し、その中にテキストエディタで 以下の内容を含む Dockerfile を作成します。

FROM osgeo/gdal:ubuntu-full-3.6.3
# このイメージは "Ubuntu 22.04.2 LTS" を拡張しています。

ENV JAGEOCODER_DB2_DIR /opt/db2

# pygeonlp に必要なライブラリ・パッケージをインストールします。
RUN apt-get update && apt-get install -y \
    libmecab-dev \
    mecab-ipadic-utf8 \
    libboost-all-dev \
    libsqlite3-dev \
    curl \
    python3 \
    python3-dev \
    python3-pip

# pygeonlp と基本辞書セットをインストールします。
RUN python3 -m pip install pygeonlp && pygeonlp setup

# ここから WebAPI サーバ固有の処理(Flaskのインストールとサーバ起動)
RUN python3 -m pip install flask-jsonrpc
ENV GEONLP_MECAB_DIC_DIR=/var/lib/mecab/dic/ipadic-utf8
ENV FLASK_APP=pygeonlp.webapi.app

# 住所ジオコーダをインストールしたイメージを作りたい場合は以下のコメントを外してください。
# RUN curl https://www.info-proto.com/static/jageocoder/latest/gaiku_all_v21.zip \
#     -o /opt/gaiku_all_v21.zip && \
#     jageocoder install-dictionary /opt/gaiku_all_v21.zip && \
#     rm /opt/gaiku_all_v21.zip

# NEologd を辞書として利用したい場合は以下のコメントを外してください。
# ENV GEONLP_MECAB_DIC_DIR=/neologd
# RUN apt-get install -y git mecab
# RUN cd /tmp \
#     && git clone --depth 1 https://github.com/neologd/mecab-ipadic-neologd.git \
#     && cd mecab-ipadic-neologd \
#     && ./bin/install-mecab-ipadic-neologd --prefix /neologd -n -a -u -y \
#     && cd / \
#     && rm -r /tmp/mecab-ipadic-neologd

# WebAPI サーバを起動します。
CMD ["/bin/bash", "-c", "python -m flask run -h 0.0.0.0 -p 5000"]

jageocoder や neologd を利用したい場合はコメントを外してください。

Docker ファイルを作成したディレクトリで、 docker build を実行してイメージを作成します。

$ docker build -t pygeonlp_webapi_image .

これで pygeonlp_webapi_image というタグ名を持つイメージが作成されます。

7.3.2. サーバコンテナを起動

作成したイメージから、 docker run でサーバを実行するコンテナを起動します。

$ docker run --name pygeonlp_webapi -d -p 5000:5000 pygeonlp_webapi_image

-d オプションはデタッチドモード (コンテナをバックグラウンドで実行) を指定し、 -p オプションは Docker のホストのポートをコンテナ内のポートに接続します。 --name オプションでコンテナ名を指定しているので、 pygeonlp_webapi という 名前を持つコンテナを生成します。

この状態で WebAPI サーバが起動しているので、 http://localhost:5000/api/browse にアクセスして WebAPI ブラウザが 動いていることを確認します。

7.3.3. サーバコンテナを終了

サーバコンテナはディタッチドモードで動き続けるため、終了するときには docker stop で停止します。パラメータはコンテナ名です。

$ docker stop pygeonlp_webapi

終了したサーバコンテナは docker start で再起動できます。

$ docker start pygeonlp_webapi

7.3.4. コンテナとイメージを削除

不要になったコンテナは docker rm で削除できます。パラメータはコンテナ名です。

$ docker rm pygeonlp_webapi

イメージも不要になった場合は、 docker rmi で削除します。パラメータはイメージのタグ名です。

$ docker rmi pygeonlp_webapi_image