Rancher-Desktop 으로 Kubernetes 사용하기 With WSL (3) FAST API with poetry

2023. 5. 8. 00:00Python/FASTAPI

반응형

1. FASTAPI 로 기본 app 생성

   

poetry new fastapi-docker
cd .\fastapi-docker\
bash -c "nano main.py"


// 파일 내용
from fastapi import FastAPI

app = FastAPI(title="FastAPI, Docker")


@app.get("/")
def read_root():
    return {"hello": "world"}

@app.post("/")
def read_root():
    return {"hello": "world"}

이 상태에서 fastapi 와 gunicorn, uvicorn 을 다운 받는다.

poetry add fastapi uvicorn[standard] gunicorn
poetry shell
uvicorn main:app --reload

위 명령중 혹시 poetry shell 에서 에러가 나오면 아래명령을 실행 한다.

(pyenv 로 python 을 install 했다고 가정함.

그렇지 않다면 python.bat 는 실제 사용하려는 python version 의 path 가되어야함)

poetry env use python.bat

아래와 같은 메세지가 뜬다면 정상 실행된 것임

이제 browser 에서 실행해보자

다음 주소들을 차례로 실행하여 문서화 처리도 되는지 확인하자

 

 

ctrl + c 후에 exit 해서 가상환경에서 나오자

 

2.  만들어진 기본 app 를 이용하여 Docker Image image 만들기

bash -c "nano Dockerfile"

//파일내용
FROM python:slim as python-base
RUN mkdir python_tutorial
WORKDIR  /python_tutorial
COPY /pyproject.toml /python_tutorial
COPY README.md /python_tutorial
RUN pip3 install poetry
RUN poetry config virtualenvs.create false
RUN poetry install --no-root
COPY . .
CMD ["gunicorn", "-w", "4", "-k", "uvicorn.workers.UvicornWorker", "main:app", "--bind", "0.0.0.0:8000"]

docker build 를 이용해서 image 를 만들자

docker build --tag fastapi-docker:latest .

아래와 같이 생성된다. 

이제 이 docker 를 실행해보자

docker run -p 8000:8000 fastapi-docker:latest

그리고 browser 에서 8000 port 를 통해 실행해보면 이전과 같은 결과가 나올것이다.

docker 를 통해서  이전에 우리가 만든 fastapi 를 실행한 것이다. 

이제 이 docker 를 멈추고 삭제해 보자

 

docker ps

docker stop 5a4492e112d5

container id 를 stop 시키면 된다. (여러분은 다를것이다.)

docker ps -a

실행을 멈춘 container 가 존재하는걸 알수 있다. 

container 자체를 삭제하자

docker container rm 5a4492e112d5

이제 docker ps -a 에서도 완전히 삭제된걸 알수 있다. 

이제 image 를 삭제하자

docker images | findstr /s fastapi-docker
docker rmi fastapi-docker:latest

 

3. Kubectl 을 이용하여 pod 를 생성하고 docker image 실행하기

docker image 를 다시 build 하자

docker build --tag fastapi-docker:latest .

kubectl 을 이용해서 pod 를 만들자

kubectl run fastapi-docker --image=fastapi-docker:latest --image-pull-policy=Never

pod 를 외부에 노출하기 (port forwarding 이용)

지금 상태로는 외부에서 pod 를 연결할수 없다. (pod 내부에서만 접근 가능) 

그렇기 때문에 port forwarding 을 이용해서 외부로 port 를 노출해야 한다. 

kubectl port-forward pods/fastapi-docker 8080:8000

이제 browser  8080 port 로 에서 접속해보자. (http://localhost:8080)

정상적으로 접속될 것이다. 

 

이제 pod 를 삭제하고 docker image 도 삭제하자

kubectl delete pod fastapi-docker
docker rmi fastapi-docker:latest

 

 

관련영상

https://youtu.be/YBxucqfIr78

 

반응형