地下ペディアを Docker コンテナに入れてみた

Docker を勉強する上で、とりあえず何パターンか作業をしたいと思い、いくつかやってきました。

で、次は既にある程度作り込まれているものをコンテナに入れてみようと思い、過去に自分が作った物で企業との面談等でも触れていただくことの多い「地下ぺディア」を使ってやってみることにしました。

ゴールとしてはとりあえず Docker イメージを run してブラウザで 127.0.0.1:8000 を開けば地下ぺディアが使える様にします。

  1. 地下ぺディアとは
  2. Dockerfile を作る
  3. docker build & docker run
  4. 動作確認
  5. ローカルで修正して build & run

1. 地下ぺディアとは

そもそも「地下ぺディア」とは、自然言語処理の技術の一つである形態素解析を使って、ウィキペディアの記事をカイジっぽい文体で表示する Web アプリです。

フレームワークに Django、形態素解析には CaboCha を使用しており、任意のウィキペディアページの HTML ソースを解析、HTML 要素を崩さずに文体を変更し HTTP レスポンスとして返す様になっています。

元々は「ウィキペディア記事を元に自由ミルクボーイの漫才を作れたら。。」と思い立ったものの難しそうだったのでひとまず地下ぺディアという形にしたという経緯があります。

2. Dockerfile を作る

元々地下ぺディアのファイル群があるディレクトリに Dockerfile を作成します。

ベースイメージとしてはこちらの記事で作成した、Python で CaboCha を使える様にしたものを使います。

FROM docker_nlp:1.0

# ファイルを全てコピーし、requirements.txt で pip install を実施
WORKDIR /app
COPY . .
RUN pip3 install -r requirements.txt

# コンテナ外からのアクセスを可能にするため 0.0.0.0 番で runserver を実行
# 開発環境用の settings_dev.py を使用
CMD ["python3", "chikapedia/manage.py", "runserver", "0.0.0.0:8000","--settings=chikapedia.settings_dev"]

CMD の部分で Django の runserver を実行する様記述していますが、「0.0.0.0:8000」としてコンテナ外(つまりホストから)からのアクセスを受け付ける様にし、「--settings=chikapedia.settings_dev」で開発環境用の settings.py を使用できる様にしています。

あとはいつも通りです。

3. docker build & docker run

% docker build -t chikadocker:1.0 .
% docker run --name chikapedia-docker -p 8000:8000 -it chikadocker:1.0
Watching for file changes with StatReloader
Performing system checks...

System check identified no issues (0 silenced).

You have 18 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.
May 19, 2023 - 02:22:08
Django version 3.2.4, using settings 'chikapedia.settings_dev'
Starting development server at http://0.0.0.0:8000/
Quit the server with CONTROL-C.

未 migrate のマイグレーションに関する警告が出ますが、地下ぺディアはデータベースを使わないので無視します。

run は無事完了し、Django のサーバーもコンテナ内「0.0.0.0:8000」で立ち上がりました。

4. 動作確認

果たして動くのか?ローカル PC のブラウザで 127.0.0.1:8000 にアクセスしてみます。

無事動きました!

5. ローカルで修正して build & run

バグ修正時の対応としては

  1. ローカルでコード修正
  2. docker build でイメージ更新
  3. docker rm でコンテナ削除
  4. docker run でコンテナ作成
  5. 動作確認

といった流れで修正と確認を繰り返しました。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です