프로젝트 구성
파일/디렉토리 구조
.
├── 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
접속 테스트
도커 이미지 삭제
docker image rm seokhee/fastapi-kubestart
Uploaded by
'Infra > Docker' 카테고리의 다른 글
Docker(도커), Linux Contatiner(리눅스 컨테이너), Docker CLI (2) | 2023.01.04 |
---|