python flash 앱(oncall-bot)을 docker로 띄우려 할 때.. Dockerfile를 아래처럼 할 수 있다. 

FROM python:2.7-onbuild

EXPOSE 5000

ENTRYPOINT ["python"]
CMD ["oncall-bot.py"]



실행하는 방법은 다음과 같다. 


docker build -t oncall-bot:lastest .


docker run --rm -p 5000:5000 oncall-bot:lastest



로그도 잘 나온다. 




그러나 gunicorn을 사용할 때는 상황이 다르다. task 기반이라..



코드에 아래와 같이 handler를 추가한다. 

app = Flask(__name__)
app.logger.addHandler(logging.StreamHandler(sys.stdout))
app.logger.setLevel(logging.INFO)

함수 내에서 아래와 같이 사용한다. 

app.logger.info("-------------request.data-------------")
app.logger.info(request.data)

requirements.txt에 다음과 같이 gunicorn을 추가한다.

Flask
gunicorn
requests


Dockerfile에서는 아래와 같이 수정한다. 

FROM python:2.7-onbuild

EXPOSE 5000

CMD [ "gunicorn", "--workers", "4", "--bind", "0.0.0.0:5000", "--reload", "oncall-bot:app" ]


로그는 취합되어서 나온다. 


[~] docker logs 52a39cf13d4d

[2017-11-08 08:56:45 +0000] [1] [INFO] Starting gunicorn 19.7.1

[2017-11-08 08:56:45 +0000] [1] [INFO] Listening at: http://0.0.0.0:5000 (1)

[2017-11-08 08:56:45 +0000] [1] [INFO] Using worker: sync

[2017-11-08 08:56:45 +0000] [10] [INFO] Booting worker with pid: 10

[2017-11-08 08:56:45 +0000] [12] [INFO] Booting worker with pid: 12

[2017-11-08 08:56:45 +0000] [14] [INFO] Booting worker with pid: 14

[2017-11-08 08:56:45 +0000] [19] [INFO] Booting worker with pid: 19

-------------request.data-------------


Posted by '김용환'
,