概要#
これまでの内容をまとめて、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.txtrequirements.txt#
次に、Python パッケージの依存関係を記述する requirements.txt を作成します。
# requirements.txt
# flask の最新バージョンを指定する。
flask == 3.0.3compose.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.mdDockerfilerequirements.txtcompose.ymlapp/app.py
このとき、docker compose up を実行すると、hello-rest-app ディレクトリ内のファイルを読み込み、Docker コンテナが起動します。
http://localhost:5001/ にアクセスすると、Hello, REST World! というメッセージが表示されることを確認してください。
また、flask で作成した hello_rest2.py と同じような URL にアクセスして、期待通りの結果が表示されることを確認してください。
