Chủ Nhật, 06/09/2026, 18:33 (GMT+0)

Docker Volume là gì? Cách lưu trữ dữ liệu bền vững trong Docker

Quay lại Trang chủ Blog
Trên trang này

Docker Container có thể được tạo mới hoặc loại bỏ rất nhanh, nhưng dữ liệu như database, file người dùng hay dữ liệu ứng dụng thường cần được lưu giữ lâu dài. Docker Volume giúp tách dữ liệu khỏi vòng đời của container, nhờ đó dữ liệu vẫn có thể tồn tại và được sử dụng lại ngay cả khi container cũ đã bị xóa.

Docker Volume là gì?

Docker Volume là cơ chế lưu trữ dữ liệu bền vững dành cho container, được Docker tạo và quản lý. Volume được mount vào filesystem của container tại một đường dẫn xác định để ứng dụng có thể đọc hoặc ghi dữ liệu.

Điểm khác biệt quan trọng là dữ liệu trong volume không thuộc writable layer của một container cụ thể. Vì vậy, volume có thể tiếp tục tồn tại sau khi container sử dụng nó bị xóa và sau đó được mount vào container khác.

docker-volume-1.jpg

Docker Volume được lưu ở đâu?

Volume được lưu trong vùng storage mà Docker daemon quản lý.

Với Docker Engine trên Linux trong cấu hình thông thường, có thể kiểm tra Mountpoint bằng:

docker volume inspect app-data

Kết quả có thể chứa đường dẫn tương tự:

/var/lib/docker/volumes/app-data/_data

Nguồn ban đầu cũng đề cập /var/lib/docker/volumes là khu vực Docker sử dụng để quản lý volume trên Linux.

Tuy nhiên, không nên coi đây là thư mục để ứng dụng hoặc người quản trị trực tiếp chỉnh sửa dữ liệu.

Docker khuyến nghị tương tác với dữ liệu volume bằng cách mount volume vào container. Việc truy cập hoặc sửa trực tiếp vùng dữ liệu do Docker quản lý là hành vi không được hỗ trợ và có thể gây lỗi dữ liệu.

Với Docker Desktop, Docker daemon còn có thể chạy bên trong môi trường máy ảo, vì vậy không nên mặc định rằng /var/lib/docker/volumes là một thư mục có thể truy cập trực tiếp từ hệ điều hành desktop.

Named Volume và Anonymous Volume khác nhau thế nào?

Tiêu chí

Named Volume

Anonymous Volume

TênDo người dùng đặtDocker sinh tự động
Dễ nhận biếtKhó hơn
Tái sử dụngDễKhó hơn
Quản lýThuận tiệnDễ phát sinh volume dư thừa
Phù hợpDatabase, persistent dataMount tạm hoặc trường hợp không cần tham chiếu lại
LifecycleĐến khi được chủ động xóaCó thể tồn tại sau container, ngoại trừ một số trường hợp như --rm

Các loại Storage Mount trong Docker

Docker hiện hỗ trợ nhiều dạng storage mount, trong đó phổ biến nhất với dữ liệu ứng dụng là:

  • Volume mount
  • Bind mount
  • tmpfs mount
  • Image mount
  • Named pipe

Trong phạm vi lưu trữ dữ liệu container, cần đặc biệt phân biệt Volume, Bind Mount và tmpfs.

Volume Mount

Storage do Docker quản lý.

Phù hợp khi cần:

  • Persistent data
  • Database
  • Application data
  • Storage cần quản lý bằng Docker
  • Dữ liệu cần tách khỏi container
DOCKER-VOLUME.jpg

Bind Mount

Bind Mount ánh xạ trực tiếp một file hoặc thư mục trên host vào container. Bind Mount đặc biệt hữu ích trong development khi source code trên host cần xuất hiện ngay trong container.

tmpfs Mount

tmpfs lưu dữ liệu trong RAM của Docker host thay vì ghi xuống disk.

Dữ liệu không tồn tại lâu dài và sẽ mất khi container dừng hoặc restart. Vì vậy tmpfs phù hợp với:

  • Cache tạm
  • Intermediate data
  • Temporary file
  • Một số dữ liệu nhạy cảm không muốn persist xuống disk

tmpfs không phải giải pháp persistent storage.

Docker Volume và Bind Mount khác nhau thế nào?

Đây là hai khái niệm rất dễ bị nhầm lẫn.

Tiêu chí

Docker Volume

Bind Mount

