はじめに
Docker は、Flask ベースのアプリケーションを含むウェブアプリケーションのデプロイに人気のある選択肢になっています。このチュートリアルでは、Flask アプリケーションを Docker 化し、Docker を使用して本番モードで実行するプロセスを案内します。この記事の最後まで読むと、本番環境で Flask アプリをデプロイするために Docker をどのように活用するかがしっかりと理解できるようになります。
💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください
Docker は、Flask ベースのアプリケーションを含むウェブアプリケーションのデプロイに人気のある選択肢になっています。このチュートリアルでは、Flask アプリケーションを Docker 化し、Docker を使用して本番モードで実行するプロセスを案内します。この記事の最後まで読むと、本番環境で Flask アプリをデプロイするために Docker をどのように活用するかがしっかりと理解できるようになります。
Docker は、開発者がコンテナ化された環境でアプリケーションを構築、デプロイ、実行できるようにする人気のオープンソースプラットフォームです。これにより、アプリケーションとそのすべての依存関係を単一のコンテナにパッケージ化する方法が提供され、異なるコンピューティング環境間でアプリケーションを簡単に移動できるようになります。
Docker は、開発者がコンテナ内でアプリケーションを構築、デプロイ、実行できるようにするソフトウェアプラットフォームです。コンテナは、軽量で独立した実行可能なパッケージであり、コード、ランタイム、システムツール、ライブラリなど、アプリケーションを実行するために必要なすべてのものが含まれています。コンテナは互いに、またホストオペレーティングシステムから分離されており、一貫した信頼性の高いアプリケーションのデプロイを保証します。
Docker のアーキテクチャは、以下の主要なコンポーネントで構成されています。
Docker のアーキテクチャとその主要なコンポーネントを理解することは、アプリケーションの開発とデプロイプロセスで Docker を効果的に使用および管理するために重要です。
このセクションでは、Docker を使用して Flask アプリケーションをコンテナ化する方法を学びます。
まず、シンプルな Flask アプリケーションを作成しましょう。新しいディレクトリを作成し、ターミナルでそのディレクトリに移動します。次に、以下の内容で app.py
という名前の新しいファイルを作成します。
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return 'Hello, LabEx!'
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
この Flask アプリケーションには、「Hello, LabEx!」というメッセージを返す単一のルートがあります。
Flask アプリケーションをコンテナ化するには、Dockerfile を作成する必要があります。以下の内容で Dockerfile
という名前の新しいファイルを作成します。
FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["python", "app.py"]
Dockerfile を分解してみましょう。
FROM python:3.9-slim
:これは Docker コンテナのベースイメージを指定しており、この場合は Python 3.9 イメージのスリムバージョンです。WORKDIR /app
:これはコンテナ内の作業ディレクトリを /app
に設定します。COPY requirements.txt .
:これは requirements.txt
ファイルをコンテナの作業ディレクトリにコピーします。RUN pip install --no-cache-dir -r requirements.txt
:これは requirements.txt
ファイルに指定された Python の依存関係をインストールします。COPY . .
:これはアプリケーションのコード全体(app.py
を含む)をコンテナの作業ディレクトリにコピーします。CMD ["python", "app.py"]
:これはコンテナが起動したときに実行するコマンドを指定しており、Python インタープリターを使用して app.py
スクリプトを実行することです。では、Docker イメージをビルドしてコンテナを実行しましょう。
docker build -t labex-flask-app .
docker run -p 5000:5000 labex-flask-app
-p 5000:5000
オプションは、ホストのポート 5000 をコンテナのポート 5000 にマッピングします。これにより、ローカルマシンから Flask アプリケーションにアクセスできるようになります。
コンテナを実行した後、ウェブブラウザを開いて http://localhost:5000
にアクセスすることで、Flask アプリケーションにアクセスできます。「Hello, LabEx!」というメッセージが表示されるはずです。
おめでとうございます!Docker を使用して Flask アプリケーションを正常にコンテナ化しました。
Flask アプリケーションを本番環境で実行する場合、組み込みの開発サーバーではなく、本番環境に対応したサーバーを使用することが重要です。このセクションでは、Docker を使用して Flask アプリケーションを本番モードで実行する方法を学びます。
Flask アプリケーションを実行するために使用できる本番環境に対応したウェブサーバーには、Gunicorn、uWSGI、Waitress などがあります。この例では、Python アプリケーションに人気で広く使用されているウェブサーバーである Gunicorn を使用します。
Gunicorn を使用して Flask アプリケーションを本番モードで実行するには、Dockerfile を更新する必要があります。Dockerfile
の内容を以下のように置き換えます。
FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
RUN pip install gunicorn
CMD ["gunicorn", "--bind", "0.0.0.0:5000", "app:app"]
主な変更点は以下の通りです。
RUN pip install gunicorn
を追加しました。CMD
命令を変更しました。"gunicorn", "--bind", "0.0.0.0:5000", "app:app"
コマンドは、Gunicorn にアプリケーションを 0.0.0.0:5000
アドレスにバインドし、app.py
ファイルの app
オブジェクトを WSGI アプリケーションとして使用するように指示します。では、Docker イメージをビルドし、本番モードでコンテナを実行しましょう。
docker build -t labex-flask-app-prod .
docker run -p 5000:5000 labex-flask-app-prod
これで、アプリケーションは Gunicorn を使用して本番モードで実行されているはずです。
Flask アプリケーションが本番モードで実行されていることを検証するには、以下のコマンドを使用してログを確認できます。
docker logs <container_id>
以下のような出力が表示されるはずです。
[2023-04-11 12:34:56 +0000] [1] [INFO] Starting gunicorn 20.1.0
[2023-04-11 12:34:56 +0000] [1] [INFO] Listening at: http://0.0.0.0:5000 (1)
[2023-04-11 12:34:56 +0000] [1] [INFO] Using worker: sync
[2023-04-11 12:34:56 +0000] [8] [INFO] Booting worker with pid: 8
これにより、Flask アプリケーションが Gunicorn ウェブサーバーを使用して本番モードで実行されていることが確認できます。
このチュートリアルでは、Docker を使用して Flask アプリケーションを本番モードで実行するための重要な手順を説明しました。Flask アプリを Docker 化するプロセス(Dockerfile の作成や Docker イメージのビルドを含む)を調べました。さらに、Docker コンテナ内で Flask アプリを本番モードで実行する方法についても説明し、信頼性が高くスケーラブルなデプロイを保証しました。このガイドに記載されている方法に従うことで、本番環境で Flask ベースのウェブアプリケーションをデプロイするために Docker を効果的に活用することができます。