Docker Compose Backup 자동화 완벽 가이드! Database와 Volume 정기 백업 구성하기

서버 운영에서 가장 중요한 요소 중 하나는 데이터 보호입니다.

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 구성 방법을 알아보겠습니다.

댓글 남기기