StorageDocker quản lýPath do người dùng chọn trên host
Phụ thuộc host filesystemThấp hơnCao
Docker CLI quản lýKhông theo mô hình Volume
Persistent
Host truy cập trực tiếpKhông phải mục tiêu chính
Tái sử dụngDễ bằng tên volumePhụ thuộc path
Use caseDatabase, persistent app dataSource code, config, file cần host truy cập

Nguồn ban đầu nhận định Docker Volume “generally better I/O” so với Bind Mount. Cách diễn đạt này dễ gây hiểu nhầm.

Điểm chính xác hơn là Volume thường có lợi thế hiệu năng so với ghi dữ liệu trực tiếp vào writable container layer, vì không cần đi qua storage driver để quản lý union filesystem.

Không nên khẳng định Volume luôn nhanh hơn Bind Mount trong mọi môi trường. Hiệu năng thực tế còn phụ thuộc hệ điều hành, Docker Desktop/Engine, filesystem, loại storage và workload.

Cách tạo và quản lý Docker Volume

Tạo Volume

docker volume create my-data

Nếu cần thêm label:

docker volume create \
  --label environment=production \
  my-data

Label giúp phân loại và quản trị volume thuận tiện hơn. Nguồn gốc cũng đề xuất sử dụng naming và labeling rõ ràng khi quản lý nhiều volume.

Xem danh sách Volume

docker volume ls

Kiểm tra thông tin Volume

docker volume inspect my-data

Có thể kiểm tra:

  • Driver
  • Mountpoint
  • Name
  • Labels
  • Options
  • Scope

Mount Volume bằng -v

docker run -d \
  -v my-data:/app/data \
  nginx

Cú pháp gồm:

volume-name:container-path

Mount bằng --mount

docker run -d \
  --mount type=volume,source=my-data,target=/app/data \
  nginx

--mount có cú pháp dài hơn nhưng rõ ràng hơn khi cần khai báo nhiều tùy chọn.

Docker cũng có thể tự tạo named volume nếu tên được chỉ định trong docker run nhưng volume đó chưa tồn tại.

Cách kiểm tra và xóa Docker Volume

Kiểm tra dung lượng Docker

Có thể sử dụng:

docker system df -v

để xem chi tiết dung lượng mà image, container và volume đang sử dụng.

Xóa một Volume

docker volume rm my-data

Docker không cho xóa volume nếu volume vẫn đang được container sử dụng theo cách thông thường.

Xóa Volume không sử dụng

Có thể chạy:

docker volume prune

Một điểm quan trọng cần sửa so với nguồn gốc: docker volume prune không mặc định xóa tất cả named volume không sử dụng.

Theo Docker CLI hiện tại, mặc định lệnh trên chỉ dọn các anonymous local volume không được container nào tham chiếu.

Muốn bao gồm cả unused named volume:

docker volume prune --all

hoặc:

docker volume prune -a

Cần kiểm tra kỹ dữ liệu trước khi thực hiện vì volume bị xóa có thể chứa dữ liệu không thể phục hồi nếu chưa backup.

Docker Volume Driver là gì?

Mặc định Docker thường sử dụng:

local

làm volume driver.

Volume driver quyết định cách và vị trí dữ liệu của volume được lưu trữ. Ngoài local storage, Docker có thể tích hợp các driver hoặc storage backend khác để hỗ trợ những kiến trúc như:

  • Network storage
  • NFS
  • CIFS/Samba
  • Block storage
  • Storage của bên thứ ba

Điều này đặc biệt hữu ích khi persistent data cần tồn tại độc lập không chỉ với container mà còn với một Docker host cụ thể.

Nguồn gốc sử dụng flocker làm ví dụ volume driver. Ví dụ này không nên tiếp tục sử dụng trong một bài hướng dẫn Docker hiện tại; thay vào đó nên mô tả volume driver theo cơ chế chung hoặc sử dụng storage driver thực tế đang được hệ thống triển khai.

Một số lỗi Docker Volume thường gặp

Permission denied

Một container có thể nhìn thấy volume nhưng không có quyền ghi vào thư mục được mount.

Nguyên nhân thường liên quan đến:

  • UID/GID của process trong container
  • Owner của file/thư mục
  • File permission
  • Cấu hình security của hệ điều hành

Không nên khắc phục một cách mặc định bằng chmod 777. Thay vào đó cần xác định user đang chạy application và gán ownership/permission phù hợp.

Mount nhầm Bind Mount thành Volume

Ví dụ:

-v /home/user/data:/data

đây là Bind Mount.

Trong khi:

-v app-data:/data

