서버 운영에서 가장 중요한 요소 중 하나는 데이터 보호입니다.
Container 환경은 빠르게 생성하고 삭제할 수 있지만, Database와 중요한 파일 데이터는 반드시 별도로 보호해야 합니다.
운영 서버에서 발생할 수 있는 문제:
서버 장애
↓
Database 손상
↓
데이터 손실
또는:
잘못된 명령 실행
↓
Volume 삭제
↓
복구 불가능
이러한 상황을 대비하기 위해 Backup 자동화가 필요합니다.
기본적인 Backup 구조:
Database Container
↓
Backup Script
↓
Backup File 생성
↓
외부 Storage 저장
Docker Compose 환경에서는 다음 데이터를 자동으로 백업할 수 있습니다.
- MySQL Database
- PostgreSQL Database
- MongoDB Database
- Docker Volume
- Upload 파일
- 설정 파일
이번 글에서는 Docker Compose Backup 자동화 구조부터 Script 작성, Cron 설정, Database Backup, Volume Backup, Production 서버 백업 전략까지 알아보겠습니다.
Docker Compose Backup이 필요한 이유
Container는 쉽게 복구할 수 있습니다.
하지만 데이터는 자동으로 복구되지 않습니다.
예:
Application Container 삭제
↓
Image 재생성
↓
서비스 복구 가능
하지만:
Database 데이터 삭제
↓
Backup 없음
↓
복구 불가능
따라서 운영 환경에서는:
서비스
↓
데이터
↓
Backup
↓
Recovery
구조를 만들어야 합니다.
Docker Compose Backup 기본 구조
일반적인 Production Backup 구조:
Docker Compose
↓
Database Container
↓
Volume
↓
Backup Script
↓
Backup Storage
구성 요소:
Backup Script
백업 명령 실행
Scheduler
자동 실행 관리
예:
- Cron
- Jenkins
- GitHub Actions
Storage
Backup 저장 공간
예:
- 다른 서버
- NAS
- Cloud Storage
Docker Compose Database Backup 방식
Database 종류에 따라 Backup 방법이 다릅니다.
MySQL Backup
mysqldump 사용:
docker compose exec mysql \
mysqldump -u root -p database \
> backup.sql
결과:
MySQL Database
↓
backup.sql
PostgreSQL Backup
pg_dump 사용:
docker compose exec postgres \
pg_dump -U user database \
> backup.sql
MongoDB Backup
mongodump 사용:
docker compose exec mongodb \
mongodump --out /backup
Docker Compose Backup Script 만들기
예:
backup.sh
#!/bin/bash
DATE=$(date +%Y%m%d)
BACKUP_DIR=/backup
docker compose exec mysql \
mysqldump \
-u root \
-p password \
database \
> $BACKUP_DIR/mysql-$DATE.sql
실행:
chmod +x backup.sh
테스트:
./backup.sh
결과:
backup/
↓
mysql-20260730.sql
Docker Compose Volume Backup 자동화
Database뿐 아니라 Volume 자체도 백업할 수 있습니다.
예:
docker run --rm \
-v mysql-data:/data \
-v /backup:/backup \
ubuntu \
tar czf /backup/mysql-volume.tar.gz /data
구조:
Volume
↓
압축
↓
Backup File
장점:
- 전체 데이터 보존
- 빠른 복구
- 서버 이전 가능
Docker Compose Cron 자동 Backup 설정
Linux에서는 Cron을 사용해 자동 실행합니다.
Cron 편집:
crontab -e
예:
매일 새벽 3시 실행:
0 3 * * * /home/backup.sh
구조:
새벽 3시
↓
Cron 실행
↓
Backup Script 실행
↓
Backup 생성
Docker Compose Backup 파일 관리
Backup 파일은 계속 쌓이기 때문에 관리가 필요합니다.
예:
backup/
├── mysql-20260701.sql
├── mysql-20260702.sql
├── mysql-20260703.sql
문제:
- Disk 용량 증가
- 오래된 Backup 관리 필요
해결:
보관 정책 설정
예:
최근 30일 Backup 유지
↓
이전 파일 삭제
삭제 Script:
find /backup -mtime +30 -delete
Docker Compose Backup 외부 저장소 연결
같은 서버에만 Backup을 저장하면 위험합니다.
좋지 않은 구조:
Production Server
↓
Backup File
↓
같은 Disk
서버 장애 발생 시:
원본
+
Backup
↓
동시 손실
좋은 구조:
Production Server
↓
Backup
↓
외부 Storage
예:
- 다른 서버
- NAS
- Cloud Storage
Docker Compose 3-2-1 Backup 전략
안정적인 Backup 전략으로 3-2-1 원칙을 사용합니다.
구조:
3개 데이터 복사본
↓
2개 다른 저장 매체
↓
1개 다른 위치
예:
Production Database
↓
Local Backup
↓
Remote Backup
↓
Cloud Backup
Docker Compose Backup 복원 테스트
Backup은 생성보다 복원이 중요합니다.
테스트 과정:
Backup 생성
↓
새 Container 생성
↓
데이터 복원
↓
서비스 확인
확인:
docker compose up -d
Database 확인:
docker compose exec mysql mysql
Docker Compose Backup 보안 관리
Backup 파일에는 중요한 데이터가 포함됩니다.
주의:
- Database Password
- 사용자 정보
- 개인정보
보안 방법:
Backup 암호화
예:
gpg backup.sql
접근 권한 제한
chmod 600 backup.sql
외부 공개 금지
Backup Folder
↓
Public 접근 차단
Docker Compose Backup 운영 예제
구조:
Server
↓
Docker Compose
↓
MySQL Container
↓
Volume
↓
Backup Script
↓
Cron
↓
Cloud Storage
실행 흐름:
매일 03:00
↓
Backup 실행
↓
압축 파일 생성
↓
외부 저장
↓
오래된 파일 삭제
Docker Compose Backup 장애 대응
Backup Script 실패
확인:
cat backup.log
확인:
- Docker 실행 권한
- Database 접속 정보
- Disk 용량
Backup 파일 없음
확인:
ls -lh /backup
복원 실패
확인:
- Backup 파일 손상 여부
- Version 호환성
- Database 상태
Docker Compose Backup Best Practice
운영 환경 추천:
- 자동 Backup 구성
- 외부 Storage 저장
- Backup 암호화
- 복원 테스트 진행
- 보관 기간 설정
- Backup 로그 관리
권장 구조:
Application
↓
Database
↓
Volume
↓
Automatic Backup
↓
Remote Storage
↓
Recovery
자주 묻는 질문
Docker Compose는 Backup 기능이 기본 제공되나요?
아닙니다.
별도의 Script 또는 Backup 시스템 구성이 필요합니다.
Volume Backup과 Database Backup 중 무엇이 좋은가요?
둘 다 목적이 다릅니다.
Database Backup은 데이터 복원에 좋고, Volume Backup은 전체 환경 복구에 유리합니다.
Backup은 얼마나 자주 해야 하나요?
서비스 중요도에 따라 다르지만 운영 서비스는 자동 Backup 구성이 일반적입니다.
Backup 파일은 같은 서버에 저장해도 되나요?
가능하지만 장애 대비를 위해 외부 저장소를 함께 사용하는 것이 좋습니다.
마무리
Docker Compose Backup 자동화는 안정적인 서버 운영을 위한 필수 과정입니다.
Container는 다시 만들 수 있지만 데이터는 한번 손실되면 복구가 어렵기 때문에 Backup 전략이 중요합니다.
Production 환경에서는 다음 구조를 권장합니다.
Docker Compose
↓
Database
↓
Volume
↓
Automatic Backup
↓
External Storage
↓
Recovery
다음 글에서는 운영 서버 상태를 지속적으로 확인하기 위한 Docker Compose Monitoring 구성 방법을 알아보겠습니다.