Giới thiệu
Docker Storage là thành phần giúp lưu trữ bền vững các dữ liệu quan trọng ra bên ngoài Docker Host
hoặc các phương thức lưu trữ khác.
Một số trường hợp sử dụng volume
:
- Đưa cấu hình lưu trữ trên
docker host container
. - Chia sẻ dữ liệu giữa
container
vàdocker host
.. - Khi cần
backup
,restore
hoặcmigrate
dữ liệu từdocker host
sangdocker host
.
Yêu cầu
- Đã có kiến thức cơ bản về Linux
- Đã có kiến thức cơ bản về Git
- Terminal đến máy chủ Ubuntu sẵn sàng nhập lệnh
- Đã cài đặt Docker ở bài trước
Nội dung
Bind mount
Với bind mount
, mount point
có thể nằm ở bất kỳ đâu trong Docker Host, tuy nhiên thành phần thư mục mount point
này sẽ không được quản lý bởi Docker.
Cú pháp:
docker run --mount type=bind,src=<path_in_docker_host>,dst=<path_in_container> <image>
Cú pháp rút gọn:
docker run -v <path_in_docker_host>:<path_in_container> <image>
Ví dụ:
Chạy container centos
với bind mount
giữa đường dẫn file system
: /opt/docker_host_folder
với đường dẫn trong container
/opt/mount_point
:
docker run --name bind-centos -itd -v /opt/docker_host_folder:/opt/mount_point centos
Để kiểm tra tính đồng bộ dữ liệu giữa 2 thư mục trong và ngoài container
, chúng ta sẽ ghi nội dung cho tệp tin trong thư mực /opt/mount_point
của container
:
docker exec bind-centos /bin/bash -c "echo 'new file' > /opt/mount_point/newfile.txt"
Tệp tin newfile.txt
sẽ được lưu trữ hiện diện trên cả filesystem
của Docker Host:
ls -al /opt/docker_host_folder
cat /opt/docker_host_folder/newfile.txt
Ngược lại, chúng ta sẽ thử thêm mới tệp tin trên filesystem
ở thư mực đã mount
ra từ container
/opt/docker_host_folder
:
# Ở đây, bạn sẽ cần quyền của user root để ghi nội dung vào thư mục
sudo bash -c 'echo "I am in Filesystem" > /opt/docker_host_folder/message.txt'
Tệp tin message.txt
sẽ xuất hiện ở trong container
? Hãy kiểm chứng bằng cách liệt kê các tệp tin ở mount point
trong container
:
docker exec bind-centos /bin/bash -c "ls -al /opt/mount_point"
Bạn hãy thử ghi nội dung
Volume Mount
Volume mount là chức năng ra đời muộn hơn so với bind mount
, có những tính năng tốt hơn, thân thiện hơn về mặt quản lý storage
của các container
cho người dùng Docker. Bạn sẽ có một khu lưu trữ tập trung các storage
này, và có thể đặt tên cũng như thêm các label
cho chúng.
Về cú pháp, tương tự như với bind mount
về phần option
truyền vào lệnh docker run
, điểm khác biệt nằm ở phần mount point
trên filesystem
của Docker Host sẽ được thay thế bởi tên của Volume.
docker run --mount type=volume,src=<volume_name>,dst=<container_path> <image>
# hoặc
docker run -v <volume_name>:<container_path> <image>
Ví dụ:
Trước hết, chúng ta hãy tạo ra một container
có sử dụng volume mount
để đạt được tính bền vững lưu trữ dữ liệu:
docker run --name volume-centos -itd -v centos_volume:/opt/mount_point centos
Khi container
ở trạng thái running
, docker
đã tự động tạo volume
centos_volume
nếu nó không có trước. Bước tiếp chúng ta sẽ thêm tệp tin trong mount point
của container
và kiểm tra dữ liệu có được lưu trữ ra docker volume
centos_volume
hay không.
# Ghi file vào container
docker exec volume-centos /bin/bash -c "echo 'this is new file' > /opt/mount_point/test.txt"
Mặc định, khi cài đặt Docker, đường dẫn var/lib/docker/volumes
là nơi lưu trữ các Docker Volume, hoặc bạn có thể sử dụng câu lệnh inspect
để tìm kiếm về đường dẫn volume
của container
.
# Kiểm tra tệp tin trong centos_volume
sudo ls -al /var/lib/docker/volumes/centos_volume/_data
sudo cat /var/lib/docker/volumes/centos_volume/_data/test.txt
Bạn thấy nội dung tệp tin không?
Khi sử dụng Docker Volume, chúng ta cũng có thể đồng bộ các tệp tin thư mục theo 2 chiều từ ngoài vào trong hoặc từ trong ra ngoài Container. Tuy nhiên, Docker không khuyến khích việc ghi dữ liệu trực tiếp trên Docker Volume.
Quản trị Volume
1. Tạo mới Volume
Cú pháp:
docker volume create <volume_name>
Ví dụ: Tạo volume có tên my-volume
docker volume create my-volume
2. Liệt kê Volume
Cú pháp:
docker volume ls
3. Kiểm tra thông tin của Volume
Cú pháp:
docker volume inspect <volume>
<volume>
có thể được thay thế bằng tên hoặc Volume Id.
docker volume inspect my-volume
docker volume inspect centos_volume
4. Xóa Volume
Cú pháp:
docker volume rm <volume>
Lưu ý, Volume không được sử dụng bởi Container mới có thể được xóa.
docker volume rm my-volume
# xóa thành công
docker volume rm centos_volume
# nhận về lỗi không xóa thành công
Kết Luận
- Trong Docker, có hai cách chính để quản lý việc lưu trữ dữ liệu: Bind Mount và Volume Mount. Bind Mount cho phép liên kết một thư mục trong Docker Host với một thư mục trong Container, trong khi Volume Mount tạo ra một không gian lưu trữ tập trung được quản lý bởi Docker.
- Bind Mount đơn giản và linh hoạt hơn, cho phép truy cập dễ dàng vào dữ liệu từ cả Docker Host và Container. Tuy nhiên, Volume Mount cung cấp tính bền vững và quản lý linh hoạt hơn về mặt lưu trữ dữ liệu.
- Khi sử dụng Docker Volume, ta có thể tạo, liệt kê, kiểm tra thông tin và xóa các Volume dễ dàng thông qua các lệnh tương ứng của Docker.
- Tùy thuộc vào nhu cầu cụ thể, sử dụng Bind Mount hoặc Volume Mount sẽ mang lại lợi ích phù hợp cho việc quản lý và lưu trữ dữ liệu trong môi trường Docker của bạn.
Tác giả: Đỗ Thiên Giang
Chú ý: Tất cả các bài viết trên TEDU.COM.VN đều thuộc bản quyền TEDU, yêu cầu dẫn nguồn khi trích lại trên website khác.