2020年9月8日火曜日

VSCode + Python + Flask + Docker で環境構築 #01 : Flaskアプリをdocker上で動かしてみる

どうも、もりもりです。

最近Dockerとか触ってみてるので開発環境作ったり運用環境を作ったりといったところで
連載したいと思います。

こんな感じで。

今回はこちら → #01. Flaskアプリをdocker上で動かしてみる
#02. vscodeのRemote Developmentでデバッグしてみる
#03. 運用環境を構築してみる

まずはDocker上にPythonやらFlaskやらをインストールし、
ソースを置いて実行してホストPCからアクセスしてみる。

環境


・ macOS Catalina 10.15.6
・ VSCode 1.48
・ Docker 19.03.12
・ Docker Compose 1.26.2

ディレクトリ構成


flask_hello_world
  ├── docker-compose.yml
  ├── Dockerfile
  ├── requirements.txt
  └── run.py

ソースコードはGithubにあげてます。



Dockerfile


Python公式のイメージからDockerイメージを作成します。
# base image
FROM python:3.8.5

ARG project_dir=/work/

# workdir にファイル等追加
ADD run.py $project_dir
ADD requirements.txt $project_dir

# workdir
# なければ新規作成
WORKDIR $project_dir

# upgrade pip
RUN pip install --upgrade pip
RUN pip install -r requirements.txt

# port
EXPOSE 5000

ENV PYTHONPATH "${PYTHONPATH}:/code/"
ENV FLASK_APP "/run.py"

docker-compose.yml


こちらはDockerイメージのビルド情報やコンテナ起動時の情報などを
定義するファイルです。

version: '3'

services:
    web:
        container_name: hello_flask
        build: .
        ports:
            - "5000:5000"
        tty: true
        environment:
            TZ: Asia/Tokyo
        command: flask run --host 0.0.0.0 --port 5000

requirements.txt


インストールしたいパッケージやバージョンを指定します。
flask

# バージョンまで指定する場合
# flask == 1.1.2

pip freeze で現在の環境にインストールされたパッケージと
バージョンを確認することができます。
よって下記を実行してそのままファイルへ書き出し。

$ pip freeze > requirements.txt

run.py


from flask import Flask

app = Flask(__name__)

@app.route("/")
def index():
    return "Hello Flask!"

@app.route("/hello/<name>")
def hello_someone(name):
    return "Hello " + name + " !"

コンテナを起動

下記コマンドでコンテナを起動します。
$ docker-compose up -d

動作確認


コンテナが起動すればブラウザから下記にアクセスするだけです。

http://localhost:5000

http://localhost:5000/hello/{name}
※ {name} の部分はご自由に置き換えてください。

コンテナを停止

コンテナを停止する際は下記コマンドを実行してください。
コンテナの起動や停止はDocker Desktopから行ってもOKです。
$ docker-compose stop


うん、とりあえず動きましたね。

次回は開発環境としてソースなどをコンテナにのせて
デバッグ実行できるようにしたいと思います。


以上、もりもりでした。

0 件のコメント:

コメントを投稿