소개
Docker Compose 는 현대 소프트웨어 개발에 필수적인 도구로, 개발자가 간단하고 선언적인 구성 파일을 통해 복잡한 다중 컨테이너 애플리케이션을 정의하고 관리할 수 있도록 지원합니다. 이 포괄적인 튜토리얼에서는 Docker Compose 의 핵심 개념, 아키텍처, 효율적인 컨테이너 배포 및 관리를 위한 실제 구현 전략을 살펴봅니다.
Docker Compose 는 현대 소프트웨어 개발에 필수적인 도구로, 개발자가 간단하고 선언적인 구성 파일을 통해 복잡한 다중 컨테이너 애플리케이션을 정의하고 관리할 수 있도록 지원합니다. 이 포괄적인 튜토리얼에서는 Docker Compose 의 핵심 개념, 아키텍처, 효율적인 컨테이너 배포 및 관리를 위한 실제 구현 전략을 살펴봅니다.
Docker Compose 는 컨테이너 오케스트레이션을 위한 강력한 도구로, 개발자가 손쉽게 다중 컨테이너 애플리케이션을 정의하고 관리할 수 있도록 지원합니다. 현대 소프트웨어 배포의 핵심 구성 요소인 Docker Compose 는 복잡한 애플리케이션 환경을 구성하고 실행하는 과정을 단순화합니다.
Docker Compose 는 YAML 구성 파일을 사용하여 컨테이너화된 애플리케이션의 서비스, 네트워크 및 볼륨을 정의합니다. 주요 목표는 단일 선언적 구성을 통해 상호 연결된 컨테이너의 배포를 간소화하는 것입니다.
| 구성 요소 | 설명 | 목적 |
|---|---|---|
| 서비스 | 컨테이너 구성 | 개별 컨테이너를 정의 |
| 네트워크 | 컨테이너 간 통신 | 컨테이너 간 네트워킹 관리 |
| 볼륨 | 지속적인 데이터 저장소 | 데이터 지속성 처리 |
다음은 일반적인 웹 애플리케이션을 위한 포괄적인 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: mysecretpassword
volumes:
- postgres_data:/var/lib/postgresql/data
volumes:
postgres_data:
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 는 복잡한 컨테이너 환경을 정의하기 위해 YAML 파일을 사용합니다. 구성 구조는 서비스 배포, 네트워킹 및 환경 설정에 대한 세밀한 제어를 제공합니다.
| 구성 옵션 | 목적 | 예시 |
|---|---|---|
| image | 컨테이너 기본 이미지 지정 | nginx:latest |
| ports | 컨테이너를 호스트 포트에 매핑 | "8080:80" |
| environment | 런타임 변수 설정 | DATABASE_URL=postgres://... |
| volumes | 지속적인 저장소 관리 | ./data:/app/data |
Docker Compose 는 사용자 정의 네트워크 정의를 통해 정교한 네트워킹 시나리오를 지원합니다.
version: "3.8"
services:
frontend:
image: nginx:alpine
networks:
- frontend_network
backend:
image: python:3.9
networks:
- backend_network
- frontend_network
networks:
frontend_network:
driver: bridge
backend_network:
driver: overlay
유연한 환경 구성은 다양한 배포 시나리오를 지원합니다.
## .env 파일 생성
echo "DATABASE_PASSWORD=secretpassword" > .env
## Docker Compose 구성
version: '3.8'
services:
database:
image: postgres:13
environment:
POSTGRES_PASSWORD: ${DATABASE_PASSWORD}
## Docker 네트워크 목록
docker network ls
## 특정 네트워크 검사
docker network inspect frontend_network
## 사용자 정의 네트워크 생성
docker network create myapp_network
## 서비스 연결성 확인
docker compose exec frontend ping backend
## 네트워크 세부 정보 보기
docker compose config --resolve-env-vars
Docker Compose 는 컨테이너 인스턴스를 관리하기 위한 강력한 확장 메커니즘을 제공합니다.
## 특정 서비스 확장
docker compose up --scale web=3 -d
적절한 시작 순서 및 서비스 간 종속성을 보장합니다.
version: "3.8"
services:
database:
image: postgres:13
healthcheck:
test: ["CMD-SHELL", "pg_isready"]
interval: 10s
timeout: 5s
retries: 5
backend:
image: myapp-backend
depends_on:
database:
condition: service_healthy
| 모니터링 기법 | 설명 | 구현 방식 |
|---|---|---|
| 상태 확인 | 서비스 준비 여부 확인 | 사용자 지정 명령어 실행 |
| 리소스 제한 | 컨테이너 리소스 제어 | CPU/메모리 제약 |
| 로깅 | 중앙 집중형 로그 관리 | ELK 스택 통합 |
services:
web:
image: nginx
deploy:
resources:
limits:
cpus: "0.50"
memory: 512M
reservations:
cpus: "0.25"
memory: 256M
## 상세 서비스 로그
docker compose logs -f backend
## 실시간 리소스 모니터링
docker stats
## 포괄적인 시스템 진단
docker compose ps
docker compose config
version: "3.8"
services:
ci-runner:
image: docker:latest
volumes:
- /var/run/docker.sock:/var/run/docker.sock
command: |
sh -c "
docker compose pull
docker compose up -d --build
docker compose ps
"
## 병렬 서비스 시작
docker compose up -d --parallel
## 선택적 서비스 관리
docker compose up frontend backend
Docker Compose 를 마스터함으로써 개발자는 애플리케이션 배포를 간소화하고, 컨테이너 구성을 단순화하며, 확장 가능하고 재현 가능한 환경을 만들 수 있습니다. 이 튜토리얼은 기본 서비스 정의부터 고급 네트워킹 및 볼륨 관리까지 필수적인 기술을 다루며, 컨테이너화된 애플리케이션 개발 및 오케스트레이션을 위한 견고한 기반을 제공합니다.