아무나 빌려가세요

docker + flask + apache 를 이용한 앱 배포 (2) 본문

오늘 배운 프로그래밍

docker + flask + apache 를 이용한 앱 배포 (2)

빌라노바 2023. 12. 22. 13:55

1부에 이어서 DockerFile에 들어갈 내용을 서술하도록 하겠다.

DockerFile

FROM python:3.9
WORKDIR /app
COPY . /app
COPY requirements.txt .
RUN pip install -r requirements.txt
EXPOSE 80
CMD ["uwsgi", "--ini","/app/uwsgi.ini"]
  • FROM : 도커이미지를 넣는 부분이며 Flask앱을 배포하기위해 Python:3.9 버전을 입력했다. 도커에서 제공하는 여러가지 파이썬 버전이 있는데 하이픈이 달린 버전을 설치할경우 uwsgi패키지가 설치되지 않을수 있으니 주의
  • WORKDIR : 앱이 운영될 디렉토리를 설정하는 파일이다.
  • COPY - : 현재 DockerFile 디렉토리에 있는 파일을 설정한 디렉토리에 복사한다.
  • RUN pip install -r requirements.txt : requirements.txt에 명시된 파이썬 패키지를 설치한다.
  • EXPOSE : 배포할때 사용할 포트번호를 설정한다.
  • CMD : 도커이미지를 실행할 명령어를 입력한다.

아파치에 배포하려면 uswgi로 파이썬 프로젝트를 열어야 하기 때문에 py파일을 직접 실행하지 않는다.

uwsgi.ini

[uwsgi]
module = main:app
http = :80
master = true
workers = 4
  • module : 파이썬 앱의 파일 이름을 적는다.
  • http : 배포할 포트번호를 적는다.
  • master : mater process로 uwsgi를 열것인가 묻는 항목이다. 일반적으로 true를 명시한다.
  • workers : cpu소켓을 몇개 쓸것인지 정하는 항목이다.

requirements.txt

Flask
numpy
uwsgi
  • 필요한패키지들을 text파일 안에 나열한다.

dockerFile 실행 및 이미지 생성

  • dockerFile이 있는 디렉토리로 이동한 다음 명령어를 실행한다.
docker build -t your-app-name .

앱이름을 명시한 후 명령어를 실행하면 설치할 패키지의 숫자에따라 시간이 소요되며 image가 생성된다.

이미지가 제대로 생성됐는지 확인하려면 다음 명령어를 실행한다.

docker images
  • 현재 저장된 도커의 이미지들을 볼수있다.

컨테이너 생성

실제로 Flask앱이 올라갈 도커 컨테이너를 생성한다.

docker run -d -p 80:80 your-app-name

 

-d : 도커를 백그라운드에서 실행한다.
-p : 포트번호를 매핑한다. 왼쪽 포트번호는 외부에서 접속할 포트, 오른쪽은 파이썬프로젝트 내부에서 돌아가는 포트다.

주의 : uwsgi를 이용하여 앱을 배포할경우 파이썬 파일에는 app.run() 함수를 주석처리해야한다. 그렇지 않으면 두번 실행하는것으로 간주하여 포트번호를 사용할수 없다고 에러메시지가 뜬다.

컨테이너가 실행중인걸 확인할땐 다음 명령어를 사용한다.

docker ps // 활성화된 docker프로젝트를 보고싶을때 사용
docker ps -a // 전체 컨테이너 목록을 확인 할 수 있다.

 

컨테이너 설정까지 확인했다면 외부에서 접속할수있도록 apache를 수정하는것만 남았다.
apache설정은 다음 게시글에서...