소개
Docker Compose 는 개발자가 컨테이너 관리 및 애플리케이션 배포를 간소화하기 위한 필수적인 도구입니다. 이 포괄적인 튜토리얼은 단일 선언적 구성 파일을 통해 복잡한 다중 컨테이너 환경을 생성, 구성 및 관리하는 Docker Compose 의 기본 사항을 탐구합니다.
Docker Compose 는 개발자가 컨테이너 관리 및 애플리케이션 배포를 간소화하기 위한 필수적인 도구입니다. 이 포괄적인 튜토리얼은 단일 선언적 구성 파일을 통해 복잡한 다중 컨테이너 환경을 생성, 구성 및 관리하는 Docker Compose 의 기본 사항을 탐구합니다.
Docker Compose 는 컨테이너 오케스트레이션을 위한 강력한 도구로, 개발자가 단일 구성 파일을 통해 다중 컨테이너 애플리케이션을 정의하고 관리할 수 있도록 지원합니다. 선언적 방식으로 서비스, 네트워크 및 볼륨을 설명하여 복잡한 애플리케이션 아키텍처를 실행하는 프로세스를 단순화합니다.
Docker Compose 는 YAML 파일을 사용하여 애플리케이션 서비스를 구성하며, 컨테이너 서비스 구성에 대한 간소화된 접근 방식을 제공합니다. 주요 구성 파일은 일반적으로 docker-compose.yml로 명명됩니다.
일반적인 Docker Compose 구성에는 다음과 같은 핵심 요소가 포함됩니다.
| 요소 | 설명 | 예시 |
|---|---|---|
| version | Compose 파일 버전 | version: '3.8' |
| services | 컨테이너 정의 | 여러 서비스 구성 |
| networks | 사용자 정의 네트워크 설정 | 브리지, 호스트 네트워크 |
| volumes | 지속적인 데이터 저장소 | 이름 지정 또는 호스트 연결 볼륨 |
다음은 일반적인 웹 애플리케이션을 위한 포괄적인 Docker Compose 구성입니다.
version: "3.8"
services:
web:
image: nginx:latest
ports:
- "80:80"
volumes:
- ./website:/usr/share/nginx/html
database:
image: postgres:13
environment:
POSTGRES_PASSWORD: secretpassword
volumes:
- postgres_data:/var/lib/postgresql/data
volumes:
postgres_data:
다중 컨테이너 애플리케이션을 관리하기 위한 필수적인 Docker Compose 명령어는 다음과 같습니다.
## docker-compose.yml에 정의된 서비스 시작
docker-compose up -d
## 컨테이너 중지 및 제거
docker-compose down
## 실행 중인 컨테이너 보기
docker-compose ps
## 서비스 로그 보기
docker-compose logs web
Docker Compose 는 서비스 종속성을 정의하여 시작 순서를 제어할 수 있습니다.
services:
web:
depends_on:
- database
restart: on-failure
이 구성은 데이터베이스 서비스가 웹 서비스보다 먼저 시작되도록 보장하며, 자동 재시작 기능을 제공합니다.
Docker 볼륨은 컨테이너에 대한 지속적인 저장 메커니즘을 제공하여 호스트 시스템과 컨테이너화된 애플리케이션 간의 데이터 보존 및 공유를 가능하게 합니다. 컨테이너화된 환경에서 데이터 지속성 및 상태 관리의 중요한 문제를 해결합니다.
| 볼륨 유형 | 특징 | 사용 사례 |
|---|---|---|
| 이름 지정 볼륨 | Docker 에서 관리 | 지속적인 애플리케이션 데이터 |
| 바인드 마운트 | 호스트 파일 시스템 매핑 | 개발 환경 |
| Tmpfs 마운트 | 메모리 기반 저장소 | 임시, 민감한 데이터 |
version: "3.8"
services:
database:
image: postgres:13
volumes:
- postgres_data:/var/lib/postgresql/data
- ./backup:/database_backup
volumes:
postgres_data:
driver: local
## 이름 지정 볼륨 생성
docker volume create myapp_data
## 기존 볼륨 목록
docker volume ls
## 볼륨 세부 정보 확인
docker volume inspect myapp_data
## 사용되지 않는 볼륨 제거
docker volume prune
services:
web:
image: nginx:latest
volumes:
- ./website:/usr/share/nginx/html:ro
이 구성은 로컬 디렉터리를 컨테이너에 매핑하고 읽기 전용 권한을 부여하여 원활한 개발 워크플로를 가능하게 합니다.
Docker Compose 는 환경별 구성을 통해 정교한 배포 전략을 지원하며, 개발, 스테이징 및 프로덕션 환경 간의 원활한 전환을 가능하게 합니다.
version: "3.8"
services:
web:
image: myapp:${TAG:-latest}
environment:
- DATABASE_HOST=${DATABASE_HOST:-localhost}
- DEBUG=${DEBUG:-false}
| 네트워크 유형 | 범위 | 사용 사례 |
|---|---|---|
| Bridge | 컨테이너 간 | 내부 통신 |
| Host | 직접 호스트 네트워킹 | 성능이 중요한 애플리케이션 |
| Overlay | 다중 호스트 네트워킹 | 분산 시스템 |
version: "3.8"
services:
web:
networks:
- frontend
database:
networks:
- backend
networks:
frontend:
backend:
## 특정 구성으로 이미지 빌드
docker-compose build
## 분리된 모드로 배포
docker-compose up -d
## 특정 서비스 확장
docker-compose up --scale web=3
## 롤링 업데이트 수행
docker-compose up -d --no-deps --build web
services:
web:
healthcheck:
test: ["CMD", "curl", "-f", "
interval: 30s
timeout: 10s
retries: 3
Docker Compose 를 마스터함으로써 개발자는 복잡한 애플리케이션 아키텍처를 효율적으로 조정하고, 서비스 상호 작용을 정의하며, 네트워크 구성을 관리하고, 다양한 환경에서 일관된 배포를 보장할 수 있습니다. 이 튜토리얼은 핵심 개념, 실용적인 구성 전략 및 필수적인 명령줄 작업을 다루어 개발자가 컨테이너화 기술을 효과적으로 활용할 수 있도록 지원합니다.