はじめに
このガイドでは、Dockerを使用してFlaskアプリケーションを構築する手順について説明します。FlaskはPythonのウェブアプリケーションフレームワークであり、Dockerを組み合わせることでアプリケーションの環境をコンテナ化し、簡単にデプロイできるようになります。以下では、ステップバイステップで進め、FlaskアプリケーションをDockerコンテナ内で実行する方法を示します。
ステップ1: プロジェクトのセットアップ
最初に、プロジェクトディレクトリを作成し、次のようなファイル構造を持つディレクトリを作成します:
my-flask-app/
|-- app.py
|-- Dockerfile
|-- requirements.txt
|-- docker-compose.yml
ファイルの詳細
app.py : FlaskアプリケーションのPythonコード
Dockerfile : Dockerイメージのビルド設定
requirements.txt : Flaskとその他の依存ライブラリのリスト
docker-compose.yml : Docker Composeの設定ファイル
ステップ2: Flaskアプリケーションの作成
Flaskアプリケーションを app.py ファイルに作成します。以下は簡単な例です:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def flask_app():
return 'おめでとう成功だ!'
ステップ3: Dockerfileの作成
次に、DockerイメージをビルドするためのDockerfileを作成します。プロジェクトディレクトリに Dockerfile を作成し、以下の内容を記述します:
# Pythonランタイムを親イメージとして使用
FROM python:3.8
# 作業ディレクトリを/appに設定
WORKDIR /app
# 現在のディレクトリの内容をコンテナ内の/appにコピー
COPY . /app
# requirements.txtで指定された必要なパッケージをインストール
RUN pip install -r requirements.txt
# ポートの公開
EXPOSE 5000
CMD ["flask", "run", "--host=0.0.0.0"]
# コンテナ起動時にapp.pyを実行
CMD ["python", "app.py"]
ステップ4: requirements.txtの設定
Flaskとその他の依存ライブラリを requirements.txt ファイルにリストアップします。例:
Flask==2.3.3
Werkzeug==2.3.7
ステップ5: Docker Composeの設定
最後に、Docker Composeを使用してFlaskアプリケーションとRedisデータベースを含むコンテナを起動する設定を行います。docker-compose.yml ファイルをプロジェクトディレクトリに作成し、以下の内容を記述します:
version: '3'
services:
web:
build: .
ports:
- "5000:5000"
redis:
image: redis
ステップ6: Dockerイメージのビルドとコンテナの起動
すべてのファイルと設定が完了したら、以下のコマンドを使用してDockerイメージをビルドし、コンテナを起動します:
docker-compose build
docker-compose build --no-cache # キャッシュを無視してDockerイメージを再ビルドする場合
docker-compose up # コンテナの起動
これで、Flaskアプリケーションがポート5000で実行され、Dockerコンテナ内でRedisデータベースが実行されます。ブラウザで http://localhost:5000 にアクセスするか、他のHTTPクライアントを使用してアプリケーションにアクセスし「おめでとう成功だ!」と表示されれば完了です。
まとめ
今回は、Dockerを使用してFlaskアプリケーションを構築し、実行する方法を解説しました。
「Dockerfile」は環境設定とコンテナ構築に関わり、「requirements.txt」はPythonライブラリの管理に関与します。さらに、「docker-compose.yml」ファイルには、コンテナの構成や相互関係を記述することで、複雑なアプリケーション環境を簡単に構築し、管理できます。
これらのファイルは協力することで、アプリケーションのDocker化プロセスを支え、環境の再現性と依存関係の管理を実現します。アプリケーションの開発から本番環境へのデプロイメントまで、Dockerを活用して効率的な開発と運用を実現しましょう。