DockerfileでFlaskを実行するメモ。
Dockerfileを作成します。
Option | Description |
---|---|
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が存在するディレクトリに移動してビルド。
Option | Description |
---|---|
-t | イメージ名指定 |
—no-cache | キャッシュを使わない |
docker build -t イメージ名 --no-cache .
コンテナを起動。
Option | Description |
---|---|
-it | コンテナ名指定 |
—rm | 終了時コンテナ削除 |
-p | ポート指定 |
docker run -p 8080:5000 --rm -it コンテナ名
apiにアクセスしてみます。
http://localhost:8080/api
- 参考文献
Docker