👌목표:
flask를 사용한 flaskApp.py를 Dockerfile을 이용해 이미지화해서 컨테이너로 띄우기
from flask import Flask
from urllib.parse import quote as url_quote
app = Flask(__name__)
@app.route('/')
def hello():
return 'hello flask world'
if __name__ == '__main__':
app.run(host="0.0.0.0", port=3000)
FROM python:3.9
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
COPY . /app
WORKDIR /app
CMD [ "python","flaskApp.py"]
이때 다른 dockerfile과는 다르게 requirements.txt라는걸 넣는데,
requirements.txt에는 이렇게 입력하자.
Flask==2.0.3
Werkzeug==2.0.3
이렇게 입력하는게 생각보다 중요하다(이유는 밑에서)
docker build -t flask-app .
도커 이미지를 빌드한다.
docker run -d -p 3000:3000 flask-app
도커 컨테이너를 실행한다.
-d : 백그라운드에서
-p : 포트포워딩
3000:3000 호스트포트:컨테이너포트

잘 뜨는걸 확인할 수 있다.
진심 이거 때문에 1시간 정도 썼다.
Flask와 Werkzeug의 버전 차이 문제로 인식하고 스택오버플로우랑 레딧 참고해서 링크
했는데도 계속 같은 오류가 나길래 gpt한테 물어봤더니
pip install flask==2.0.3 werkzeug==2.0.3로 다운그레이드 필요
라고 알려줬다.
근데? 이렇게 해도 안됬다.
그리고 docker ps -a해보니 세상에

docker run으로 생성된 컨테이너가 exited된채 한가득! 무한 제공 이벤트!^^
그래서 docker container prune으로 exited된 컨테이너 다 지워줬다.
다시 docker run해서 띄워보니 문제 해결!
근데? 두번째 문제 발생.
페이지가 로드가 안됬다. (뭐에요)
이유를 찾아보니
Flask를 기본 설정으로 실행하면 127.0.0.1(로컬 루프백) 에서만 바인딩돼서
도커 컨테이너 밖에서는 접근할 수 없다.
app.run(host="0.0.0.0", port=3000)
이렇게 수정해줬더니 잘 됬다.
다음에 계속~