'sqr'atch-note

ちりはつもれど ちりぬるを

Flaskbook補足

Python FlaskによるWebアプリ開発入門』(以下、Flaskbook)の第15章は、第2部で作った動体検知アプリケーションをまるごとDockerイメージ化して、Flaskに組み込まれたWebサーバを使ったWebアプリケーションの公開方法を説明している。しかし、Webサーバは別途用意して、WSGIを使って公開する方が一般的かなと思ったので、そのようにしてみた。

やりたいこと

  • Flaskbookで作ったWebアプリをDockerコンテナとして動かす

やること

  • Webアプリは、UbuntuのDockerイメージに入れ込む
  • Webサーバは、Nginxで用意する
  • 複数コンテナになるので、docker composeを使用する

やったこと

  • Flaskbookに載っているDockerfileでは、DBファイルとアプリ本体(appsディレクトリ)もイメージ内に含めてしまっている。
    • そのため、今回はコンテナ化した後も色々コードを触りたいので、ホスト側のディレクトリをコンテナにマウントしてあげるように変更した。
  • あとuwsgiを呼び出す時のオプションで、引数を渡せなかったので、app.pyを少し改変した。
    • 関数create_appの定義で、config_keyを渡さないように、コードにコンフィグ名を埋め込む形にした。こういう値をコードの埋め込むのって良くないとは思いつつ、ググっても回避方法が分からなかったので、ここに時間をかけるべきじゃないと思って、ハードコーディングした
  • 実際にやった流れ
    • ホストとしてUbuntu 22.04LTSの準備
    • Docker、docker-composeのインストール
    • uwsgiのiniファイル用意
    • Dockerfileの作成
      • nginx用
      • アプリ用
    • docker-compose.ymlの作成
    • app.pyの修正
    • デプロイ
    • 動作確認(終わり)

学び

  • コンテナはrootlessがベターだと思いつつ、妥協した
    • Dockerのベストプラクティスは何度か読んでるのに未だに実践できていない。とはいえ、それが分かったのは学び
    • Dockerはクリティカルなシステムで使ったことなく、個人的にサクッと何かアプリを動かすときに使う程度の日曜大工的な使い方で、”正しい使い方”の理解を先延ばししてる感はある
  • WSGI全然わからん
    • WSGIが何となくどういう風に使うと知ってる状態から、実際に具体的な設定を書いて動くまで持っていくまでが遠かった
    • 今回も何となく動いてはいるが、分かってない
  • docker0わからん
    • VMware WorkstaionでVM作ってUbuntuを準備していて、VMサスペンドから復帰させるとdocker0IPアドレスが吹き飛んでいる。何?
    • dockerを再起動させれば再度割り当てられるが、根本的解決とはいえなさそう
    • そもそもinetの設定が消えているのに気がつくのに時間がかかって、そしてサービス再起動すれば良いと思うに至るまで、ホスト側のresolve.confufwをいろいろ弄ってしまった