Docker로 Flask를 build하고 배포하기


초간단 Flask 웹서버를 Docker로 빌드하고 실행합니다.


먼저 가상화 환경을 만듭니다. VSCODE에서 Python VirtualEnv 실행하기를 참조하세요.

위의 폴더 안에 requirement.txt를 만듭니다.

flask
flask_cors
uwsgi


pip install -r requirement.txt


app.py

from flask import Flask, jsonify
from flask_cors import CORS

app = Flask(__name__)
CORS(app)

@app.route('/')
def home():
    return jsonify(
        text='Hello, world',
        id = 'exharo',
        no = 203
    )


다음과 같이 실행합니다.

export FLASK_APP=app.py
flask run


플라스크에서 애플리케이션의 default name은 app이며, 이 경우 export FLASK_APP 지정을 생략할 수 있습니다.

FLASK_DEBUG=1 flask run


FLASK_DEBUG=1 옵션을 줄 경우 내용을 수정하고 저장할 경우 서버가 자동으로 reload 됩니다
http://127.0.0.1:5000/에 접속해서 정상적으로 작동하는지 확인합니다.

result.jpeg
uwsgi.ini

[uwsgi]
http = : 5000
wsgi-file = app.py
single-interpreter = true
enable-threads = true
master = true


port를 5000으로 설정했습니다.

app.py

from flask import Flask, jsonify
from flask_cors import CORS

app = Flask(__name__)
CORS(app)

@app.route('/')
def home():
    return jsonify(
        text='Hello, world',
        id = 'exharo',
        no = 203
    )

application = app


uWSGI에서의 default name은 application입니다. 그래서 마지막줄에 application = app 추가했습니다.
uWSGI server는 다음과 같이 실행합니다.

uwsgi --ini uwsgi.ini


Dockerfile을 다음과 같이 만듭니다.

FROM python:3.6.4

COPY . /app

WORKDIR /app 

RUN pip install -r requirement.txt

CMD ["uwsgi", "uwsgi.ini"]


정리하면 파일구성은 다음과 같습니다.

tree.jpeg

docker build -t test_flask_docker .
docker container run -p 8080:5000 -it test_flask_docker


http://127.0.0.1:8080/에 접속해서 정상적으로 작동하는 것을 확인합니다.