この記事では、Dockerを使用してPythonベースのFlaskアプリケーションを構築する方法について解説します。Dockerを使うことで、アプリケーションの開発環境を簡単にセットアップし、どこでも動作させることができるため、特にチーム開発や本番環境へのデプロイがスムーズになります。今回は、具体的な設定ファイルを元に、FlaskアプリケーションのDocker化の手順を紹介します。
1. はじめに:Dockerとは
まず、Dockerについて簡単に触れましょう。Dockerは、アプリケーションとその依存関係をコンテナという単位でパッケージ化できるツールです。これにより、開発者は異なる環境でも一貫してアプリケーションを動作させることができます。
Dockerを使うと、複雑な環境設定を気にせず、同じアプリケーションをどこでも簡単に動かせるようになります。例えば、チームメンバーと同じ開発環境を素早く整えることができたり、エラーが発生してもすぐに解決できます。
この記事では、PythonのFlaskを使用してWebアプリケーションを作成し、それをDockerコンテナ内で動作させる方法を紹介します。
2. Flaskを使う理由
Flaskは、シンプルで軽量なWebフレームワークで、少ないコードで素早くWebアプリケーションを開発できます。必要な機能だけを追加できるので、プロジェクトに合わせて自由にカスタマイズ可能です。
必要なファイルとディレクトリ構成
まず、必要なファイルとディレクトリ構成を確認しましょう。以下の構成を用意します。
├── flask
│ ├── __pycache__
│ ├── app.py
│ ├── Dockerfile
│ ├── requirements.txt
└── docker-compose.yml
-
flask/app.py: Flaskアプリケーションのメインファイルです。
-
flask/Dockerfile: Dockerイメージをビルドするための設定ファイルです。
-
flask/requirements.txt: Flaskアプリケーションが依存するパッケージを記述したファイルです。
-
docker-compose.yml: コンテナを管理するための設定ファイルです。
3. docker-compose.yml の設定
まず、docker-compose.ymlファイルから見ていきます。このファイルは、複数のサービス(コンテナ)を一元的に管理するための設定を記述します。
version: '3'
services:
flask:
build:
context: ./flask
ports:
- "5003:5000"
restart: always
volumes:
- ./flask:/app
-
build.context: Dockerイメージをビルドする際のコンテキストを指定します。今回は、./flaskディレクトリ内のファイルを使用します。
-
ports: コンテナ内で動作するFlaskアプリケーションのポート(5000)をホストのポート(5003)にマッピングします。
-
restart: コンテナが停止した場合に自動で再起動する設定です。alwaysに設定すると、常に再起動します。
-
volumes: ローカルの./flaskディレクトリをコンテナ内の/appディレクトリにマウントします。これにより、ローカルのファイルを変更した場合、コンテナ内で即反映されます。
4. Dockerfileの設定
次に、Dockerfileの内容を確認します。このファイルは、Dockerイメージをどのように作成するかを記述する設定ファイルです。
# Pythonベースのイメージを使用
FROM python:3.9-slim
# 作業ディレクトリの設定
WORKDIR /app
# 必要なパッケージのインストール
COPY requirements.txt /app/requirements.txt
RUN pip install --no-cache-dir -r requirements.txt
# サーバーの起動
COPY . /app
CMD ["python", "app.py"]
-
FROM python:3.9-slim: Pythonのバージョン3.9のスリムイメージをベースにします。このイメージは必要最小限のパッケージが含まれた軽量なものです。
-
WORKDIR /app: 作業ディレクトリを/appに設定します。以後、このディレクトリ内でコマンドが実行されます。
-
COPY flask/requirements.txt /app/requirements.txt: requirements.txtをコンテナ内の/appディレクトリにコピーします。
-
RUN pip install –no-cache-dir -r requirements.txt: requirements.txtに記載された依存パッケージをインストールします。–no-cache-dirオプションでキャッシュを残さないようにしています。
-
COPY . /app: プロジェクト内の全てのファイルをコンテナ内にコピーします。
-
CMD [“python”, “app.py”]: コンテナが起動するときに実行されるコマンドを指定します。Flaskアプリケーションを起動します。
docker-compose.yml と Dockerfile の設定
docker-compose.ymlとDockerfileの具体的な設定については、以下の記事で詳しく解説されていますので、こちらを参照してください。Dockerfileとdocker-compose.ymlの詳細設定についてはこちらの記事をご覧ください
5. requirements.txtの設定
Flaskのバージョンや必要なパッケージをrequirements.txtに記載します。以下のようにFlaskのバージョンを指定しましょう。
Flask==2.0.1
Werkzeug==2.0.1
これで、Flaskのバージョン2.0.1がインストールされることになります。
6. app.pyの設定
続いてapp.pyはFlaskアプリケーションの設定ファイルで、実際にWebアプリケーションの動作を定義します。このファイルは、ルーティング、リクエストの処理、レスポンスの返却を行います。
以下はシンプルなFlaskアプリケーションの例です。
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello, World!'
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
-
Flask(__name__): Flaskアプリケーションのインスタンスを作成します。このインスタンスを使ってルートやリクエストを処理します。
-
@app.route(‘/’): アプリケーションのルート(/)へのHTTPリクエストを処理する関数hello_world()を定義します。この場合、アクセスすると「Hello, World!」というテキストが表示されます。
-
app.run(host=’0.0.0.0′, port=5000): アプリケーションを実行するために、外部からのアクセスを許可するためにホストを0.0.0.0に設定し、ポート5000でアプリケーションを起動します。
app.pyを作成することで、Flaskアプリケーションが実行される際の挙動を定義します。これをコンテナ内で実行することで、簡単にWebアプリケーションを起動できるようになります。
このファイルを作成した後、Dockerfileやdocker-compose.ymlとともにプロジェクトを構成し、コンテナでアプリケーションを実行します。
7. コンテナのビルドと起動
すべての設定が完了したら、次はコンテナをビルドして起動します。以下のコマンドでDockerコンテナをビルドし、起動します。
docker-compose build
docker-compose up
コンテナが動作しているかは、以下のコマンドを使用して確認できます。起動しているプロセスが表示されることを確認してください。
docker ps
まとめ
この記事では、FlaskアプリケーションをDockerで構築するための手順を解説しました。Dockerを使うことで、アプリケーションの開発環境を簡単に構築でき、チームでの作業や本番環境へのデプロイがよりスムーズになります。
この記事を参考にして、ぜひDockerを使ったFlaskアプリケーションを試してみてください。
最初は戸惑うかもしれませんが、何度も繰り返し試すことで、すぐにスムーズにできるようになりますよ!