Docker学習 – NginxとFlaskでWebアプリ構築

Flask

この記事は、Docker学習 - docker-composeでnginx+Flaskのwebアプリを構築する方法を元にして実際に行った、Docker Composeを使ってNginxとFlaskを組み合わせたWebアプリケーションの構築作業をトラブルシューティングを含めて紹介しています。

この作業では、Nginxはリバースプロキシとして動作し、Flaskアプリケーションをバックエンドとして使用します。
最終的には複数のFlaskアプリを管理する環境を構築します。

環境の準備

まず、以下の環境を前提としています。

  • DockerDesktopがインストールされている。
  • 基本的なFlaskアプリの知識がある。

以下の構成で、Nginxをリバースプロキシ、2つのFlaskアプリをバックエンドとして動作させます。

プロジェクト構造

最終的には、以下のようなディレクトリ構造となります。

Nginxの設定

Nginxをリバースプロキシとして構成するため、以下の設定を記述します。

nginx/default.conf

  • /web1web1サービスのFlaskアプリケーションにリクエストを転送。
  • /web2web2サービスのFlaskアプリケーションにリクエストを転送。

Flaskアプリの作成

Flaskアプリケーションを作成します。

web1/app.py

web2/app.py
web2web1をコピーし、タイトルや一部の文字列を変更します。

テンプレートを作成

web1/templates/index.html

web1/templates/hello.html

web2/templatesも同様に作成し、内容を変更します。

Flask用Dockerfile

FlaskアプリをDockerコンテナで動作させるためのDockerfileを作成します。

web1/Dockerfile

web2/Dockerfileも同様です。

requirements.txtの作成

必要なPythonライブラリを記載します。

web1/requirements.txt

web2/requirements.txtも同様です。

Docker Composeファイルの作成

docker-compose.ymlを作成して、全体の構成を定義します。

docker-compose.yml

構成図

コンテナのビルドと起動

以下のコマンドでコンテナをビルドし、起動します。

トラブルシューティング

テンプレートが見つからないエラー

エラー例:

jinja2.exceptions.TemplateNotFound: index.html

解決方法:

  • Flaskアプリのtemplatesディレクトリが正しい場所に配置されているか確認。
  • コンテナ内にテンプレートファイルが存在するか確認。

502 Bad Gateway エラー

原因:
NginxがバックエンドFlaskアプリに接続できていない。

解決方法:

  • Nginx設定のproxy_passでポート番号が正しいか確認。
  • コンテナ内で接続確認

コンテナの変更が反映されない

原因:
Dockerのキャッシュが原因で、最新の変更が反映されていない。

解決方法:

  • キャッシュを無効化して再ビルド

まとめ

この手順で、Docker Composeを利用してNginx+FlaskのWebアプリケーション環境を構築できました。
Nginxをリバースプロキシとして使用することで、複数のバックエンドアプリケーションを統合的に管理することができました。

学習ポイント:

  • FlaskアプリのDocker化の基本。
  • NginxとFlaskの連携。
  • Docker Composeでの複数コンテナ管理。

出典情報
本記事の内容は以下のページを参考にしています:

タイトルとURLをコピーしました