Docker Compose Volume 관리 완벽 가이드! Container 데이터 저장과 백업 구조 이해하기

Docker Container는 기본적으로 삭제하면 내부 데이터도 함께 사라지는 구조입니다.

예를 들어 Database Container를 실행한다고 가정하면:

MySQL Container

↓

Database 데이터 저장

↓

Container 삭제

↓

데이터 삭제

이 문제가 발생합니다.

서버 운영 환경에서는 Container가 재생성되거나 업데이트되어도 데이터가 유지되어야 합니다.

이때 사용하는 기능이 Docker Volume입니다.

기본 구조:

Host Server

↓

Docker Volume

↓

Container

↓

Application Data

Docker Compose에서는 Volume을 활용하여 다음 데이터를 안전하게 관리합니다.

  • Database 데이터
  • Upload 파일
  • 로그 데이터
  • 설정 파일
  • Application 저장 데이터

이번 글에서는 Docker Compose Volume의 기본 개념부터 Named Volume, Bind Mount, 데이터 백업, Database 운영 방법까지 서버 운영 기준으로 자세히 알아보겠습니다.

Docker Compose Volume이란 무엇인가?

Volume은 Docker Container와 별도로 데이터를 저장하는 저장 공간입니다.

Container 내부 저장 방식:

Container

↓

내부 파일 시스템

↓

Container 삭제

↓

데이터 삭제

Volume 사용:

Container

↓

Volume 연결

↓

데이터 저장

↓

Container 삭제

↓

데이터 유지

즉 Volume은 Container와 생명주기를 분리하는 저장 방식입니다.

Docker Compose Volume이 필요한 이유

Container는 언제든 삭제되고 다시 생성될 수 있습니다.

예:

Image 업데이트

↓

Container 삭제

↓

새 Container 생성

Volume이 없다면:

Database 데이터 손실

발생 가능

Volume 사용:

기존 Volume 유지

↓

새 Container 연결

↓

데이터 유지

Production 서버에서는 거의 필수적으로 사용합니다.

Docker Compose Volume 기본 설정

가장 기본적인 Volume 설정:

services:

  database:

    image: mysql:8

    volumes:

      - mysql-data:/var/lib/mysql


volumes:

  mysql-data:

구조:

mysql-data Volume

↓

/var/lib/mysql

↓

MySQL 데이터 저장

실행:

docker compose up -d

결과:

MySQL Container

+

Volume 연결

+

데이터 유지

Docker Compose Named Volume이란?

Named Volume은 Docker가 관리하는 Volume입니다.

예:

volumes:

  mysql-data:

확인:

docker volume ls

결과:

project_mysql-data

특징:

  • Docker가 위치 관리
  • Container 삭제 후 유지
  • 관리 편리
  • Database 운영에 적합

사용 예:

  • MySQL
  • PostgreSQL
  • Redis
  • MongoDB

Docker Compose Bind Mount란?

Bind Mount는 Host 서버의 특정 폴더를 Container와 직접 연결하는 방식입니다.

구조:

Host 폴더

↓

Container 폴더

예:

services:

  app:

    image: node

    volumes:

      - ./app:/app

의미:

현재 폴더/app

↓

Container /app

특징:

  • Host에서 파일 직접 수정 가능
  • 개발 환경에 적합
  • 설정 파일 관리 편리

Named Volume과 Bind Mount 차이

구분Named VolumeBind Mount
관리 위치Docker 관리Host 직접 관리
주요 용도Database개발 파일
백업쉬움직접 관리
운영 환경추천상황별 사용

Production Database:

Named Volume 추천

개발 환경:

Bind Mount 추천

Docker Compose Volume 목록 확인

현재 Volume 확인:

docker volume ls

상세 정보:

docker volume inspect volume-name

확인:

  • 저장 위치
  • 연결 Container
  • Driver

예:

docker volume inspect mysql-data

Docker Compose Volume 생성 과정

Compose 실행:

docker compose up -d

자동 과정:

docker-compose.yml 확인

↓

Volume 확인

↓

없으면 생성

↓

Container 연결

확인:

docker volume ls

Docker Compose Volume 삭제 방법

Container 종료:

docker compose down

결과:

Container 삭제

↓

Volume 유지

Volume까지 삭제:

docker compose down -v

주의:

Volume 삭제

↓

Database 데이터 삭제

될 수 있습니다.

Docker Compose Volume 백업 방법

Database 운영에서는 백업이 중요합니다.

Volume 위치 확인:

docker volume inspect mysql-data

백업 예:

docker run --rm \
-v mysql-data:/data \
-v $(pwd):/backup \
ubuntu \
tar czf /backup/mysql-backup.tar.gz /data

결과:

Volume

↓

압축 파일 생성

↓

백업 완료

Docker Compose Volume 복원 방법

백업 파일:

mysql-backup.tar.gz

복원:

docker run --rm \
-v mysql-data:/data \
-v $(pwd):/backup \
ubuntu \
tar xzf /backup/mysql-backup.tar.gz -C /

결과:

Backup File

↓

Volume 복원

↓

Database 데이터 복구

Docker Compose Database Volume 실무 예제

MySQL 구성:

services:

  database:

    image: mysql:8

    environment:

      MYSQL_ROOT_PASSWORD: password

    volumes:

      - mysql-data:/var/lib/mysql


volumes:

  mysql-data:

구조:

MySQL Container

↓

mysql-data Volume

↓

Database 저장

Container 재생성:

docker compose down

docker compose up -d

결과:

기존 Database 유지

Docker Compose Volume과 Permission 문제

Bind Mount 사용 시 권한 문제가 발생할 수 있습니다.

오류:

Permission denied

원인:

Host 권한

↓

Container User 권한 차이

확인:

ls -al

해결:

chmod

chown

사용

Docker Compose Volume 운영 Best Practice

추천:

  • Database는 Named Volume 사용
  • 정기 백업 설정
  • Volume 이름 관리
  • Production 데이터 분리
  • 중요 데이터 외부 백업

운영 구조:

Application Container

↓

Database Container

↓

Named Volume

↓

Backup Storage

Docker Compose Volume 장애 대응

데이터가 보이지 않는 경우

확인:

docker volume ls

Volume 존재 확인

잘못된 Volume 연결

확인:

docker inspect container-name

Mount 정보 확인

Database 실행 오류

확인:

docker compose logs database

자주 묻는 질문

Container를 삭제하면 Volume도 삭제되나요?

아닙니다.

기본적으로 Volume은 유지됩니다.

Database는 Volume을 사용해야 하나요?

네.

Production 환경에서는 필수에 가깝습니다.

Bind Mount와 Volume 중 어떤 것을 사용해야 하나요?

Database는 Named Volume, 개발 파일은 Bind Mount가 일반적입니다.

Volume 백업이 필요한가요?

중요 데이터라면 반드시 필요합니다.

마무리

Docker Compose Volume은 Container 환경에서 데이터를 안전하게 보존하기 위한 핵심 기능입니다.

Container는 쉽게 생성되고 삭제되지만 Volume을 사용하면 Database와 중요한 파일 데이터를 안정적으로 유지할 수 있습니다.

특히 Production 서버에서는 Docker Compose, Database, Volume, Backup 구조를 함께 설계해야 안정적인 서비스 운영이 가능합니다.

다음 글에서는 Docker Compose에서 데이터를 저장하는 방식과 실제 서버 저장 구조를 이해하는 Docker Compose Storage 구조 완벽 가이드를 진행합니다.

댓글 남기기