はじめに
このチュートリアルでは、Docker コンテナ内で Flask アプリケーションを実行するプロセスを探索します。Docker の基礎、Flask アプリケーションの構築、そして Docker の利点を活用するために Flask アプリケーションをコンテナ化します。
このチュートリアルでは、Docker コンテナ内で Flask アプリケーションを実行するプロセスを探索します。Docker の基礎、Flask アプリケーションの構築、そして Docker の利点を活用するために Flask アプリケーションをコンテナ化します。
Docker は、開発者がコンテナ化された環境でアプリケーションを構築、デプロイ、実行するための、人気のオープンソースプラットフォームです。コンテナは、アプリケーションの実行に必要なコード、ランタイム、システムツール、ライブラリなど、すべてを含んだ軽量で独立した実行可能なソフトウェアパッケージです。
Docker は、コンテナを使用してアプリケーションの作成、デプロイ、実行を容易にするツールです。コンテナを使用すると、開発者はアプリケーションに必要なライブラリやその他の依存関係など、すべての構成要素をパッケージ化し、単一のソフトウェアパッケージとして配布できます。
Docker アーキテクチャは、以下のコンポーネントで構成されています。
Docker を開始するには、システムに Docker エンジンをインストールする必要があります。Docker は公式ウェブサイト (https://www.docker.com/get-started) からダウンロードし、オペレーティングシステムのインストール手順に従います。
Docker をインストールしたら、Docker コンテナの構築と実行を開始できます。Ubuntu イメージを使用した Docker コンテナの実行の簡単な例を次に示します。
docker run -it ubuntu
このコマンドは、Docker レジストリから Ubuntu イメージをプルし、新しいコンテナを作成し、コンテナ内の対話型シェルセッションを開始します。
Flask は軽量で柔軟性があり、使いやすい人気の Python ウェブフレームワークです。このセクションでは、シンプルな Flask アプリケーションの構築手順を説明します。
最初に、開発環境を設定しましょう。この例では、Python 3.9 と Flask 2.0.2 を使用します。
## Python 3.9 のインストール
sudo apt-get update
sudo apt-get install -y python3.9
## Flask のインストール
pip3 install flask==2.0.2
次に、シンプルな Flask アプリケーションを作成します。app.py という新しいファイルを作成し、以下のコードを追加します。
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
return 'Hello, LabEx!'
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
この例では、flask モジュールから Flask クラスをインポートし、新しい Flask インスタンスを作成し、ルート URL (/) に対するルートを定義して、文字列 "Hello, LabEx!" を返します。最後に、app.run() メソッドを使用してアプリケーションを実行します。
Flask アプリケーションを実行するには、ターミナルで以下のコマンドを実行します。
python3 app.py
これにより、Flask 開発サーバーが起動し、アプリケーションは http://localhost:5000/ で利用可能になります。
追加のルートを定義し、ビジネスロジックを追加することで、Flask アプリケーションに簡単に機能を追加できます。たとえば、ユーザー入力を受け取り、処理を行い、応答を返すルートを作成できます。
from flask import Flask, request
app = Flask(__name__)
@app.route('/')
def index():
return 'Hello, LabEx!'
@app.route('/greet', methods=['POST'])
def greet():
name = request.form['name']
return f'Hello, {name}!'
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
この例では、/greet という新しいルートを追加し、name パラメータを含む POST リクエストを受け取ります。アプリケーションは、提供された名前を使った挨拶メッセージを返します。
基本的な Flask アプリケーションができましたので、Docker を使ってコンテナ化してみましょう。アプリケーションをコンテナ化することで、依存関係を含めた自己完結的なユニットにパッケージ化し、デプロイやスケールアップを容易に行えます。
Flask アプリケーションをコンテナ化するには、Dockerfile を作成する必要があります。Dockerfile は、イメージを構築するためにコマンドラインで実行できるすべての命令を含むテキストドキュメントです。
Dockerfile という新しいファイルを作成し、以下の内容を追加します。
## 公式 Python イメージをベースイメージとして使用
FROM python:3.9-slim
## 作業ディレクトリを /app に設定
WORKDIR /app
## requirements ファイルをコンテナにコピー
COPY requirements.txt .
## Python 依存関係をインストール
RUN pip install --no-cache-dir -r requirements.txt
## Flask アプリケーションコードをコンテナにコピー
COPY app.py .
## Flask アプリケーションが動作するポートを公開
EXPOSE 5000
## Flask アプリケーションを実行するコマンドを設定
CMD ["python", "app.py"]
この Dockerfile では、以下の手順を実行しています。
/app に設定します。requirements.txt ファイルをコンテナにコピーします。app.py ファイルをコンテナにコピーします。次に、Flask アプリケーションの Docker イメージを構築します。ターミナルで以下のコマンドを実行します。
docker build -t labex-flask-app .
このコマンドは、現在のディレクトリにある Dockerfile を使用して、タグ labex-flask-app の Docker イメージを構築します。
イメージが構築されたら、Docker コンテナで Flask アプリケーションを実行できます。
docker run -p 5000:5000 labex-flask-app
このコマンドは、labex-flask-app イメージに基づいて新しいコンテナを起動し、ホストのポート 5000 をコンテナのポート 5000 にマッピングします。
これで、http://localhost:5000/ で Flask アプリケーションにアクセスできます。
Flask アプリケーションをコンテナ化したら、Docker Hub やプライベートレジストリなどのコンテナレジストリに Docker イメージをデプロイし、本番環境にアプリケーションをデプロイできます。
このチュートリアルを終了すると、Docker を使用して Flask アプリケーションをコンテナ化する手順をしっかりと理解しているはずです。Flask アプリケーションの Docker イメージを構築し、Docker コンテナで実行し、Flask 開発およびデプロイに Docker の利点を活用できるようになります。