Docker Volume 사용법 완벽 가이드! 데이터 영구 저장하기

Docker 컨테이너는 기본적으로 일시적인(Stateless) 환경에서 동작합니다. 즉, 컨테이너 내부에서 생성한 파일이나 데이터는 컨테이너가 삭제되면 함께 사라집니다.

예를 들어 MySQL 컨테이너를 실행하여 데이터베이스를 생성한 후 컨테이너를 삭제하면 데이터도 모두 삭제됩니다. 웹 서버의 업로드 파일이나 로그 파일도 마찬가지입니다.

이러한 문제를 해결하기 위해 사용하는 기능이 바로 Docker Volume입니다.

Docker Volume은 컨테이너와 독립적으로 데이터를 저장하는 공간입니다. 컨테이너를 삭제하거나 다시 생성하더라도 Volume은 그대로 유지되므로 데이터를 안전하게 보관할 수 있습니다.

이번 글에서는 Docker Volume의 개념부터 기본 구조, 사용 목적, 장점, 종류, 실무 활용 사례까지 자세히 알아보겠습니다.

Docker Volume이란 무엇인가?

Docker Volume은 컨테이너 외부에 데이터를 저장하는 Docker의 영구 저장소입니다.

컨테이너와 별도로 관리되므로 컨테이너가 삭제되어도 데이터는 그대로 유지됩니다.

데이터베이스, 로그, 업로드 파일처럼 지속적으로 보관해야 하는 데이터를 저장할 때 가장 많이 사용하는 기능입니다.

Docker Volume은 언제 사용하는가?

다음과 같은 상황에서 자주 사용됩니다.

  • MySQL 데이터 저장
  • PostgreSQL 데이터 저장
  • Redis 데이터 저장
  • 웹 업로드 파일 저장
  • 로그 파일 저장
  • 백업 데이터 저장

운영 환경에서는 거의 필수적으로 사용하는 기능입니다.

Docker Volume이 필요한 이유

컨테이너 내부에 저장된 데이터는 컨테이너가 삭제되면 함께 삭제됩니다.

예를 들어 다음과 같이 컨테이너를 실행했다고 가정해 보겠습니다.

docker run -it ubuntu

컨테이너 내부에서 파일을 생성합니다.

echo "Hello Docker" > test.txt

이후 컨테이너를 삭제하면 생성했던 파일도 함께 삭제됩니다.

영구적으로 데이터를 보관하려면 Volume을 사용해야 합니다.

Docker Volume의 구조

Docker Volume은 다음과 같은 구조로 동작합니다.

Host Server
      │
      │
Docker Volume
      │
      │
Container

컨테이너는 Volume을 통해 데이터를 읽고 저장합니다.

데이터는 Host Server에 저장되므로 컨테이너를 삭제해도 유지됩니다.

Docker Volume의 장점

Docker Volume을 사용하면 다음과 같은 장점이 있습니다.

  • 데이터 영구 저장
  • 컨테이너 삭제와 무관
  • 백업 가능
  • 여러 컨테이너 공유 가능
  • 높은 성능
  • Docker에서 자동 관리

운영 환경에서는 Bind Mount보다 Volume을 많이 사용하는 경우도 있습니다.

Docker Volume과 Bind Mount의 차이

Docker에는 데이터를 저장하는 두 가지 대표적인 방법이 있습니다.

Volume

  • Docker가 직접 관리
  • 운영 환경에 적합
  • 백업이 쉬움
  • 이식성이 좋음

Bind Mount

  • 사용자가 직접 경로 지정
  • 개발 환경에 적합
  • Host 디렉터리 사용
  • 파일 수정이 편리함

목적에 따라 적절한 방식을 선택하면 됩니다.

Docker Volume 확인

현재 존재하는 Volume 목록을 확인하려면 다음 명령을 사용합니다.

docker volume ls

출력 예시는 다음과 같습니다.

DRIVER    VOLUME NAME
local     mysql_data
local     nginx_logs
local     wordpress_data

현재 Docker에 생성되어 있는 Volume을 확인할 수 있습니다.

Docker Volume에서 사용하는 주요 명령어

Docker Volume을 관리할 때 자주 사용하는 명령어입니다.

  • docker volume create
  • docker volume ls
  • docker volume inspect
  • docker volume rm
  • docker volume prune

이 명령어들을 함께 사용하면 대부분의 Volume 관리 작업을 수행할 수 있습니다.

Docker Volume의 특징

Docker Volume은 다음과 같은 특징을 가지고 있습니다.

  • Docker에서 자동 관리
  • 컨테이너와 독립적
  • 데이터 영구 저장
  • 여러 컨테이너에서 공유 가능
  • 운영 환경에 적합
  • 백업 및 복원이 용이

Docker 데이터를 안전하게 관리하기 위한 가장 권장되는 방법입니다.

Docker Volume 실무 활용 예제

Docker Volume은 컨테이너의 데이터를 안전하게 보관하기 위한 기능입니다. 데이터베이스, 웹 서비스, 로그 파일 저장 등 운영 환경에서 가장 많이 사용하는 Docker 기능 중 하나입니다.

현재 Volume 목록 확인

먼저 생성되어 있는 Volume을 확인합니다.

