Docker Volume là gì? Cách chia sẻ dữ liệu giữa Host và Container
Docker Volume là gì?
Docker Volume là một cơ chế lưu trữ dữ liệu trong Docker, cho phép dữ liệu tách ra khỏi container và được Docker quản lý độc lập. Nhờ đó, dữ liệu sẽ không bị mất khi container bị xóa hoặc tạo lại. Thay vì lưu trữ trực tiếp bên trong container – vốn chỉ mang tính tạm thời – Docker volume đóng vai trò như một vùng lưu trữ bền vững, có thể gắn vào một hoặc nhiều container để sử dụng. Điều này giúp việc chia sẻ dữ liệu giữa các container trở lên dễ dàng hơn, đồng thời hỗ trợ hiệu quả cho các tác vụ backup và restore. Trên hệ thống Linux, các volume thường được lưu tại mục /var/lib/docker/volumes/ , tuy nhiên người dùng không cần thao tác trực tiếp vào vị trí này. Docker volume đặc biệt hữu ích trong các trường hợp như lưu trữ cơ sở dữ liệu, file upload hoặc log hệ thống, giúp đảm bảo dữ liệu luôn an toàn và tách biệt hoàn toàn khỏi vòng đời của container.
Cách chia sẻ dữ liệu giữa host và Container
Container – Ánh xạ thư mục giữa Container và máy Host (hay còn gọi là Bind Mount) là cách cho phép bạn liên kết một thư mục trên máy thật vào trong container.
Nhờ đó:
- Container có thể đọc/ghi dữ liệu trực tiếp từ host
- Mọi thay đổi của host sẽ cập nhật ngay trong container và ngược lại
ví dụ:
vNode Tutorial
docker run -it -v /root/vnode:/home/datavnode/ ubuntu
Trong đó:
/root/vnode -> Thư mục trên máy host
/home/datavnode -> Thư mục trong container
Chia sẻ dữ liệu giữa các Container trong Docker
Giả sử bạn đã có một container với tên V1, trong đó đã được mount sẵn dữ liệu (từ host hoặc từ một volume). Nếu bạn muốn tạo một container khác và sử dụng lại toàn bộ dữ liệu đã được chia sẻ từ container này, bạn có thể dùng tham số –volumes-from.
Lệnh sau dùng để tạo một container mới và chia sẻ toàn bộ volume từ container khác.
Ví dụ:
vNode Tutorial
docker run -it --name V2 --volumes-from V1 ubuntu
Trong đó:
- docker run -it -> chạy container ở chế độ interative
- –name V2 -> đặt tên container là V2
- –volumes-form -> sử dụng lại toàn bộ volume đã được mount trong container V1
- ubuntu -> image được sử dụng để tạo container
Cách hoạt động
- Container V1 đã có sẵn dữ liệu ( từ Host hoặc Volume)
- Khi tạo container V2, Docker sẽ mount lại toàn các volume đó vào V2
- Hai container sẽ cùng truy cập chung dữ liệu
Nói đơn giản: V2 “kế thừa” toàn bộ dữ liệu từ V1
Quản lý dữ liệu trong Docker với volume
1. Liệt kê các volume
Để xem danh sách tất cả các volume trên hệ thống:
vNode Tutorial
docker volume ls
2. Tạo volume mới
vNode Tutorial
docker volume create name_volume
3. Xem thông tin chi tiết Volume
vNode Tutorial
docker volume inspect name_volume
4. Xóa volume
vNode Tutorial
docker volume rm name_volume
Lưu ý:
Không thể xóa nếu volume đang được container sử dụng
5. Mount một ổ đĩa vào Container với –mount
Tạo một volume có tên disk:
vNode Tutorial
docker create disk
Mount volume vào Container
vNode Tutorial
docker run -it --mount source=disk, target=/home/disk ubuntu
Giải thích:
- source=disk -> tên volume trên Docker host
- target=/home/disk -> đường dẫn trong container
- –mount -> sử dụng cơ chế mount hiện đại của Docker
khi chạy container:
- Thư mục /home/disk sẽ trỏ đến volume disk
- Mọi dữ liệu ghi vào đây sẽ được lưu trên host
6. Gán ổ đĩa vào Container khi tạo Container với -v
Nếu muốn ổ đĩa bind dữ liệu đến một thư mục cụ thể trên máy HOST thì có thể tạo volume với tham số như sau
vNode Tutorial
docker volume create --opt device=path_in_host --opt type=none --opt o=bind volumename
Sau đó, ổ đĩa này được gán vào container với tham số -v (không sử dụng –mount).
Ví dụ:
vNode Tutorial
# Tạo ổ đĩa có tên mydisk (dữ liệu lưu tại /home/mydata) docker volume create --opt device=/home/mydata --opt type=none --opt o=bind mydisk # Gán ổ đĩa vào container tại /home/sites docker run -it -v mydisk:/home/sites ubuntu
7. Xóa các ổ đĩa không sử dung
Để xóa tất cả các volume không được container nào sử dụng:
vNode Tutorial
docker volume prune
Kết luận
Docker Volume là giải pháp quan trọng giúp lưu trữ dữ liệu một cách bền vững và tách biệt hoàn toàn khỏi container. Nhờ đó, dữ liệu không bị mất khi container bị xóa, đồng thời có thể dễ dàng chia sẻ giữa Host và Container hoặc giữa nhiều container với nhau. Việc sử dụng đúng cách Volume và Bind Mount không chỉ giúp đảm bảo an toàn dữ liệu mà còn tối ưu quá trình phát triển và triển khai ứng dụng.
