본문 바로가기

Infra/Docker

FastAPI 개발환경 도커에 올리는 방법

프로젝트 구성

파일/디렉토리 구조

.
├── app
│   ├── __main__.py
│   ├── kubestart.py
│   └── main.py
├── Dockerfile
├── start.sh
└── requirements.txt

requirements.txt

fastapi==0.89.1
pydantic==1.10.4
uvicorn==0.20.0

start.sh

#!/bin/sh
cp ./app/kubestart.py ./app/kubestart.py
python -m app

main.py

from typing import Optional
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from .kubestart import start

app = FastAPI()

origins = ["*"]

app.add_middleware(
    CORSMiddleware,
    allow_origins = origins,
    allow_credentials = True,
    allow_methods = ["*"],
    allow_headers = ["*"],
)

@app.get("/")
def read_root():
    return {"Hello": "World"}

# 쿠버네티스 kubestart
@app.get("/signal")
def kubestart():
    path = start()
    return path
start()

__main__.py

if __name__ == '__main__':
    import uvicorn

    uvicorn.run("app.main:app", host="0.0.0.0", port=8383, reload=True)

kubestart.py

볼륨 마운트로 수정 가능하다

def start():
    print("kubeflow pipeline start")

Dockerfile

# python 3.8 기반
FROM python:3.8
# container의 usr/src 경로에서 진행
WORKDIR /usr/src
# requirements.txt를 복사해서 넣기
COPY ./requirements.txt /usr/src/requirements.txt
# app 디렉토리를 복사해서 넣기
COPY ./app /usr/src/app
# pip install requirements.txt 실행
RUN pip install --no-cache-dir --upgrade -r requirements.txt
# start.sh를 복사해서 넣기
COPY start.sh /usr/src
# start.sh 실행
CMD [ "/bin/sh", "start.sh" ]

도커 이미지 빌드 & 테스트

도커 이미지 빌드

docker build --tag seokhee/fastapi-kubestart .

도커 이미지 확인

docker images

도커 실행

-v {볼륨 마운트 하고 싶은 로컬 경로}:{container 경로}

-p 포트포워딩

-it 이미지 이름

docker run --rm -v /c/Users/seokhee/boostcamp/final/serving/app/:/usr/src/app/ -p 8383:8383 -it seokhee/fastapi-kubestart 

접속 테스트

http://localhost:8383/

도커 이미지 삭제

docker image rm seokhee/fastapi-kubestart 

Uploaded by

N2T

'Infra > Docker' 카테고리의 다른 글

Docker(도커), Linux Contatiner(리눅스 컨테이너), Docker CLI  (2) 2023.01.04