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 데모처럼 의존성이 무거운 서비스에 적합하다는 판단 기준도 함께 정리했습니다.