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