docker ps
명령어를 사용합니다.docker stop [컨테이너 이름 또는 ID]
명령어를 사용합니다. 예를 들어, docker stop myfastapi
는 myfastapi
라는 이름의 컨테이너를 정지합니다.docker start [컨테이너 이름 또는 ID]
명령어를 사용합니다.docker rm [컨테이너 이름 또는 ID]
명령어를 사용합니다. 컨테이너를 제거하기 전에 컨테이너가 정지되어 있어야 합니다.안녕하세요! 우리는 오늘 Docker와 FastAPI를 사용해 간단한 CRUD 애플리케이션을 만들어 볼 거예요. 이 과정을 통해, 데이터를 생성, 읽기, 업데이트, 삭제하는 기본적인 웹 애플리케이션을 구축하는 방법을 배워보겠습니다.
간단한 CRUD 로직을 가진 FastAPI 애플리케이션을 만듭니다.
main.py
- FastAPI 애플리케이션 코드from fastapi import FastAPI, HTTPException
import logging
app = FastAPI()
# 로깅 설정
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
# 간단한 데이터 저장소
items = {}
@app.post("/items/{item_id}")
def create_item(item_id: int, item: str):
if item_id in items:
raise HTTPException(status_code=400, detail="Item already exists")
items[item_id] = item
logger.info(f"Item created: {item_id} = {item}")
return items[item_id]
@app.get("/items/{item_id}")
def read_item(item_id: int):
if item_id not in items:
raise HTTPException(status_code=404, detail="Item not found")
return items[item_id]
@app.put("/items/{item_id}")
def update_item(item_id: int, item: str):
if item_id not in items:
raise HTTPException(status_code=404, detail="Item not found")
items[item_id] = item
logger.info(f"Item updated: {item_id} = {item}")
return items[item_id]
@app.delete("/items/{item_id}")
def delete_item(item_id: int):
if item_id not in items:
raise HTTPException(status_code=404, detail="Item not found")
del items[item_id]
logger.info(f"Item deleted: {item_id}")
return {"detail": "Item deleted"}
requirements.txt
- 필요한 패키지 목록
fastapi
uvicorn
Pydantic을 사용하여 데이터 유효성 검사를 수행합니다.
models.py
- Pydantic 모델 파일
from pydantic import BaseModel
class Item(BaseModel):
name: str
description: str = None
price: float
in_stock: bool = True
main.py
수정 - Pydantic 모델 적용
from models import Item
@app.post("/items/{item_id}", response_model=Item)
def create_item(item_id: int, item: Item):
# 나머지 함수 내용은 이전과 동일
Dockerfile을 작성하여 FastAPI 애플리케이션을 실행합니다.
FROM python:3.8
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . /app
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "80"]
docker build -t myfastapi .
: 현재 디렉토리에 있는 Dockerfile을 사용하여 myfastapi
라는 이름의 이미지를 빌드합니다.docker run -d --name myfastapi -p 80:80 myfastapi
: myfastapi
이미지로부터 독립된 컨테이너를 생성하고 실행합니다.docker build -t myfastapi .
docker run -d --name myfastapi -p 80:80 myfastapi
이제 Docker와 FastAPI를 사용하여 간단한 CRUD 애플리케이션을 만들고, 이 애플리케이션의 로그를 확인하는 방법과 기본적인 Docker 커맨드를 알아보았습니다. 이 지식을 통해 애플리케이션의 동작을 더 잘 이해하고 관리할 수 있게 되었길 바랍니다.