데이터 손실은 개인이나 비즈니스에 치명적일 수 있으며, NAS에서 운영하는 Docker 컨테이너의 중요한 데이터는 주기적인 백업이 필수입니다. 이 가이드는 여러분의 NAS Docker 컨테이너 데이터를 안전하게 자동 백업하고, 필요한 경우 신속하게 복구하는 구체적인 방법을 안내합니다.
목차
- 왜 Docker 데이터 백업이 중요한가?
- Docker 데이터 저장 방식 이해
- 수동 데이터 백업
- 자동 백업 스크립트 작성
- 크론탭으로 자동화 설정
- 데이터 복구 절차
가정 및 전제조건
이 글은 여러분의 NAS에 Docker가 이미 설치되어 있고, 컨테이너의 중요한 데이터가 NAS의 특정 호스트 경로에 ‘바인드 마운트(Bind Mount)’되어 있다고 가정합니다. 즉, 컨테이너 내부의 데이터가 NAS 파일 시스템의 특정 폴더와 직접 연결되어 있다는 의미입니다. 이 방식은 NAS에서 Docker를 운영할 때 데이터를 직접 관리하기에 가장 일반적이고 효율적인 방법 중 하나입니다.
1. 왜 Docker 데이터 백업이 중요한가?
Docker 컨테이너는 애플리케이션을 효율적으로 격리하고 실행하는 강력한 도구이지만, 컨테이너 자체가 사라지거나 손상될 경우 내부 데이터도 함께 유실될 위험이 있습니다. 특히 NAS에서 파일 서버, 미디어 서버, 스마트 홈 자동화 등 중요한 서비스를 Docker로 운영한다면, 설정 파일, 데이터베이스, 사용자 파일 등 핵심 데이터의 정기적인 백업은 필수적입니다.
예상치 못한 시스템 오류, 실수로 인한 삭제, 하드웨어 고장 등의 상황에서도 백업된 데이터를 통해 빠르게 정상 상태로 돌아갈 수 있습니다. 백업은 단순한 선택이 아니라, 여러분의 소중한 정보를 보호하기 위한 가장 기본적인 안전장치입니다.
2. Docker 데이터 저장 방식 이해
Docker는 컨테이너 데이터를 관리하기 위해 주로 두 가지 방식을 사용합니다. 하나는 ‘볼륨(Volume)’이고, 다른 하나는 ‘바인드 마운트(Bind Mount)’입니다. 볼륨은 Docker가 관리하는 특수 공간에 데이터를 저장하며, 보통 /var/lib/docker/volumes 경로에 위치합니다. 반면, 바인드 마운트는 호스트(NAS) 파일 시스템의 특정 경로를 컨테이너 내부에 직접 연결하는 방식입니다.
NAS 환경에서는 데이터의 접근성과 관리 편의성을 위해 바인드 마운트 방식이 널리 사용됩니다. 예를 들어, docker run -v /volume1/docker/mydata:/app/data와 같이 설정했다면, 컨테이너의 /app/data 경로는 NAS의 /volume1/docker/mydata 폴더와 동기화됩니다. 따라서 백업은 주로 이 호스트 경로의 데이터를 대상으로 이루어집니다.
3. 수동 데이터 백업
자동화를 시작하기 전에, 먼저 수동으로 데이터를 백업하는 방법을 익히는 것이 중요합니다. NAS의 SSH 터미널에 접속하여 백업할 데이터가 저장된 호스트 경로를 확인합니다. 이 경로는 docker inspect [컨테이너 이름 또는 ID] 명령어를 통해 확인할 수 있습니다. Mounts 섹션에서 Source 경로를 찾으면 됩니다.
데이터 경로를 확인했다면, tar 명령어를 사용하여 해당 폴더를 압축하고 백업용 폴더에 저장할 수 있습니다. 예를 들어, /volume1/docker/mydata 폴더를 /volume1/backups 폴더에 백업하려면 다음과 같이 실행합니다.
sudo tar -czvf /volume1/backups/mydata_$(date +%Y%m%d%H%M%S).tar.gz /volume1/docker/mydata
이 명령어는 현재 날짜와 시간을 포함한 압축 파일을 생성하여 백업 폴더에 저장합니다. c는 생성, z는 gzip 압축, v는 진행 상황 표시, f는 파일명을 지정하는 옵션입니다.
4. 자동 백업 스크립트 작성
수동 백업 명령어를 매번 입력하는 대신, 이를 자동화하기 위한 셸 스크립트를 작성합니다. 이 스크립트는 백업 대상 경로, 백업 저장 경로, 그리고 오래된 백업 파일을 정리하는 로직을 포함할 수 있습니다. 예를 들어, /volume1/scripts 폴더에 backup_docker_data.sh 파일을 생성하고 다음 내용을 추가합니다.
#!/bin/bash
# 백업 대상 폴더 목록
BACKUP_TARGETS=(
"/volume1/docker/mydata"
"/volume1/docker/another_app_data"
)
# 백업 저장 폴더
BACKUP_DIR="/volume1/backups/docker"
# 보관 일수 (예: 7일)
RETENTION_DAYS=7
mkdir -p "$BACKUP_DIR"
for TARGET_PATH in "${BACKUP_TARGETS[@]}"; do
# 폴더 이름 추출 (백업 파일명에 사용)
FOLDER_NAME=$(basename "$TARGET_PATH")
# 백업 파일명 (날짜_폴더명.tar.gz)
BACKUP_FILE="${BACKUP_DIR}/$(date +%Y%m%d%H%M%S)_${FOLDER_NAME}.tar.gz"
echo "[$(date +%Y-%m-%d %H:%M:%S)] Backing up ${TARGET_PATH} to ${BACKUP_FILE}"
sudo tar -czvf "$BACKUP_FILE" "$TARGET_PATH" > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo "백업 성공: ${BACKUP_FILE}"
else
echo "백업 실패: ${TARGET_PATH}"
fi
done
# 오래된 백업 파일 정리
echo "[$(date +%Y-%m-%d %H:%M:%S)] Cleaning up old backups..."
sudo find "$BACKUP_DIR" -type f -name "*.tar.gz" -mtime +"$RETENTION_DAYS" -delete
echo "정리 완료."
스크립트 작성 후, 실행 권한을 부여합니다. sudo chmod +x /volume1/scripts/backup_docker_data.sh
5. 크론탭으로 자동화 설정
작성한 스크립트를 주기적으로 실행하려면 ‘크론탭(Crontab)’을 사용합니다. 크론탭은 리눅스/유닉스 시스템에서 특정 시간에 명령어를 자동으로 실행해주는 스케줄러입니다. NAS의 SSH 터미널에서 crontab -e 명령어를 입력하여 크론탭 편집기를 엽니다.
편집기 하단에 다음 줄을 추가합니다. 이 예시는 매일 새벽 3시에 백업 스크립트를 실행하도록 설정합니다. MAILTO=""는 cron 실행 결과를 이메일로 받지 않도록 설정하는 것입니다.
MAILTO=""
0 3 * * * /volume1/scripts/backup_docker_data.sh
0 3 * * *는 각각 분(0-59), 시(0-23), 일(1-31), 월(1-12), 요일(0-7, 일요일은 0 또는 7)을 의미합니다. 위 설정은 매일 3시 0분에 스크립트를 실행하라는 의미입니다. 저장을 위해 Ctrl+X를 누르고 Y를 입력한 뒤 Enter를 누릅니다.
6. 데이터 복구 절차
백업된 데이터를 복구해야 할 상황이 발생하면 다음 단계를 따릅니다.
- 컨테이너 중지: 복구하려는 데이터와 관련된 Docker 컨테이너를 먼저 중지합니다.
sudo docker stop [컨테이너 이름 또는 ID] - 데이터 폴더 정리 (선택 사항): 기존의 손상된 데이터를 제거하고 싶다면, 백업 대상이었던 호스트 경로의 내용을 삭제할 수 있습니다. 신중하게 접근해야 합니다.
- 백업 파일 선택 및 복원: 가장 최신 또는 원하는 시점의
.tar.gz백업 파일을 선택하여 원본 데이터 경로에 복원합니다. 예를 들어,/volume1/backups/docker/20231026030000_mydata.tar.gz파일을/volume1/docker/mydata경로로 복원하려면 다음 명령어를 사용합니다.bash
sudo tar -xzvf /volume1/backups/docker/20231026030000_mydata.tar.gz -C /volume1/docker/mydata --strip-components=1-C옵션은 압축을 풀 경로를 지정하고,--strip-components=1은 압축 파일 내의 최상위 디렉토리(보통 백업 대상 폴더 이름)를 제거하여 내용물만 정확히 복원 경로에 위치하도록 합니다. - 컨테이너 시작: 데이터 복구가 완료되면, 중지했던 Docker 컨테이너를 다시 시작합니다.
sudo docker start [컨테이너 이름 또는 ID]
결론
NAS Docker 컨테이너 데이터의 자동 백업 및 복구는 데이터 손실로부터 여러분의 서비스를 보호하는 핵심적인 과정입니다. 이 가이드에서 제시된 스크립트와 크론탭 설정을 통해 중요한 데이터를 안전하게 관리하고, 만일의 사태에 대비할 수 있기를 바랍니다. 꾸준한 백업 관리로 안심하고 NAS를 활용하세요. 이 글이 도움이 됐다면 구독과 공유 부탁드립니다!