là Named Volume.

Sự khác biệt nằm ở thành phần bên trái dấu :: một bên là host path, một bên là volume name.

Volume chiếm quá nhiều dung lượng

Database, log hoặc dữ liệu người dùng có thể khiến volume tăng dung lượng liên tục.

Có thể kiểm tra bằng:

docker system df -v

và kết hợp chính sách retention, backup, monitoring phù hợp.

Xóa nhầm Volume

Volume không phải backup. Khi volume bị xóa hoặc storage bên dưới gặp sự cố, dữ liệu vẫn có thể mất.

Đối với production, cần có cơ chế:

  • Backup định kỳ
  • Kiểm tra khả năng restore
  • Giám sát dung lượng
  • Kiểm soát quyền
  • Xác định rõ volume nào được phép prune

Khi nào nên sử dụng Docker Volume?

Docker Volume phù hợp khi dữ liệu được container tạo hoặc sử dụng nhưng cần tồn tại độc lập với container.

Các use case phổ biến gồm:

  • Database: MySQL, PostgreSQL, MariaDB, MongoDB và các database containerized.
  • Application data: File người dùng tải lên, media, dữ liệu CMS hoặc dữ liệu phát sinh từ ứng dụng.
  • Persistent state: Dữ liệu cần tiếp tục được sử dụng khi container bị recreate hoặc nâng cấp.
  • Shared data: Dữ liệu cần được nhiều container truy cập trong kiến trúc phù hợp.
  • Nếu cần host và container cùng trực tiếp chỉnh sửa source code hay configuration file, Bind Mount thường hợp lý hơn. Nếu dữ liệu chỉ mang tính tạm thời và không cần persist, có thể cân nhắc tmpfs.
docker-volume-la-gi-3.jpg

Câu hỏi thường gặp về Docker Volume

Docker Volume có mất khi Container bị stop không?

Không. Volume vẫn tồn tại. Trên thực tế, writable layer của chính container cũng không bị xóa chỉ vì container bị stop. Sự khác biệt quan trọng của volume thể hiện rõ khi container bị remove.

Xóa Container có xóa Docker Volume không?

Thông thường không. Volume có lifecycle tách biệt và cần được xóa riêng. Anonymous volume có một số ngoại lệ khi sử dụng docker run --rm.

Docker Volume được lưu ở đâu?

Docker daemon quản lý vị trí lưu trữ volume. Với Docker Engine trên Linux, Mountpoint thường có thể nằm dưới /var/lib/docker/volumes/, nhưng không nên trực tiếp chỉnh sửa dữ liệu tại đây.

Docker Volume khác Bind Mount ở điểm nào?

Volume được Docker quản lý, còn Bind Mount ánh xạ trực tiếp một đường dẫn trên host vào container. Volume phù hợp hơn cho persistent application data; Bind Mount hữu ích khi host cũng cần trực tiếp truy cập các file.

Một Volume có thể dùng cho nhiều Container không?

Có. Tuy nhiên, khả năng nhiều container đọc hoặc ghi dữ liệu đồng thời còn phụ thuộc application, filesystem và volume driver.

Docker Volume có phải giải pháp Backup không?

Không. Volume cung cấp persistence, còn backup tạo bản sao dữ liệu để phục hồi khi dữ liệu gốc bị mất, hỏng hoặc bị xóa.

Kết luận

Docker Volume giúp lưu trữ dữ liệu độc lập với vòng đời của container, đặc biệt hữu ích với database, dữ liệu ứng dụng và những workload cần persistent storage. Volume được Docker quản lý, có thể tạo, mount, kiểm tra, tái sử dụng và xóa bằng Docker CLI hoặc cấu hình trực tiếp trong Docker Compose.

Khi triển khai thực tế, cần phân biệt rõ Volume với Bind Mount và tmpfs, ưu tiên Named Volume cho dữ liệu cần quản lý lâu dài, đồng thời kết hợp backup, giám sát dung lượng và kiểm soát quyền truy cập.

#Kubernetes
#Kubernetes
Sovereign Cloud không chỉ là đặt máy chủ trong nước. Với bối cảnh pháp lý dữ liệu mới tại Việt Nam, đây đang trở thành bài toán hạ tầng quan trọng cho doanh nghiệp Việt và doanh nghiệp nước ngoài hoạt động tại Việt Nam
Sovereign Cloud - Đám mây chủ quyền là gì? Và vì sao doanh nghiệp hoạt động tại Việt Nam nên quan tâm từ bây giờ?
Tiếp tục đọc