こんにちは、
InfraAcademyというインフラ学習サービスを運営しております、ryuと申します。
今回の記事では、PythonのWebフレームワークであるFlaskをDockerを使って動かしたいと思います。Dockerはコンテナとして、さまざまな環境を仮想的に構築する技術です。Flaskの動作環境をDockerを使って構築したいと思います。
目次
FlaskをDockerで環境構築する方法を解説
ここでは、FlaskをDockerで環境構築する方法を解説します。
Dockerの使い方の解説は特にしないので、Dockerの使い方がわからないという方は、こちらのDocker入門講座の受講をおすすめします。
FlaskをDockerで動作させるためには、まずDockerfileを作成します。
Dockerfileの作成
Dockerfileの作成の前にディレクトリを作成しておきましょう。ディレクトリ名などは任意で大丈夫です。
mkdir flask-docker
cd flask-docker
続いて、Dockerfileを作成します。
vi Dockerfile
Dockerfileの中身は以下の通りです。
# ベースイメージを指定
FROM python:3.9-slim
# 作業ディレクトリを設定
WORKDIR /app
# 必要なパッケージをインストール
RUN apt-get update && apt-get install -y \
build-essential \
procps \
&& rm -rf /var/lib/apt/lists/*
# 必要なPythonパッケージをインストール
COPY requirements.txt requirements.txt
RUN pip install --no-cache-dir -r requirements.txt
# アプリケーションのソースコードをコピー
COPY . .
# ポートを公開
EXPOSE 5000
# アプリケーションを実行
CMD ["python", "app.py"]
requirements.txtの作成
続いて、requirements.txtの作成を行います。
vi requirements.txt
ファイルの中身を以下のように記述します。
Flask==2.1.1
werkzeug==2.0.3
app.pyの作成
続いて、app.pyファイルの作成を行います。
vi app.py
ファイルの中身を以下のように記述しましょう。
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return ' Hello World!'
if __name__ == '__main__':
app.run(debug=True)
このファイルでは、Webページにアクセスすると、「Hello World!」と表示するように記述しています。
これで、設定ファイルなどの準備は完了です。
dockerコンテナの起動
最後にDockerコンテナを起動させてみましょう。
docker build -t flask-docker .
docker run -p 5000:5000 flask-docker
Flaskをコンテナとして起動させたら、Webブラウザからアクセスしてみましょう。「http://127.0.0.1:5000」にアクセスすると、以下のように「Hello World!」と表示されます。
これでコンテナとして動くことが確認できました。
docker-composeファイルから起動させる
続いて、docker-composeファイルから起動させるようにしましょう。
docker-compose.ymlの記述
vi docker-compose.yml
docker-compose.ymlファイルの中身は以下のように記述します。
version: '3.8'
services:
web:
build: .
ports:
- "5000:5000"
volumes:
- .:/app
docker-composeでコンテナの起動
docker-compose.ymlファイルの準備ができたら、起動させましょう。起動するには、以下のコマンドを実行します。
docker-compose up -d
先ほどと同様に、「http://127.0.0.1:5000」へアクセスできれば成功です。
本番環境へ公開する場合
本番環境へ公開する場合は、GunicornでFlaskを動作させることをおすすめします。
この場合、Dockerfileの最後の行を以下の通りに変更します。
# アプリケーションを実行
#CMD ["python", "app.py"] ←ここをコメントアウト
CMD ["gunicorn", "--reload", "-b", "0.0.0.0:5000", "app:app"]
また、requirements.txtの中に以下を追加しましょう。
gunicorn==20.1.0
本番環境では、Gunicornがなぜ良いのかについては、こちらの記事で詳しく解説しています。
関連記事:flask runとgunicornコマンドって何が違うの?
まとめ
今回の記事では、FlaskをDockerで環境構築する方法について解説しました。Dockerを使うと、チーム開発する際や、デプロイする際に便利です。
Dockerを有効活用して、Webの開発スピードを効率化していきましょう。
当ブログでは、このようなITやインフラに関する記事を発信しているので興味のある方は引き続きご覧ください。