Loading
  • LIGHT

  • DARK

ROUTE

ルートゼロの
アクティビティ

DockerでPython Flaskアプリを簡単に構築する方法

8

この記事では、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アプリケーションを試してみてください。
最初は戸惑うかもしれませんが、何度も繰り返し試すことで、すぐにスムーズにできるようになりますよ!

RANKINGranking-icon

LATEST POSTS

もっとルートゼロを知りたいなら

DISCOVER MORE