Docker Volume: Lưu trữ dữ liệu bền vững

Photo of author

Văn Ngọc Tân

Bạn có biết? Bạn chạy một ứng dụng database trong Docker container, lưu dữ liệu vài tuần. Một ngày đẹp trời, bạn restart container — toàn bộ dữ liệu biến mất! Tại sao? Vì mặc định, dữ liệu trong container chỉ tồn tại khi container sống. Container dừng = dữ liệu mất.

Đây chính là lý do bạn cần Docker Volume — cơ chế lưu trữ dữ liệu bền vững, tồn tại độc lập với vòng đời container.

Docker Volume là gì?

Docker Volume là vùng lưu trữ dữ liệu được quản lý bởi Docker, tồn tại bên ngoài lớp filesystem của container. Ngay cả khi container bị xóa, dữ liệu trong volume vẫn an toàn.

  • ✅ Dữ liệu không mất khi container dừng hoặc bị xóa
  • ✅ Chia sẻ dữ liệu giữa nhiều container dễ dàng
  • ✅ Hiệu năng tốt hơn bind mount trên Linux
  • ✅ Được Docker quản lý — backup, migrate đơn giản
  • ✅ Hỗ trợ nhiều driver: local, NFS, CIFS, cloud storage

Các loại lưu trữ trong Docker

1. Named Volume (Khối lượng đặt tên)

Loại phổ biến nhất. Docker quản lý hoàn toàn — bạn chỉ cần đặt tên.

# Tạo volume
docker volume create my-data

# Sử dụng volume
docker run -d --name my-app -v my-data:/app/data nginx

2. Bind Mount (Gắn kết thư mục)

Ánh xạ trực tiếp thư mục từ host vào container. Phổ biến trong môi trường development.

# Gắn thư mục host vào container
docker run -d --name my-app -v /home/user/project:/app nginx

3. tmpfs Mount

Lưu dữ liệu trong bộ nhớ RAM — biến mất khi container dừng. Dùng cho dữ liệu nhạy cảm như session, token.

# Lưu dữ liệu trong RAM
docker run -d --tmpfs /app/cache nginx
Network cables connected to server — tượng trưng cho lưu trữ dữ liệu bền vững trong Docker
Dữ liệu bền vững cần được lưu trữ bên ngoài container

Các lệnh Docker Volume cơ bản

docker volume create

# Tạo volume mới
docker volume create my-data

# Tạo volume với driver cụ thể
docker volume create --driver local my-data

docker volume ls

# Liệt kê tất cả volume
docker volume ls

# Lọc volume theo tên
docker volume ls -f name=my-

docker volume inspect

# Xem chi tiết volume
docker volume inspect my-data

docker volume rm / prune

# Xóa volume cụ thể
docker volume rm my-data

# Xóa tất cả volume không sử dụng
docker volume prune

Use Cases thực tế

1. Lưu trữ Database

# PostgreSQL với volume
docker run -d --name postgres-db \
  -v pgdata:/var/lib/postgresql/data \
  -e POSTGRES_PASSWORD=secret \
  postgres:16

# Dữ liệu tồn tại ngay cả khi container bị xóa
docker rm -f postgres-db
docker run -d --name postgres-db \
  -v pgdata:/var/lib/postgresql/data \
  -e POSTGRES_PASSWORD=secret \
  postgres:16
# Dữ liệu vẫn còn!

2. Chia sẻ dữ liệu giữa Containers

# Container 1: Ghi dữ liệu
docker run -d --name writer -v shared-data:/data alpine \
  sh -c "echo 'Hello from writer' > /data/message.txt"

# Container 2: Đọc dữ liệu
docker run --rm -v shared-data:/data alpine cat /data/message.txt
# Output: Hello from writer

3. Development với Hot Reload

# Gắn thư mục source code — thay đổi trên host → container thấy ngay
docker run -d --name node-app \
  -v $(pwd):/app \
  -p 3000:3000 \
  node:20-alpine

Bảng so sánh: Named Volume vs Bind Mount vs tmpfs

Tiêu chíNamed VolumeBind Mounttmpfs
Vị tríDocker quản lýThư mục trên hostBộ nhớ RAM
Trường tồnKhông
Hiệu năngTốt nhấtTốtNhanh nhất
BackupDễ (Docker CLI)Trung bìnhKhông thể
Use caseProductionDevelopmentDữ liệu tạm

Best Practices

  1. Dùng Named Volume cho production — Docker quản lý tốt hơn, dễ backup và migrate
  2. Dùng Bind Mount cho development — sửa code trên host, container thấy ngay
  3. Đặt tên rõ ràng — postgres-data thay vì vol1
  4. Backup thường xuyên — dùng docker run để tar dữ liệu ra host
  5. Không dùng root trong container — tránh vấn đề permission với bind mount
  6. Dùng .dockerignore — tránh bind mount những file không cần thiết
  7. Giám sát dung lượng — docker system df -v để kiểm tra

Bước tiếp theo

👉 Bài tiếp theo: Docker Network: Kết nối các Container

Trong bài tiếp theo, chúng ta sẽ tìm hiểu cách các container giao tiếp với nhau qua mạng, các loại network trong Docker, và cách expose port ra bên ngoài. Hẹn gặp lại!

0 0 đánh giá
Đánh giá bài viết
Theo dõi
Thông báo của
guest
0 Góp ý
Cũ nhất
Mới nhất Được bỏ phiếu nhiều nhất
Phản hồi nội tuyến
Xem tất cả bình luận