소개
Docker Compose 는 컨테이너 관리 및 애플리케이션 배포를 간소화하고자 하는 개발자 및 DevOps 전문가에게 필수적인 도구입니다. 이 포괄적인 튜토리얼은 기본 구성부터 다양한 환경에서의 고급 배포 기법까지, Docker Compose 를 이해하고 구현하는 단계별 가이드를 제공합니다.
Docker Compose 기본
Docker Compose 소개
Docker Compose 는 다중 컨테이너 Docker 애플리케이션을 정의하고 실행하기 위한 강력한 도구입니다. YAML 파일을 사용하여 애플리케이션 서비스, 네트워크 및 볼륨을 구성할 수 있으므로 컨테이너 오케스트레이션 프로세스를 간소화합니다.
핵심 개념
graph TD
A[Docker Compose] --> B[서비스 정의]
A --> C[다중 컨테이너 관리]
A --> D[환경 구성]
| 핵심 개념 | 설명 |
|---|---|
| 서비스 | 애플리케이션 내 개별 컨테이너 |
| docker-compose.yml | 서비스를 정의하는 구성 파일 |
| 볼륨 | 컨테이너의 지속적인 데이터 저장소 |
| 네트워크 | 컨테이너 간 통신 |
Docker Compose 구성 예제
version: "3.8"
services:
web:
image: nginx:latest
ports:
- "8080:80"
volumes:
- ./website:/usr/share/nginx/html
database:
image: postgres:13
environment:
POSTGRES_PASSWORD: mysecretpassword
Ubuntu 22.04 실습 예제
Docker Compose 설치:
sudo apt update
sudo apt install docker-compose-plugin
docker compose version
다중 컨테이너 애플리케이션 실행:
docker compose up -d
docker compose ps
docker compose down
활용 사례
Docker Compose 는 다음에 적합합니다.
- 로컬 개발 환경
- 자동화된 테스트 설정
- 단일 호스트 애플리케이션 배포
- 마이크로서비스 아키텍처
구성 및 배포
Docker Compose 파일 구조
graph TD
A[docker-compose.yml] --> B[버전]
A --> C[서비스]
A --> D[네트워크]
A --> E[볼륨]
포괄적인 구성 예제
version: "3.8"
services:
web:
image: python:3.9
build:
context: ./app
dockerfile: Dockerfile
ports:
- "5000:5000"
volumes:
- ./app:/app
environment:
- DEBUG=true
depends_on:
- database
database:
image: postgres:13
environment:
POSTGRES_DB: myapp
POSTGRES_PASSWORD: secretpassword
volumes:
- postgres_data:/var/lib/postgresql/data
networks:
default:
driver: bridge
volumes:
postgres_data:
환경 구성 관리
| 구성 유형 | 설명 | 사용 예시 |
|---|---|---|
| 환경 변수 | 런타임 구성 | 민감한 데이터, 연결 문자열 |
.env 파일 |
외부 환경 구성 | 코드와 분리된 구성 |
| Docker Secrets | 민감한 정보 보안 | 비밀번호, 토큰 |
Ubuntu 22.04 에서의 배포 명령어
구성 검증:
docker compose config
서비스 시작:
docker compose up -d
서비스 확장:
docker compose up -d --scale web=3
서비스 모니터링:
docker compose ps
docker compose logs
컨테이너 네트워킹 전략
graph LR
A[컨테이너 네트워크] --> B[브리지 네트워크]
A --> C[호스트 네트워크]
A --> D[오버레이 네트워크]
볼륨 관리 기법
## 이름이 지정된 볼륨 생성
docker volume create myvolume
## 볼륨 목록
docker volume ls
## 볼륨 세부 정보 확인
docker volume inspect myvolume
고급 Compose 기법
서비스 확장 및 로드 밸런싱
graph TD
A[로드 밸런서] --> B[서비스 복제본 1]
A --> C[서비스 복제본 2]
A --> D[서비스 복제본 3]
확장 구성
version: "3.8"
services:
web:
image: nginx:latest
deploy:
replicas: 3
update_config:
parallelism: 1
delay: 10s
ports:
- "80:80"
동적 서비스 관리
| 기법 | 명령어 | 설명 |
|---|---|---|
| 서비스 확장 | docker compose up --scale web=5 |
컨테이너 수를 동적으로 조정 |
| 롤링 업데이트 | docker compose up --force-recreate |
최소한의 중단 시간으로 서비스 업데이트 |
| 선택적 배포 | docker compose up service1 service2 |
특정 서비스만 배포 |
프로덕션 환경 배포 전략
## 구성 검증
docker compose config
## 드라이 런 배포
docker compose up --dry-run
## 프로덕션 배포
docker compose up -d --remove-orphans
컨테이너 건강성 검사
services:
web:
image: myapp:latest
healthcheck:
test: ["CMD", "curl", "-f", "
interval: 30s
timeout: 10s
retries: 3
고급 네트워킹
graph LR
A[커스텀 네트워크] --> B[내부 통신]
A --> C[외부 접근]
A --> D[서비스 검색]
모니터링 및 로깅
## 실시간 서비스 로그
docker compose logs -f
## 리소스 모니터링
docker compose top
## 성능 지표
docker stats
다중 환경 구성
version: "3.8"
services:
web:
image: myapp:${ENV:-development}
environment:
- DATABASE_URL=${DATABASE_URL}
시크릿 관리
## Docker 시크릿 생성
echo "database_password" | docker secret create db_password -
## compose 파일에서 시크릿 사용
services:
database:
secrets:
- db_password
요약
Docker Compose 를 마스터함으로써 개발자는 복잡한 애플리케이션 아키텍처를 단순화하고, 배포 일관성을 개선하며, 더욱 확장 가능하고 유지 관리 가능한 컨테이너화된 솔루션을 만들 수 있습니다. 이 튜토리얼은 YAML 구성을 활용하고, 서비스, 네트워크 및 볼륨을 관리하며, 여러 컨테이너 애플리케이션을 쉽고 효율적으로 조정하는 방법을 보여줍니다.



