Minseong Code Lab
← Notes
Study NoteDevOps

Docker와 Compose 정리

Docker 핵심 개념과 docker-compose 사용법을 실습 기준으로 정리한 노트입니다.

2026-06-05
Dockerdocker-compose

왜 Docker인가

"내 컴퓨터에서는 되는데"를 없애는 도구입니다. 애플리케이션과 실행 환경(OS 라이브러리, Python 버전, 의존성)을 하나의 이미지로 묶어 어디서든 동일하게 실행합니다.

핵심 개념:

  • 이미지(Image): 실행 환경의 설계도 (읽기 전용)
  • 컨테이너(Container): 이미지를 실행한 인스턴스
  • Dockerfile: 이미지를 만드는 레시피
  • 볼륨(Volume): 컨테이너가 삭제돼도 유지할 데이터 저장소

자주 쓰는 명령어

docker build -t myapp .        # Dockerfile로 이미지 빌드
docker run -p 8000:8000 myapp  # 포트 연결해서 실행
docker ps                      # 실행 중인 컨테이너 확인
docker logs <container>        # 로그 확인

docker-compose가 필요한 순간

컨테이너가 2개 이상이 되면(예: FastAPI 앱 + Vector DB) 실행 옵션을 매번 명령어로 관리하기 어렵습니다. docker-compose.yml에 서비스 구성을 선언해두고 한 번에 올리고 내립니다.

services:
  api:
    build: .
    ports:
      - "8000:8000"
    env_file: .env
  chroma:
    image: chromadb/chroma
    volumes:
      - chroma-data:/chroma/chroma
volumes:
  chroma-data:
docker compose up -d   # 전체 실행
docker compose down    # 전체 종료

실습에서 배운 것

  • 환경변수는 이미지에 굽지 말고 env_file로 주입해야 API Key가 이미지에 남지 않습니다.
  • 데이터(ChromaDB 등)는 볼륨으로 분리해야 컨테이너 재생성 시 유실되지 않습니다.
  • 포트폴리오 메인 사이트(정적)에는 Docker가 불필요하고, RAG 데모처럼 의존성이 무거운 서비스에 적합하다는 판단 기준도 함께 정리했습니다.