본문 바로가기

도커파일 사용법 - 도커를 이용한 FastAPI 서버 구축 방법 관련 정리

ironwhale 2021. 11. 18.

기본 컨셉

기본 FastAPI 서버 구성을 위해 우선 구글 클라우드 VM 인스턴스에 도커를 설치하고 VM 인스턴스 로컬저장소에 /code/app 폴더를 만들어서 컨테이너에 바인드 마운트하였습니다.

이렇게 하면 컨테이너에 접속하지 않고도 로컬 폴더(/code/app 폴더)에 있는 파이썬 코드만 수정하면 되어 코드 수정할때마다 컨테이너에 접속하지 않아되어 편리합니다.


기본 순서

1. 구글 클라우드 플래폼에 VM 인스턴스를 만든다.
2. VM 인스턴스에 도커를 설치한다.
3. 도커 파일을 만든다.
4. 도커 파일로 이미지를 생성한다.
- 도커 명령어 sudo docker build -t myimage .
5.  VM 인스턴스 로컬 저장소에 code/app/ 폴더를 생성하고 main.py 생성 후 폴더로 업로드
6. 이미지로 컨테이너 생성
- 도커 명령어
sudo docker run -d --name mycontainer -p 80:80 -v ~/code/app:/code/app myimage


FastAPI 이미지 빌드를 위한 도커 파일 만들기(FastAPI 공식 문서 참조)

# 기본 이미지는 파이썬 3.9버전을 베이스로 합니다. 
FROM python:3.9 

# 기본 폴더를 설정합니다. 
WORKDIR /code 

# 필요한 파이썬 라이브러리를 설치합니다.
RUN pip install fastapi[all] 
RUN pip install pandas 
RUN pip install selenium 
RUN pip install sqlalchemy 
RUN pip install beautifulsoup4 
RUN pip install requests 
RUN pip install aiofiles 
RUN pip install pydantic 
RUN pip install uvicorn 

# 이미지를 컨테이너로 만들때 실행 될 명령업들 입니다. 공식문서를 그대로 사용하였습니다. 
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "80"]

 

FastAPI 서버 테스트를 위한 main.py 파이썬 코드만들기

아래 코드를 VM인스턴스에 업로드 후 컨테이너 생성 시 마운트하면 됩니다.

# main.py fastapi 테스트 서버용 기본 main.py

from typing import Optional 
from fastapi import FastAPI

app = FastAPI() 

@app.get("/") 
def read_root(): 
    return {"Hello": "World"} 
    
    
@app.get("/items/{item_id}") 
def read_item(item_id: int, q: Optional[str] = None): 
    return {"item_id": item_id, "q": q}

크롤링을 위한 크롬, 크롬 드라이버 자동 설치를 위한 도커파일은 다음과 같습니다.

이부분에서 일단 크롬버전을 미리 확인하시고 버전에 맞는 크롬드라이버를 다운 받도록 주소를 변경하시면서 쓰시면 됩니다.

FROM python:3.9 


WORKDIR /code 

# 크롬설치를 위한 부분 
RUN mkdir chrome RUN apt-get update
RUN apt-get upgrade -y 
RUN apt-get install wget 
RUN apt-get install unzip 


#크롬 다운로드 후 설치 
RUN wget -P ./chrome https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb 
RUN apt install ./chrome/google-chrome-stable_current_amd64.deb -y 

# 크롬 드라이버 다운로드 
RUN wget -P ./chrome https://chromedriver.storage.googleapis.com/94.0.4606.61/chromedriver_linux64.zip 
RUN unzip ./chrome/chromedriver_linux64.zip 
RUN cp chromedriver /usr/local/bin 


RUN pip install fastapi[all] 
RUN pip install pandas 
RUN pip install selenium 
RUN pip install sqlalchemy 
RUN pip install beautifulsoup4 
RUN pip install requests 
RUN pip install aiofiles 
RUN pip install pydantic 
RUN pip install uvicorn 


CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "80"]

만약 도커 파일 이름은 다른 것으로 만드셨으면 -f 옵션을 사용하신 후 도커파일명을 적으시면 됩니다.
sudo docker build -f Dockerfile_chrome -t fastapi_chrome:1.0 .

순서.txt
0.00MB
main.py
0.00MB
Dockerfile_chrome
0.00MB
Dockerfile
0.00MB

댓글