Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
62
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

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

はじめに

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

準備

  • 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読み解くなり自分で作るなりする。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
62
Help us understand the problem. What are the problem?