Bài 4. Làm việc với Docker Volume

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 containerdocker host..
  • Khi cần backup, restore hoặc migrate dữ liệu từ docker host sang docker 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 MountVolume 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 HostContainer. 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.

Lên trên