D: 🚀 “컨테이너 관리가 너무 복잡해요!” 라고 느끼신 적 있나요?
Docker만으로도 컨테이너를 실행할 수 있지만, 여러 서비스를 한 번에 관리하려면 Docker Compose가 필수입니다!
오늘은 Docker Compose의 핵심 개념과 실무 활용법을 알려드릴게요.
1. Docker Compose란?
“멀티 컨테이너 애플리케이션을 정의하고 실행하는 도구”
- 단일 명령어(
docker-compose up
)로 연관된 서비스(DB, 백엔드, 프론트엔드 등)를 한 번에 실행합니다. - YAML 파일(
docker-compose.yml
)로 서비스 구성, 네트워크, 볼륨 등을 선언적으로 관리합니다.
👉 예시: 웹 애플리케이션 + MySQL + Redis를 한 번에 띄우기
version: "3.8"
services:
web:
image: nginx:latest
ports:
- "80:80"
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: password
cache:
image: redis:alpine
2. 왜 Docker Compose가 필요한가요?
(1) 복잡한 설정 간소화 ⚡
- Docker run 명령어는 옵션이 길어집니다. (
--net
,--volume
,--env
등) - Compose는 YAML 파일로 모든 설정을 관리해 명령어를 단순화합니다.
(2) 다중 컨테이너 의존성 관리 🔗
- 서비스 간 의존성(
depends_on
), 네트워크, 공유 볼륨을 쉽게 설정할 수 있습니다.services: backend: depends_on: - db # db가 먼저 실행된 후 backend 실행
(3) 개발/테스트 환경 일관성 보장 ✅
- 팀원 모두 동일한 환경에서 작업할 수 있습니다.
- 로컬, CI/CD 환경에서 동일한 compose 파일을 재사용합니다.
(4) 빠른 개발 사이클 🔄
- 코드 수정 시 자동 재시작(
restart: unless-stopped
) 또는 핫 리로드 설정 가능합니다.
3. 실무에서 자주 쓰는 Docker Compose 기능
📌 환경 변수 관리
.env
파일과 연동해 비밀값(DB 패스워드 등)을 안전하게 관리합니다.
db:
image: postgres
env_file:
- .env # POSTGRES_PASSWORD=1234 로드
📌 볼륨으로 코드 마운트
호스트의 코드 변경을 컨테이너에 실시간 반영합니다.
services:
frontend:
volumes:
- ./src:/app/src # 로컬 src 폴더를 컨테이너 /app/src에 연결
📌 네트워크 격리
커스텀 네트워크를 생성해 서비스 간 통신을 제어합니다.
networks:
my-network:
driver: bridge
services:
api:
networks:
- my-network
4. 주의사항 & 팁
⚠️ docker-compose
vs docker compose
- 최신 Docker Engine에는 Compose 기능이 내장되어
docker compose
명령어를 사용합니다. - 레거시 버전은 별도 설치가 필요합니다(
pip install docker-compose
).
💡 성능 향상 팁
docker-compose.yml
에서restart: unless-stopped
추가해 비정상 종료 시 자동 재시작..dockerignore
파일로 불필요한 파일 복사를 방지하세요!
5. 마치며
Docker Compose는 현대 개발의 필수 도구입니다.
- 로컬 개발 환경 구성부터 CI/CD 파이프라인까지 폭넓게 활용됩니다.
- 오늘 배운 걸 토대로 나만의 compose 파일을 만들어보세요!
🎯 도전 과제:
- 공식 샘플 프로젝트를 클론해 웹 + Redis 카운터 앱을 띄워보세요!
궁금한 점은 댓글로 남겨주세요! 👇
#Docker #DevOps #개발생산성