Docker

[Docker] dockerfile로 flask 배포하기

멍이요 2021. 12. 9. 23:56

Flask app 이 준비되어 있을 때 docker로 배포하는 과정

1. Dockerfile 만들기 (flask 내부 서버 이용)

# base-line image
FROM python:3.9.6-buster

# 프로젝트 clone
# ex) git clone https://github.com/flask_app.git
RUN git clone "Github에 있는 Flask app"

# 작업 디렉토리를 "git clone 한 repository 경로" 으로 지정
# ex) WORKDIR /flask_app
WORKDIR "git clone 한 repository 경로"

# pip install 실행
RUN pip install -r requirements.txt

# 환경변수 설정
# ENV FLASK_APP flask
ENV FLASK_APP "Flask app 이름"

# entrypoint
ENTRYPOINT ["flask"]

# 컨테이너 실행 시 flask run --host 0.0.0.0 실행
# --port 포트번호 => 포트번호 설정가능 기본포트 5000
CMD ["run", "--host", "0.0.0.0"]
  • RUN
    • 컨테이너를 생성하면서 실행할 CLI 명령어 지정
  • WORKDIR [PATH]
    • 작업 디렉토리로 이동하는 것. cd 명령이랑 비슷함
  • ENV
    • 환경변수를 설정한다.
  • ENTRYPOINT
    • 컨테이너를 실행 시 실행하는 명령어 지정
  • CMD
    • 컨테이너를 실행 시 실행하는 default 명령어
    • 실행 시 따로 명령어를 사용하지 않을 시 default로 CMD로 지정한 명령어 사용
    • 위와 같은 경우 따로 지정하지 않을 시 $ flask run —host 0.0.0.0 이 실행된다.
    • 지정했을 경우, $ flask [명령어] 이 실행된다.

2. docker image 빌드하기

$ docker build -t '이미지명' .

3. Container 생성하고 실행하기

$ docker run -d --name '컨테이너 이름' -e TZ=Asia/Seoul -p '호스트 포트':'컨테이너 포트' '이미지명'
  • '-p' 옵션
    • 호스트 운영체제와 컨테이너 환경의 포트를 매핑시키기 위한 옵션 (포트 포워딩)
  • '-d' 옵션
    • 이 옵션을 없애면 컨테이너 실행 시 나오는 로그들 보여줌.
  • '-P' 옵션
    • 호스트 운영체제의 랜덤 포트가 컨테이너의 포트에 매핑됨
    • ex) 0.0.0.0:(랜덤 포트 번호) → 컨테이너:(EXPOSE로 선언한 포트 번호)로 매핑됨
  • '-e' 옵션
    • 컨테이너를 실행하면서 환경변수 설정
    • ex) -e TZ=Asia/Seoul
    • → timezone을 서울로 변경 (default : 영국)

4. 이미지 push 하기

# Docker 로그인
$ docker login -u 'docker hub ID'
# 이미지에 tag 달기
$ docker tag '기존 이미지명' 'docker ID'/'이미지명'
# 이미지 docker hub에 push
$ docker push '이미지명'

5. 이미지 pull 하기

$ docker pull '이미지명'

클라우드 서버에 접속하여 도커만 설치되어 있으면,

image를 pull 하여 별다른 설정을 안 하고 배포가 가능함.