↓ メインコンテンツへスキップ
  1. 補講/
  2. 補講02講 Webアプリケーション(Docker)/

Flask+Docker

概要
#

これまでの内容をまとめて、Flask を Docker コンテナ上で動かします。 単なる一つのファイルで終わるプログラムではなく、複数の設定ファイル、スクリプトファイルから構成されることになります。 そのため、1つのディレクトリを作成し、その中に必要なファイルを配置することにします。

ディレクトリ構成
#

Flaskで作成した hello_rest2.py を Docker コンテナ上で動かすことを考えます。 以下のディレクトリ構成を考えます。

hello-rest-app/
├── README.md        # このアプリケーションの説明。何をするものであるのかの1行は最低限書きましょう。
├── Dockerfile       # これから作成していきます。Docker イメージを構築するための設定ファイルです。
├── requirements.txt # これから作成していきます。Python パッケージの依存関係を記述します。
├── compose.yml      # これから作成していきます。Docker コンテナを管理するための設定ファイルです。
└── app/
    └── app.py       # hello_rest2.py を app.py にファイル名を変更しました。

README.md
#

Markdown という形式で書きます。 基本的にテキスト形式に、リンクや画像を埋め込むことができます。 行頭の # で見出し、- で箇条書きを表現できます。 詳細は以下のリンクを参照してください。

Dockerfile
#

まずは、Docker イメージを構築するための Dockerfile を作成します。

# Dockerのベースイメージを指定する。
FROM python:3

# コンテナイメージでの作業ディレクトリを指定する。
WORKDIR /app
USER nonroot

# Flask に必要なパッケージを列挙したものをコンテナ内にコピーする。
COPY ./requirements.txt /app

# Flask に必要なパッケージをコンテナ内にインストールする。
# 実行するのはコンテナOS内であるため、pip3 ではなく pip で実行する。
RUN    pip install --upgrade pip \
    && pip install -r requirements.txt

requirements.txt
#

次に、Python パッケージの依存関係を記述する requirements.txt を作成します。

# requirements.txt
# flask の最新バージョンを指定する。
flask == 3.0.3

compose.yml
#

Docker コンテナを管理するための compose.yml を作成します。

services:
  app:                          # サービス名
    container_name: "hello"     # コンテナ名
    build:
      context: .                # Dockerfile のあるディレクトリ
      dockerfile: Dockerfile    # Dockerfile のファイル名
    ports:                      # ポート番号を設定する。
      - "5001:5001"             # ホスト側のポート:コンテナ側のポート
    volumes:
      - ./app:/app              # ホスト側のディレクトリ:コンテナ側のディレクトリ
    command: python /app/app.py # コンテナ起動時に、コンテナ内で実行するコマンド。python3 ではなく、python で実行する。

実行する
#

Flaskで作成した hello_rest2.py を hello-rest-app/app/app.py にコピーし、hello-rest-app ディレクトリに移動します。 これで、hello-rest-app ディレクトリには以下のファイルが存在します。

  • README.md
  • Dockerfile
  • requirements.txt
  • compose.yml
  • app/app.py

このとき、docker compose up を実行すると、hello-rest-app ディレクトリ内のファイルを読み込み、Docker コンテナが起動します。 http://localhost:5001/ にアクセスすると、Hello, REST World! というメッセージが表示されることを確認してください。 また、flask で作成した hello_rest2.py と同じような URL にアクセスして、期待通りの結果が表示されることを確認してください。