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

Flask+Docker

Flask Docker Docker Compose
目次

概要
#

これまでの内容をまとめて,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.pyhello-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 にアクセスして,期待通りの結果が表示されることを確認してください.