67
62

More than 5 years have passed since last update.

Dockerを使って低コストでFlaskの開発環境を構築

Posted at

はじめに

ハンズオンや思いつきの用途で、環境をサクッと作って使い捨てたかったので
数ファイルと数秒で構築できるように作りました。

準備

  • Dockerが動く環境
  • インターネット接続

基礎的なことしかやらないので、Dockerさえ動けばなんとかなるはず。
私の実行環境はDocker for MacのPublic Betaです。

バージョン
$ docker --version
Docker version 1.12.0, build 8eab29e, experimental

ソース

ローカルディレクトリ構成
flask/
    ├ Dockerfile
    ├ requirements.txt
    └ hello.py

Dockerfile

# ベースイメージの指定
FROM python:3.5.2-alpine

# ソースを置くディレクトリを変数として格納                                                  
ARG project_dir=/web/hello/

# 必要なファイルをローカルからコンテナにコピー
ADD requirements.txt $project_dir
ADD hello.py $project_dir

# requirements.txtに記載されたパッケージをインストール                         
WORKDIR $project_dir
RUN pip install -r requirements.txt

# (コンテナ内で作業する場合)必要なパッケージをインストール
RUN apk update                  
RUN apk add zsh vim tmux git tig

requirements.txt

$ pip install flaskの実行後に$ pip freeze > requirements.txtしたもの

requirements.txt
click==6.6
Flask==0.11.1
itsdangerous==0.24
Jinja2==2.8
MarkupSafe==0.23
Werkzeug==0.11.10

パッケージのバージョンが変わっても困らないのであれば
単純にコンテナ内で$ pip install flaskでもまったく問題なし。

hello.py

公式ページから拝借。
app.runの引数は開発用途として修正。

hello.py
from flask import Flask                           
app = Flask(__name__)                             

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

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

手順

イメージ作成

イメージ作成
$ cd /path/to/flask/
$ docker build -t flask . 
  • '-t flask': 作成するイメージの名前を'flask'にする
  • '.': カレントディレクトリにあるDockerfileを使用

コンテナ起動

コンテナ起動
$ docker run -p 5000:5000 -it flask /bin/sh
  • '-p 5000:5000': hostの5000番ポートをコンテナの5000番ポートに向ける
  • '-it': 現在の入力デバイスでコンテナを操作
  • 'flask': イメージ名の指定
  • '/bin/sh': 起動したコンテナでshコマンドを実行

Flask実行

hostやportはhello.py内で既に指定されているため、実行のみ。

Flask実行
$ cd /path/to/hello/
$ python hello.py

ブラウザからlocalhost:5000にアクセスすると、Hello World!が表示されます。

むすび

今まではAnsibleでpyenvやvirtualenvを駆使して作ってたけど
どうせ捨てるし、バージョン管理周りはざっくりでいいと思う。

Pythonのインストールはベースイメージにおまかせなので
ちゃんとした開発をするならDockerfile読み解くなり自分で作るなりする。

67
62
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
67
62