docker volume ls

출력 예시는 다음과 같습니다.

DRIVER    VOLUME NAME
local     mysql_data
local     nginx_logs
local     wordpress_data

현재 Docker에 저장된 Volume 목록을 확인할 수 있습니다.

MySQL 데이터 저장

MySQL 컨테이너에서 Volume을 사용하는 예제입니다.

docker run -d \
--name mysql \
-v mysql_data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=1234 \
mysql:8

데이터베이스 파일은 mysql_data Volume에 저장됩니다.

컨테이너를 삭제하더라도 데이터는 그대로 유지됩니다.

Nginx 로그 저장

Nginx 로그를 Volume에 저장하는 예제입니다.

docker run -d \
--name nginx \
-v nginx_logs:/var/log/nginx \
nginx

로그 파일을 컨테이너와 분리하여 안전하게 보관할 수 있습니다.

WordPress 데이터 저장

WordPress 운영 시에도 Volume을 많이 사용합니다.

docker run -d \
--name wordpress \
-v wordpress_data:/var/www/html \
wordpress

업로드한 이미지와 WordPress 데이터가 영구적으로 저장됩니다.

Volume 상세 정보 확인

Volume의 저장 위치와 정보를 확인합니다.

docker volume inspect mysql_data

출력 예시는 다음과 같습니다.

[
  {
    "Driver": "local",
    "Mountpoint": "/var/lib/docker/volumes/mysql_data/_data"
  }
]

Volume이 실제 저장되는 경로를 확인할 수 있습니다.

Linux 서버 문제 해결

운영 서버에서 MySQL 컨테이너를 업데이트하기 위해 기존 컨테이너를 삭제했습니다.

docker rm -f mysql

이후 새로운 버전의 MySQL 컨테이너를 생성했습니다.

docker run -d \
--name mysql \
-v mysql_data:/var/lib/mysql \
mysql:8

컨테이너는 새로 생성되었지만 기존 데이터베이스는 그대로 유지되었습니다.

이는 데이터가 컨테이너 내부가 아니라 Docker Volume에 저장되어 있었기 때문입니다.

덕분에 서비스 중단 없이 MySQL 버전을 업그레이드할 수 있었습니다.

Docker Volume 사용 시 주의사항

Docker Volume을 사용할 때는 다음 사항을 알아두는 것이 좋습니다.

첫 번째는 컨테이너를 삭제해도 Volume은 자동으로 삭제되지 않습니다.

불필요한 Volume은 별도로 관리해야 합니다.

두 번째는 중요한 데이터는 정기적으로 백업하는 것이 좋습니다.

Volume도 디스크 장애가 발생하면 데이터가 손실될 수 있습니다.

세 번째는 여러 컨테이너가 하나의 Volume을 공유할 수 있습니다.

다만 동시에 데이터를 수정하는 경우에는 충돌이 발생하지 않도록 주의해야 합니다.

네 번째는 개발 환경에서는 Bind Mount가 편리할 수 있지만 운영 환경에서는 Docker Volume이 더욱 안정적입니다.

Best Practice

Docker Volume을 사용할 때는 다음과 같은 방법을 추천합니다.

  • 데이터베이스는 반드시 Volume을 사용합니다.
  • 로그 파일도 Volume에 저장하여 분석이 가능하도록 합니다.
  • 중요한 Volume은 정기적으로 백업합니다.
  • Volume 이름을 서비스별로 명확하게 관리합니다.
  • 사용하지 않는 Volume은 주기적으로 정리합니다.
  • 운영 환경에서는 Bind Mount보다 Docker Volume 사용을 우선 고려합니다.

이러한 방법을 적용하면 Docker 데이터를 더욱 안전하게 관리할 수 있습니다.

자주 묻는 질문

Docker Volume은 컨테이너를 삭제해도 유지되나요?

네.

컨테이너를 삭제해도 Volume은 그대로 유지됩니다.

여러 컨테이너가 하나의 Volume을 사용할 수 있나요?

가능합니다.

동일한 Volume을 여러 컨테이너에서 마운트하여 사용할 수 있습니다.

Docker Volume은 어디에 저장되나요?

기본적으로 Docker Host 내부의 Docker 관리 디렉터리에 저장됩니다.

저장 위치는 docker volume inspect 명령으로 확인할 수 있습니다.

Docker Volume과 Bind Mount 중 무엇을 사용하는 것이 좋나요?

운영 환경에서는 Docker Volume을 권장합니다.

개발 환경에서는 소스 코드를 즉시 반영하기 위해 Bind Mount를 사용하는 경우가 많습니다.

마무리

Docker Volume은 컨테이너와 독립적으로 데이터를 저장하여 서비스의 안정성을 높여주는 핵심 기능입니다.

데이터베이스, 로그, 업로드 파일처럼 중요한 데이터를 안전하게 보관할 수 있으며, 컨테이너를 삭제하거나 다시 생성하더라도 데이터를 그대로 유지할 수 있습니다.

실제 운영 환경에서는 대부분의 상태 저장(Stateful) 애플리케이션이 Docker Volume을 사용하므로 반드시 익혀두어야 하는 Docker 기능입니다.

댓글 남기기