Docker 백업 완벽 가이드: 4가지 핵심 항목 정리




Docker 환경을 운영하다 보면 백업의 필요성을 느끼게 됩니다. 서버 이전, 장애 복구, 개발 환경 공유 등 다양한 상황에서 Docker 백업은 필수입니다. 이 글에서는 Docker 백업의 4가지 핵심 항목을 정리합니다.

Docker 백업 4가지 항목

#백업 대상명령어/방법중요도
1이미지docker save/load★★★
2컨테이너docker export/import
3볼륨tar 또는 백업 도구★★★★★
4설정docker-compose.yml, .env★★★★

실무 중요도 순서는 볼륨 > 설정 > 이미지 >>> 컨테이너 입니다.


1. 이미지 백업 (save/load)

Docker 이미지를 tar 파일로 저장하고 복원하는 방법입니다. 이미지의 모든 레이어와 히스토리가 보존됩니다.

이미지 저장

# 기본 사용법
docker save -o myimage.tar nginx:latest

# 리다이렉션 사용
docker save nginx:latest > nginx.tar

# 여러 이미지 한번에 저장
docker save -o all-images.tar nginx:latest redis:alpine postgres:16

# 압축해서 저장 (용량 절약)
docker save nginx:latest | gzip > nginx.tar.gz

이미지 복원

# 기본 사용법
docker load -i myimage.tar

# 리다이렉션 사용
docker load < nginx.tar

# 압축 파일에서 복원
gunzip -c nginx.tar.gz | docker load

사용 시나리오

  • 프라이빗 레지스트리 없이 이미지 공유
  • 오프라인 환경으로 이미지 이동
  • 특정 버전 이미지 아카이빙

2. 컨테이너 백업 (export/import)

실행 중인 컨테이너의 파일시스템을 스냅샷으로 저장합니다. 레이어가 단일 레이어로 평탄화되고 메타데이터가 손실되므로 실무에서는 거의 사용하지 않습니다.

컨테이너 내보내기

# 기본 사용법
docker export container_name -o container.tar

# 리다이렉션 사용
docker export container_name > container.tar

컨테이너 가져오기

# 새 이미지로 가져오기
docker import container.tar myimage:tag

# 파이프 사용
cat container.tar | docker import - myimage:tag

save/load vs export/import 차이점

구분save/loadexport/import
대상이미지컨테이너
레이어보존 ✅단일 레이어로 평탄화
히스토리보존 ✅손실 ❌
메타데이터보존 ✅손실 ❌
용도이미지 이동/백업컨테이너 스냅샷

3. 볼륨 백업 (가장 중요!)

볼륨에는 데이터베이스, 설정 파일, 업로드된 파일 등 실제 데이터가 저장됩니다. Docker 백업에서 가장 중요한 항목입니다.

볼륨 백업

# busybox 컨테이너를 이용한 볼륨 백업
docker run --rm \
  -v 볼륨명:/data \
  -v $(pwd):/backup \
  busybox tar cvf /backup/volume-backup.tar /data

볼륨 복원

# 백업 파일에서 볼륨 복원
docker run --rm \
  -v 볼륨명:/data \
  -v $(pwd):/backup \
  busybox tar xvf /backup/volume-backup.tar -C /

실행 중인 컨테이너 볼륨 백업

# 컨테이너 일시 정지 후 백업 (데이터 정합성 보장)
docker pause container_name
docker run --rm \
  --volumes-from container_name \
  -v $(pwd):/backup \
  busybox tar cvf /backup/volume-backup.tar /var/lib/mysql
docker unpause container_name

볼륨 백업 도구

수동 백업이 번거롭다면 다음 도구들을 활용할 수 있습니다.

  • Duplicati: 암호화된 클라우드 백업
  • Restic: 빠르고 안전한 백업, 중복 제거
  • BorgBackup: 중복 제거, 압축, 암호화
  • Volumerize: Docker 볼륨 전용 백업 도구

4. 설정 백업

Docker Compose 설정 파일과 환경 변수 파일을 백업합니다. 이 파일들만 있으면 언제든 동일한 환경을 재구성할 수 있습니다.

백업 대상 파일

project/
├── docker-compose.yml    # 컨테이너 구성 정의
├── docker-compose.override.yml  # 환경별 오버라이드 (선택)
├── .env                  # 환경 변수
└── config/               # 애플리케이션 설정 파일들
    ├── nginx.conf
    └── my.cnf

설정 백업 스크립트 예시

#!/bin/bash
BACKUP_DIR="./backup/$(date +%Y%m%d)"
mkdir -p $BACKUP_DIR

# 설정 파일 백업
cp docker-compose.yml $BACKUP_DIR/
cp .env $BACKUP_DIR/
cp -r config/ $BACKUP_DIR/

# 압축
tar czvf backup-$(date +%Y%m%d).tar.gz $BACKUP_DIR

전체 백업 스크립트 예시

4가지 항목을 모두 백업하는 스크립트입니다.

#!/bin/bash
set -e

BACKUP_DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR="./backup/$BACKUP_DATE"
mkdir -p $BACKUP_DIR

echo "=== Docker 전체 백업 시작 ==="

# 1. 설정 파일 백업
echo "[1/3] 설정 파일 백업..."
cp docker-compose.yml $BACKUP_DIR/
cp .env $BACKUP_DIR/ 2>/dev/null || true
cp -r config/ $BACKUP_DIR/ 2>/dev/null || true

# 2. 이미지 백업
echo "[2/3] 이미지 백업..."
IMAGES=$(docker compose images -q | sort -u)
if [ -n "$IMAGES" ]; then
  docker save $IMAGES | gzip > $BACKUP_DIR/images.tar.gz
fi

# 3. 볼륨 백업
echo "[3/3] 볼륨 백업..."
VOLUMES=$(docker compose config --volumes)
for vol in $VOLUMES; do
  docker run --rm \
    -v ${vol}:/data \
    -v $BACKUP_DIR:/backup \
    busybox tar cvf /backup/volume-${vol}.tar /data
done

# 최종 압축
tar czvf backup-$BACKUP_DATE.tar.gz $BACKUP_DIR
rm -rf $BACKUP_DIR

echo "=== 백업 완료: backup-$BACKUP_DATE.tar.gz ==="

정리

Docker 백업은 4가지 항목으로 구성됩니다.

백업 대상방법포함 내용
이미지docker save/load레이어, 히스토리, 메타데이터
컨테이너docker export/import파일시스템 스냅샷 (거의 안 씀)
볼륨tar 또는 백업 도구DB, 설정, 업로드 파일 등 실제 데이터
설정파일 복사docker-compose.yml, .env, config

실무에서는 볼륨과 설정만 잘 백업해두면 이미지는 레지스트리에서 다시 받을 수 있고, 컨테이너는 설정으로 재생성하면 됩니다. 정기적인 백업 스케줄을 설정하고, 복원 테스트도 주기적으로 수행하는 것을 권장합니다.




댓글 남기기