7.3. Docker で実行
ウェブサービスのサーバを Docker で起動する方法について説明します。
7.3.1. イメージの作成
空のフォルダを作成し、その中にテキストエディタで 以下の内容を含む Dockerfile を作成します。
FROM osgeo/gdal:ubuntu-full-3.6.3
# このイメージは "Ubuntu 22.04.2 LTS" を拡張しています。
# アクセスできなくなっているリポジトリを削除します。
RUN rm /etc/apt/sources.list.d/apache-arrow.sources
# 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
# 住所ジオコーダをインストールしたイメージを作りたい場合は以下のコメントを外してください。
# ENV JAGEOCODER_DB2_DIR /opt/db2
# 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
# 住所ジオコーダサーバを利用したい場合は以下のコメントを外してください。
# ENV JAGEOCODER_SERVER_URL https://jageocoder.info-proto.com/jsonrpc
# 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