D: 🚀 도커 컴포즈(Docker Compose)는 여러 개의 컨테이너를 하나의 파일로 정의하고, 한 번에 관리할 수 있는 강력한 도구입니다. 복잡한 애플리케이션을 구성하는 웹 서버, 데이터베이스, 캐시 서버 등을 간편하게 배포할 수 있죠! 이번 포스팅에서는 실무에서 바로 활용할 수 있는 Docker Compose 파일 작성법을 상세히 알아보겠습니다.
1. Docker Compose 기본 구조 이해하기
version: '3.8' # 사용할 Compose 파일 버전
services: # 실행할 서비스(컨테이너) 정의
web:
image: nginx:latest
ports:
- "80:80"
db:
image: postgres:13
environment:
POSTGRES_PASSWORD: example
🔍 주요 필드 설명:
version
: Compose 파일 형식 버전services
: 배포할 서비스 목록image
: 사용할 도커 이미지ports
: 포트 매핑 (호스트:컨테이너)environment
: 환경 변수 설정
2. 실전 예제 3가지 💻
예제 1: 웹 애플리케이션 + MySQL
version: '3.8'
services:
frontend:
build: ./frontend # Dockerfile이 있는 디렉토리
ports:
- "3000:3000"
depends_on:
- backend
backend:
build: ./backend
ports:
- "8000:8000"
environment:
DB_HOST: db
DB_USER: root
DB_PASSWORD: password
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: myapp
volumes:
- db_data:/var/lib/mysql
volumes:
db_data: # 데이터 영구 저장을 위한 볼륨
예제 2: WordPress + MariaDB
version: '3.8'
services:
wordpress:
image: wordpress:latest
ports:
- "8080:80"
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: wpuser
WORDPRESS_DB_PASSWORD: wppassword
depends_on:
- db
db:
image: mariadb:10.5
environment:
MYSQL_ROOT_PASSWORD: rootpass
MYSQL_USER: wpuser
MYSQL_PASSWORD: wppassword
MYSQL_DATABASE: wordpress
volumes:
- db_data:/var/lib/mysql
volumes:
db_data:
예제 3: Redis 캐시 서버 포함
version: '3.8'
services:
app:
build: .
ports:
- "5000:5000"
environment:
REDIS_HOST: redis
redis:
image: redis:alpine
ports:
- "6379:6379"
volumes:
- redis_data:/data
volumes:
redis_data:
3. 고급 기능 활용법 ⚡
1) 네트워크 사용자 정의
networks:
app_network:
driver: bridge
services:
service1:
networks:
- app_network
service2:
networks:
- app_network
2) 자원 제한 설정
services:
web:
image: nginx
deploy:
resources:
limits:
cpus: '0.50'
memory: 512M
3) 로그 설정
services:
web:
image: nginx
logging:
driver: "json-file"
options:
max-size: "200k"
max-file: "10"
4. Docker Compose 명령어 모음 📌
명령어 | 설명 |
---|---|
docker-compose up |
서비스 시작 |
docker-compose up -d |
백그라운드 실행 |
docker-compose down |
서비스 중지 및 리소스 정리 |
docker-compose ps |
실행 중인 컨테이너 확인 |
docker-compose logs |
로그 확인 |
docker-compose build |
이미지 재빌드 |
5. 주의사항 및 팁 🔥
- 의존성 관리:
depends_on
은 컨테이너 시작 순서만 제어할 뿐, 서비스 준비 상태는 확인하지 않습니다. - 볼륨 사용: 데이터베이스 같은 상태 유지가 필요한 서비스는 반드시 볼륨을 사용하세요!
- 환경 변수: 민감한 정보는
.env
파일로 분리하는 것이 안전합니다. - 버전 호환성: Docker Engine 버전과 Compose 파일 버전을 확인하세요.
💡 실무 팁: docker-compose.yml
파일을 버전 관리 시스템에 포함시키고, 개발/테스트/운영 환경별로 별도의 파일을 관리하면 효율적입니다!
이제 여러분도 복잡한 멀티 컨테이너 애플리케이션을 Docker Compose로 쉽게 관리할 수 있게 되었습니다 🎉 실제 프로젝트에 적용해보시고, 더 궁금한 점이 있다면 댓글로 남겨주세요!