DockerコンテナでFlaskアプリをパッケージ化する
Flaskで作ったアプリをデプロイする方法を考えていたけど、dockerでコンテナにしてパッケージ化するのが手っ取り早そうなので、コンテナを作るメモ。
この記事が役に立ったらコーヒーをおごろう
下のリンクはBuy me a coffeeという投げ銭システムのリンクです。役に立ったと思ったら、ぜひ投げ銭をお願いします。
Flaskアプリを用意する
Flaskアプリがないと始まらないのでテスト用のFlaskアプリを用意する。テスト用のアプリは、venvで環境を作り、その中にFlaskをインストールして用意する。
$ python -m venv docker_flask # docker_flaskフォルダにvenv環境を用意
$ cd docker_flask/ # フォルダに入る
$ source bin/activate # venv環境を有効化する
$ pip install flask # Flaskをインストール
venv環境にflaskをインストールしたら、動作確認用の簡単なアプリを用意する。アプリは、appフォルダにまとめておく。
$ mkdir app
$ touch app/app.py # 空のFlaskファイル
$ mkdir app/templates
$ touch app/templates/index.html # 空のテンプレート
エディタでapp.pyとtemplates/index.htmlを以下のように編集して用意する。
app.py
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/')
def index():
text ="これはFlaskアプリのテストです"
return render_template('index.html', text = text)
if __name__== '__main__':
app.run(host='0.0.0.0')
templates/index.html
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Flask App</title>
</head>
<body>
<h1>{{ text }}</h1>
</body>
</html>
用意したら実行して動作を確認する。ブラウザが開いてメッセージが出ればOK。
$ python app.py
Waitressをインストールする
本番で使うにはWSGIサーバーが必要なので、Waitressをインストールする。
Waitressを選んだ理由は特になく、単にFlaskチュートリアルに出てたから選んだだけなので使いたいものがあるなら、それを使ってください。
$ pip install waitress
Waitressをインストールしたら、Flaskアプリ(ここではapp.py)をWaitressを使って動かすために変更する。
from waitress import serve # 追加する
(中略)
if __name__ == "__main__":
serve(app, host='0.0.0.0', port=5000) # app.runから変更する
Waitress用に変更したら、再度実行してWaitressサーバーで動くか確認する。
$ python app.py
requirements.txtファイルを作る
Flaskなどをインストールするためのパッケージ一覧をrequirements.txtに書き出す。
$ pip freeze > requirements.txt
パッケージ一覧を書き出しておくと以下のコマンドでパッケージを一括インストールできる。
$ pip install -r requirements.txt
Dockerfileを作ってコンテナにまとめる
ひととおり準備できたのでDockerfileを作ってコンテナとしてまとめる。
Dockerfile
FROM python:3.10-alpine
WORKDIR /app
COPY ./requirements.txt /app/requirements.txt
RUN pip install -r requirements.txt
COPY ./app/ /app/
CMD ["python","app.py" ]
Dockerfileを作ったらコンテナをビルドする。
$ docker image build -t flaskapp .
ビルドしたらコンテナを実行して確認する。
$ docker run -p 5000:5000 flaskapp
ブラウザでlocalhost:5000にアクセスして、最初に試したようにメッセージが出ればコンテナ化できている。
この記事が役に立ったらコーヒーをおごろう
下のリンクはBuy me a coffeeという投げ銭システムのリンクです。役に立ったと思ったら、ぜひ投げ銭をお願いします。