Docker

도커(Docker) 볼륨(Volumn): 데이터 유실 방지

10Biliion 2025. 5. 15. 14:56
반응형

 

Docker이용해 개발하거나 서비스를 배포할 가장 흔히 겪는 문제 하나는 컨테이너가 삭제되면 데이터도 함께 사라지는 문제입니다. 이번 글에서는 이러한 문제를 **Docker 볼륨(Docker Volume)**통해 어떻게 해결할 있는지 개념부터 실습까지 단계별로 알아보겠습니다.


Docker 컨테이너의 데이터 유실 문제

보통 Docker컨테이너 안에 파일 시스템을 생성합니다. 상태에서 컨테이너에 데이터를 저장하면 다음과 같은 문제가 생깁니다:

$ docker run -it --name temp-container ubuntu
# echo "hello docker" > /data/test.txt
# exit
$ docker rm temp-container

👉 컨테이너를 삭제하면 /data/test.txt함께 삭제되어 복구할 없습니다. 즉, 컨테이너의 라이프사이클과 데이터의 라이프사이클이 동일하다는 문제입니다.


Docker Volume이란?

**볼륨(Volume)**Docker데이터를 저장하는 방식 하나로, 컨테이너 외부에 데이터를 저장합니다.

  • 컨테이너 삭제와 무관하게 데이터가 유지됨
  • 여러 컨테이너 데이터 공유 가능
  • 성능 백업에 유리

Docker Volume 생성 및 사용

볼륨 생성

$ docker volume create my-volume

볼륨 목록 확인:

$ docker volume ls

 

 

볼륨을 컨테이너에 연결하기

$ docker run -d \
  --name nginx-container \
  -v my-volume:/usr/share/nginx/html \
  nginx​

명령은 my-volumenginx 컨테이너의 /usr/share/nginx/html 경로에 마운트합니다. : 이후의 경로는 Nginx기본 루트입니다.

 

컨테이너 내부에서 데이터 생성

$ docker exec -it nginx-container bash
# echo "<h1>Hello from Docker Volume!</h1>" > /usr/share/nginx/html/index.html
# exit

이제 브라우저에서 컨테이너의 포트를 확인하면 해당 메시지를 있습니다.


컨테이너 삭제 재생성해보기

$ docker rm -f nginx-container

$ docker run -d \
  --name nginx-container \
  -v my-volume:/usr/share/nginx/html \
  -p 8080:80 \
  nginx

http://localhost:8080접속하면 데이터가 그대로 유지것을 확인할 있습니다. 🎉


Bind Mount vs Volume 차이점

구분 Bind Mount Volume
위치 호스트의 임의 경로 Docker관리하는 경로 (/var/lib/docker/volumes)
권한 호스트가 직접 제어 Docker권한 관리
백업 이식성 낮음 높음
사용 추천 로컬 개발 운영 환경, 컨테이너간 공유, 백업 용이성 필요
 

실전 예제: MySQL 데이터 보존

 
$ docker volume create mysql-data

$ docker run -d \
  --name mysql-container \
  -e MYSQL_ROOT_PASSWORD=root1234 \
  -v mysql-data:/var/lib/mysql \
  mysql:8

데이터베이스 생성 테스트:

$ docker exec -it mysql-container mysql -u root -p root1234
mysql> CREATE DATABASE test_db;
mysql> exit

이제 컨테이너를 삭제하고 재생성해도 test_db유지됩니다.


불필요한 볼륨 정리

사용하지 않는 볼륨은 디스크 용량을 차지하므로 주기적으로 정리해주는 것이 좋습니다.

$ docker volume prune

모든 볼륨 삭제:

$ docker volume rm my-volume

주의: 연결 중인 컨테이너가 있는 경우 삭제되지 않습니다.

 

  • 컨테이너만 사용하면 데이터는 쉽게 유실된다.
  • Docker Volume사용하면 컨테이너와 독립적인 데이터 저장소를 구성할 있다.
  • 운영 환경에서는 무조건 Volume사용하자!

🔗 참고 자료

반응형