はなちるのマイノート

Unityをメインとした技術ブログ。自分らしくまったりやっていきたいと思いますー!

【Docker】爆速でDockerを使ってFlaskを用いたREST APIを作る

はじめに

今回はDockerを使ってFlaskREST APIを作ってみたいと思います。

前提

  • Dockerが動く環境

まだDockerを一度も触ったことがない人は公式ドキュメントのGet Startedをとりあえず触ってみると良いと思います。

ファイル構成

FlaskAPITest/
    ├ Dockerfile
    └ app.py

Dockerfileを作成する

Docker Imageを作成するにはDockerfileを作成する必要があります。

# ベース・イメージ を設定
FROM python:3.5.2-alpine

# ファイルをローカルからコンテナ内の指定のパスにコピー
COPY . /app
                     
# ワークディレクトリを設定
WORKDIR /app

# コマンド実行
RUN pip install flask

# コンテナが接続用にリッスンするポートを指定
EXPOSE 5000

# ENTRYPOINT とCMD の両方が書いてあると、CMDに書かれている内容がENTRYPOINTに書いてあるcommandのオプションとして実行
ENTRYPOINT [ "python3" ]

# イメージに含まれるソフトウェアの実行
CMD [ "app.py" ]

Dockerfile のベストプラクティス — Docker-docs-ja 1.9.0b ドキュメント

app.pyを作成する

Flaskを用いてREST APIの処理を書きます。

from flask import Flask, request
app = Flask(__name__)                             

@app.route('/')                                   
def hello_world(): 
    # textで指定されたパラメータをJsonに整形して返す
    text = request.args.get('text', '')                  
    return { 'text' : text }           

# 外部に公開できるようにポート開放
if __name__ == '__main__':                        
    app.run(host="0.0.0.0", port=5000, debug=False)

Dockerの操作

DockerBuildをする

$ docker build -t flaskapitest . 

docker build [オプション] パス | URL | -

オプション 意味
-t name 作成するイメージの名前をnameにする

build — Docker-docs-ja 17.06 ドキュメント

DockerRunをする

$ docker run -p 5000:5000 -it flaskapitest

docker run [オプション] イメージ[:タグ|@ダイジェスト値] [コマンド] [引数...]

オプション 意味
-p=[] 「ホストのポート:コンテナのポート」で公開する
-it コンテナの標準入力を操作する

Docker run リファレンス — Docker-docs-ja 17.06 ドキュメント

テスト

最後にちゃんと動作しているか調べてみましょう。

お好みのWebブラウザを立ち上げ,localhost:5000にアクセスしてみてください。

f:id:hanaaaaaachiru:20201213175152p:plain
localhost:5000の出力例

次に以下のようなURLクエリパラメータをつけて実行してみてください。

localhost:5000/?text=Hello, World
f:id:hanaaaaaachiru:20201213175203p:plain
localhost:5000/?text=Hello, Worldの出力例

写真のような出力が得られれば成功です。