dayjournal memo

Total 975 articles!!

Docker #003 – DockerfileでFlask実行

Yasunori Kirimoto's avatar


画像



DockerfileでFlaskを実行するメモ。



Dockerfileを作成します。


OptionDescription
FROMイメージを指定
COPY指定ディレクトリにコピー
WORKDIRディレクトリパス指定
RUNシェルを実行
CMDコマンド実行

Dockerfile


#PythonのDockerイメージを指定
FROM python:3.6

#ファイルをappディレクトリに追加
COPY app.py /app/
COPY db.sqlite /app/

#ルートディレクトリ設定
WORKDIR /app

#ライブラリインストール
RUN pip install flask
RUN pip install Flask-Restless
RUN pip install Flask-SQLAlchemy

#コマンド実行
CMD ["python", "app.py"]


次に、処置したいファイルを準備します。
今回は、app.pyとdb.sqliteを準備。


app.py


#!/usr/bin/env python
# -*- coding: utf-8 -*-

#モジュールインポート
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_restless import APIManager

#flaskのインスタンス作成
app = Flask(__name__)

#日本語表示対応
app.config['JSON_AS_ASCII'] = False

#SQLite読み込み
app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///db.sqlite"
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False
db = SQLAlchemy(app)

#restless設定
manager = APIManager(app, flask_sqlalchemy_db = db)

#UserテーブルのModel作成
class User(db.Model):
    __tablename__ = "User"
    id = db.Column(db.Integer, primary_key=True)
    m_Key = db.Column(db.String(100))
    m_Name = db.Column(db.String(100))

#JSON取得処理
ic_col=['m_Key', 'm_Name']
manager.create_api(User, include_columns = ic_col, collection_name='api', url_prefix='/', results_per_page=-1, methods=["GET"])

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


準備ができたら、Dockerfileが存在するディレクトリに移動してビルド。


OptionDescription
-tイメージ名指定
—no-cacheキャッシュを使わない


docker build -t イメージ名 --no-cache .

画像



コンテナを起動。


OptionDescription
-itコンテナ名指定
—rm終了時コンテナ削除
-pポート指定


docker run -p 8080:5000 --rm -it コンテナ名

画像



apiにアクセスしてみます。



http://localhost:8080/api

画像



book

Q&A