show log include yuh

勉強したことの復習を兼ねて、IT関係(ネットワーク/サーバ/アプリケーション)についてまとめてます。たまに趣味のこと

スポンサーリンク

Python + Flask でDocker入門

概要

今更ながら簡単にdocker触ってみました。ローカルで試しに作るときはVirtualenvを使っていましたがコンテナ化もしてみたく。
dockerをローカルで動かすところまで記載したいと思います。
Virtualenvについてはこちら↓ yunabe.hatenablog.com

はじめに

公式にDockerfile のベストプラクティスというのがあったので読んで見る
ちゃんと日本語である(すごい) Dockerfile のベストプラクティス — Docker-docs-ja 1.9.0b ドキュメント 色々ありますがこの辺は特に気をつけようと思ったもの、たぶん見なかったら守れてなかった。
・コンテナ毎に1つのプロセスだけ実行
・レイヤの数を最小に
・複数行の引数

ディレクトリ構成

ベストプラクティスを読んで構成を以下のようにしてみました。

├─ README.md
 | 
└─ APP
   └─ dockerfile
   └─ main.py
   └─ requirements.txt
   └─ env.txt

ちなみにディレクトリ構成を書く線は"罫線"と打つと出てきます 。でも綺麗に見えてない...あとで調べて見よう。

dockerfile

# ベースイメージは今回Pythonのみを仕様
FROM python:3.7

# よく使うためソースファイルを置くディレクトリを環境変数に代入
ARG project_dir=/app/

# ソースとインストールモジュールをまとめた必要ファイルをコンテナにコピー
ADD requirements.txt $project_dir
ADD main.py $project_dir

# パッケージ&変数読み込み
WORKDIR $project_dir
RUN pip install --upgrade pip
RUN pip install -r requirements.txt

# コンテナ起動
CMD ["python", "main.py"]

env.txt

環境変数を別ファイルにまとめる。今回イメージに焼くのではなくコンテナに渡す形とします

AAAA=xxxx
BBBB=yyyy
CCCC=zzzz

docker imageを作成

flask-appという名前でimageを作成します
docker build -t flask-app .

Dockerをenv fileを読み込んで起動

docker run --env-file=env.txt -p 443:443 -it flask-app
※ -itd にするとデーモン化されます

確認

https://localhostcurlをすることでflaskが動いていることが確認できれば完了です。