우분투에서 Docker 볼륨 기본 경로와 NFS 연동하기
우분투에서 Docker 볼륨 기본 경로와 NFS 연동하기
Docker는 컨테이너화된 애플리케이션을 실행하는 강력한 도구이지만, 데이터의 영속성과 관리 방법을 이해하는 것은 실제 운영 환경에서 매우 중요합니다. 특히 볼륨(Volume)은 컨테이너의 데이터를 영구적으로 저장하는 핵심 기능입니다. 이 글에서는 Ubuntu 환경에서 Docker 볼륨의 기본 경로와 이를 NFS와 연동하는 방법에 대해 알아보겠습니다.
Docker 볼륨의 기본 저장 경로
우분투에서 Docker를 설치하면, 볼륨 데이터는 기본적으로 다음 경로에 저장됩니다
/var/lib/docker/volumes/
이 디렉토리 내부에는 각 볼륨별로 고유한 디렉토리가 생성되며, 실제 데이터는 해당 디렉토리 안의 _data
폴더에 저장됩니다. 예를 들어 특정 볼륨의 데이터는 다음과 같은 경로에 위치합니다
/var/lib/docker/volumes/<volume-name>/_data/
현재 Docker의 루트 디렉토리 설정을 확인하려면 다음 명령어를 사용할 수 있습니다
1docker info | grep "Docker Root Dir"
Docker 볼륨 기본 경로 변경하기
경우에 따라 Docker의 기본 볼륨 저장 경로를 변경해야 할 필요가 있습니다. 특히 서버의 디스크 공간이 제한적이거나, 더 빠른 I/O 성능을 가진 디스크로 이동하고 싶을 때 유용합니다.
방법: daemon.json 설정 파일 수정
- 설정 파일을 열거나 새로 생성합니다
1sudo nano /etc/docker/daemon.json
data-root
항목을 추가하여 새 경로를 지정합니다
1{
2 "data-root": "/your/custom/docker"
3}
- 새 디렉토리를 사전에 생성하고 적절한 권한을 설정합니다
1sudo mkdir -p /your/custom/docker
2sudo chown -R root:root /your/custom/docker
- Docker 서비스를 재시작합니다
1sudo systemctl restart docker
- 변경이 적용되었는지 확인합니다
1docker info | grep "Docker Root Dir"
주의: 경로를 변경해도 기존
/var/lib/docker
에 있던 이미지, 컨테이너, 볼륨은 자동으로 이동되지 않습니다. 필요한 경우 수동으로 데이터를 복사해야 합니다.
NFS와 Docker 볼륨 연동하기
NFS에 Docker 볼륨 저장하기
NFS(Network File System)를 사용하여 Docker 볼륨 데이터를 네트워크 스토리지에 저장할 수 있습니다. 이는 다음과 같은 경우에 유용합니다:
- 여러 호스트 간에 볼륨 데이터 공유
- 중앙 집중식 스토리지 관리
- 백업 및 복구 전략 수립
그러나 NFS에 Docker의 모든 데이터를 저장하는 방식은 몇 가지 단점이 있습니다:
- 로컬 디스크보다 성능이 떨어질 수 있음
- NFS와 Docker 간의 호환성 문제 발생 가능성
- 파일 락(lock) 관련 이슈
따라서 실제 운영 환경에서는 Docker의 전체 data-root
를 NFS로 이동하기보다는, 백업용으로 NFS를 활용하는 것이 더 안정적인 방법입니다.
Docker 볼륨 백업을 위한 NFS 연동 방법
1. NFS 서버 준비 및 마운트
먼저 NFS 서버가 준비되어 있다고 가정하고, 클라이언트(Docker 호스트)에서 NFS 공유를 마운트합니다:
1sudo mkdir -p /mnt/docker-backup
2sudo mount -t nfs 192.168.1.100:/export/backup /mnt/docker-backup
영구적인 마운트를 위해 /etc/fstab
에 다음 내용을 추가할 수 있습니다:
192.168.1.100:/export/backup /mnt/docker-backup nfs defaults 0 0
2. 볼륨 백업 스크립트 작성
다음은 특정 Docker 볼륨을 NFS 마운트 지점에 백업하는 간단한 스크립트입니다:
1#!/bin/bash
2
3# 설정
4VOLUME_NAME=my_volume
5BACKUP_DIR=/mnt/docker-backup
6TIMESTAMP=$(date +%Y%m%d_%H%M%S)
7
8# 볼륨 데이터 백업
9docker run --rm \
10 -v ${VOLUME_NAME}:/volume \
11 -v ${BACKUP_DIR}:/backup \
12 alpine \
13 tar czf /backup/${VOLUME_NAME}_${TIMESTAMP}.tar.gz -C /volume .
14
15echo "Volume ${VOLUME_NAME} backed up to ${BACKUP_DIR}/${VOLUME_NAME}_${TIMESTAMP}.tar.gz"
이 스크립트를 /usr/local/bin/backup-docker-volume.sh
와 같은 경로에 저장하고 실행 권한을 부여합니다:
1sudo chmod +x /usr/local/bin/backup-docker-volume.sh
3. 자동화된 백업 일정 설정
cron을 사용하여 정기적인 백업을 설정할 수 있습니다
1# crontab -e로 편집기 열기
2crontab -e
3
4# 매일 새벽 3시에 백업 실행 (예시)
50 3 * * * /usr/local/bin/backup-docker-volume.sh
4. 볼륨 복원 방법
백업된 볼륨을 복원해야 할 경우, 다음과 같은 방법을 사용할 수 있습니다
1# 빈 볼륨 생성 (필요한 경우)
2docker volume create my_volume
3
4# 백업 파일에서 데이터 복원
5docker run --rm \
6 -v my_volume:/volume \
7 -v /mnt/docker-backup:/backup \
8 alpine \
9 tar xzf /backup/my_volume_20250409_113000.tar.gz -C /volume
실전 팁: 여러 볼륨 백업 자동화
여러 볼륨을 한 번에 백업하려면 다음과 같은 스크립트를 사용할 수 있습니다:
1#!/bin/bash
2
3# 설정
4BACKUP_DIR=/mnt/docker-backup
5TIMESTAMP=$(date +%Y%m%d_%H%M%S)
6VOLUMES_TO_BACKUP=("db_data" "app_data" "config_data")
7
8# 볼륨 목록을 순회하며 백업
9for VOLUME in "${VOLUMES_TO_BACKUP[@]}"; do
10 echo "Backing up volume: ${VOLUME}"
11
12 docker run --rm \
13 -v ${VOLUME}:/volume \
14 -v ${BACKUP_DIR}:/backup \
15 alpine \
16 tar czf /backup/${VOLUME}_${TIMESTAMP}.tar.gz -C /volume .
17
18 echo "✅ Volume ${VOLUME} backed up successfully"
19done
20
21echo "All volumes backed up to ${BACKUP_DIR} with timestamp ${TIMESTAMP}"
결론
Docker 볼륨은 컨테이너화된 애플리케이션의 데이터 영속성을 위한 핵심 요소입니다. 우분투에서 Docker 볼륨의 기본 저장 경로는 /var/lib/docker/volumes/
이며, 필요에 따라 이 경로를 변경할 수 있습니다.
NFS와 Docker 볼륨을 연동할 때는 전체 data-root
를 NFS로 이동하기보다는, 백업 목적으로 NFS를 활용하는 접근 방식이 더 안정적입니다. 자동화된 백업 스크립트와 cron을 조합하면 효율적인 볼륨 백업 전략을 구현할 수 있습니다.
이러한 방법을 활용하면 컨테이너 환경에서도 데이터의 안전성과 가용성을 높일 수 있으며, 장애 상황에서 신속한 복구가 가능해집니다.