Help us understand the problem. What is going on with this article?

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

More than 3 years have passed since last update.

はじめに

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

準備

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

nanakenashi
都内に勤務のエンジニア。
lifull
日本最大級の不動産・住宅情報サイト「LIFULL HOME'S」を始め、人々の生活に寄り添う様々な情報サービス事業を展開しています。
https://lifull.com/
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
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  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
ユーザーは見つかりませんでした