【簡単】DockerでFlaskの実行環境(コンテナ)を作成する方法

  • URLをコピーしました!

こんにちは、はやたす(@hayatasuuu )です。

今回は「DockerでFlaskの実行環境を作成する方法」を紹介します。

多分”Flask Docker”とか”Docker Flask”で検索してるあなたは「とりあえず一番カンタンな方法を教えて欲しいな…」と考えているはずです。

というのも、記事によって紹介されているDockerコンテナの作成方法が違うんですよね。

だからDockerに慣れていないと、どの方法を採用したら良いのか迷ってきます。

この記事は、Dockerの扱いに慣れていないあなたを手助けします。
具体的には、Dockerfileだけで「とりあえずFlaskの環境を作る方法」を紹介していきます。

必要なのは、たったの3ステップ。
順を追うだけで…、というかコピペするだけで完了します。

まずは実装を体験してみて、後から理解を深めていきましょう。

目次

【簡単】DockerでFlaskの実行環境(コンテナ)を作成する方法

結論、DockerでFlaskの実行環境を作成するには、以下の3ステップが必要です。

  • STEP1 : Pythonファイルを作成する
  • STEP2 : Dockerfileでイメージを作成する
  • STEP3 : イメージからコンテナをビルドする

それでは順番に見ていきましょう。

STEP1 : Pythonファイルを作成する

Pythonファイルを作成するにあたって、まずは今回のプロジェクトフォルダを作成しましょう。この記事では/Users/<ユーザー名>/Dev/docker-flaskというフォルダを作成しています。とりあえず記事の内容を試したいということなら、デスクトップ配下で良いと思います。

また、最終的なフォルダ構成は以下のようになります。

$ tree .
# .
# ├── Dockerfile
# └── app
#     └── app.py
# 
# 1 directory, 2 files

Dockerfileはあとで書くので、今はapp配下にFlask用のPythonファイルを作成しましょう。

今回は”Hello World”を出力するプログラムをapp.pyに書いておきます。

import os 

from flask import Flask


port = int(os.environ['PORT'])
app = Flask(__name__)

@app.route('/')
def index():
   return 'Hello World!!!'

if __name__ == '__main__':
    app.run(debug=True, host='0.0.0.0', port=port)

これでSTEP①は完了です。

STEP2 : Dockerfileでイメージを作成する

Pythonファイルを作成したら、次にDockerfileを準備しましょう。これを元にDockerイメージを作成します。

結論、今回Dockerfileに書く内容は以下のとおりです。

FROM python:3.8.11-slim-buster

RUN pip install --upgrade pip
RUN pip install flask==2.0.1

ENV PORT 80

WORKDIR /app

COPY ./app/ /app

CMD ["python", "app.py"]

1行目ではベースになるコンテナイメージを指定しています。
なんとなく分かるかもしれませんが、今回指定しているのはバージョン3.8.11のPythonを使うためのコンテナイメージです。

その後に付いてるslim-busterはOSの選択部分です。他にも以下のようなOSを選べます。

  • buster / slim-buster
  • alpine
  • streach / slim-streach

今回使っているBusterとかStreachというのは、Debianのコードネームです。コードネームはDebianのバージョンを表しています。

  • Streach : Debian 9
  • Buster : Debian 10

つまり今回使っているslim-busterは、OSにDebian10が使われているということです。
それにslimが付いているので、色々なインストール済みパッケージを含まないBusterの軽量版になります。

他にも色々なPythonイメージがあるので詳しくはDocker Hubを見てみてください。

※なお、PythonのDockerイメージで、OSにAlpine Linuxを選ぶべきではありません。詳細は以下の記事に譲りますが、ビルド時間が長くなるなどパフォーマンス上の問題があるからです。(参考 : The best Docker base image for your Python application (February 2021)

さて、話を戻して。Dockerfileを作成できたら、それを元にDockerイメージを作成します。

そのためには、以下のコマンドをターミナルで入力します。

$ docker image build -t python-flask .

このコマンドを使えばpython-flaskという名前で、Dockerfileを元にDockerイメージを作成します。

おそらく最初はイメージの作成に時間がかかります。少し待ちましょう。
もしもイメージの作成が完了したら、以下のコマンドを入力してみてください。

$ docker image ls
# REPOSITORY     TAG       IMAGE ID       CREATED             SIZE
# python-flask   latest    62823313b6f7   About an hour ago   118MB

これで作成したイメージを確認できるはずです。

STEP3 : イメージからコンテナをビルドする

最後にイメージを元にコンテナをビルドしましょう。

結論、ここで入力するコマンドは以下です。

docker container run --rm -d -p 5000:80 -v ${PWD}/app:/app --name myflask python-flask

コマンドを実行するとランダムな英数字が出力されます。

これはDockerコンテナの作成が完了した合図です。
あとは自分のPCでFlaskを動かすときと同じようにlocalhost:5000にアクセスしてみてください。

docker-flask1

こんな感じでHello Worldと表示されたページを開けるはずです。

コードを変更したいときはapp/app.pyをそのまま編集します。試しにHello Worldに対してh1タグを付けてみましょう。

import os 

from flask import Flask


port = int(os.environ['PORT'])
app = Flask(__name__)

@app.route('/')
def index():
   return '<h1>Hello World!!!</h1>'

if __name__ == '__main__':
    app.run(debug=True, host='0.0.0.0', port=port)

コードを保存したら、ページを更新してみてください。ちゃんとh1タグが付いているはずです。

docker-flask2

これでDockerを使ったFlaskの実行環境を作成できるようになりました。
もしコンテナの動作を止めたいということであれば、以下のコマンドを実行してください。

$ docker container stop myflask

コンテナ作成時に--rmを付けているので、コンテナ動作の停止後に削除されるようになっています。

以下のコマンドを入力すればmyflaskコンテナが削除されていることが分かるはずです。

$ docker container ls -a

もしイメージも不要なら、以下のコマンドで削除しましょう。

$ docker image rm python-flask

これで後片付けも完了です。

SNSに投稿して読み返す
  • URLをコピーしました!
  • URLをコピーしました!
目次