Computer >> Hướng Dẫn Máy Tính >  >> Phần Mềm >> Máy Ảo

Làm chủ Docker Data Volumes: Hướng dẫn từng bước

Để thay gió, hôm nay bài viết ngắn gọn, không phức tạp về Docker container automation framework. Chúng ta học cách mount data vào container, chia sẻ data, và mọi chi tiết cần thiết để biến instance thành hệ thống hữu ích.

Đến nay bạn đã "thưởng thức" (thuật ngữ phóng khoáng) hướng dẫn chi tiết intro, rồi dính dáng services, networking, giải quyết lỗi khó. Tiếp tục truyền thống từng bước, đơn giản, rõ ràng. Bắt đầu.

Cơ bản

Quy trình expose dữ liệu host vào container khá đơn giản, giống lệnh mount. Cung cấp source directory/file, trỏ đến target directory/file. Giống port, gồm phần host và container.

docker run -it -v /root/testing:/dedoimedo centos:latest /bin/bash

Chạy container mới với Bash shell, mount thư mục /root/testing của host vào /dedoimedo trong container. Trên host, source có thể là bất kỳ, kể cả NFS mount – biến thành chia sẻ data remote đẹp mắt. Thực tế NFS ngăn re-exports, nhưng đây là "cheat", vì vẫn làm trên cùng host.

Trong container, check nội dung /dedoimedo. Tuy nhiên, trên CentOS mặc định (test case), bạn sẽ gặp lỗi. Điều này quan trọng vì bạn có thể gặp vấn đề tương tự, cần sẵn sàng debug, và cho thấy tính năng bảo mật đôi khi gây hại.

ls
ls: cannot open directory .: Permission denied

Tính năng bảo mật. Đúng, SELinux. May mắn là fix được. Thay đổi enforcement policy cho module, hoặc thêm rule cho phép container truy cập volume mount.

setenforce 0

Rule nếu muốn cách đó: chcon -Rt svirt_sandbox_file_t /<volume>. Sau đó thấy nội dung, bắt đầu chơi, viết file... Nếu nhìn host trước, tạo file mới trong thư mục mount, sẽ thấy như sau (trừ nội dung thực):

Chia sẻ giữa các container

Giống networking, bạn có thể expose data trong container này cho container khác, biến thành Data Volume Containers. Rất hữu ích nếu nhóm chức năng container, và tiết kiệm dung lượng đáng kể. Cũng có thể chain volume giữa container, giới hạn số container truy cập data host cùng lúc. Hữu ích nếu host không có cơ chế write locking mạnh (gần như luôn đúng trên UNIX-like).

Ví dụ nhanh. Khởi động container tên data-source với mount point /data. Có thể map /data đến thư mục host, nhưng tạm ổn. Tạo container thứ hai dùng volume từ data-source:

docker run -ti --name data-source -v /data centos:latest /bin/bash
docker run -ti --volumes-from data-source centos:latest /bin/bash

Cả hai container đều có thư mục /data, trừ data-source là entry point cho data của tất cả container chạy với --volumes-from. Tiết kiệm dung lượng, kiểm soát truy cập data gốc, dễ dàng test nhiều cấu hình phần mềm. Rất gọn.

[root@68d3ed5e243a data]# pwd
/data
[root@68d3ed5e243a data]# touch STUFF
[root@68d3ed5e243a data]#

Container thứ hai:

[root@7aed935cc156 /]# ls -la /data
total 4
drwxr-xr-x. 2 root root 18 May 1 11:46 .
drwxr-xr-x. 18 root root 4096 May 1 11:45 ..
-rw-r--r--. 1 root root 0 May 1 11:46 STUFF
[root@7aed935cc156 /]#

Tiếp theo?

Tin hay không, dừng ở đây. Có thêm bước như backup, xóa data... nhưng chủ đề riêng. Hiện tại đã đủ để làm việc với data volume và expose chúng vào container như mount point. Quy tắc chung: dùng data read-only cho tool/config môi trường, volume container cho big data, thư mục nhỏ đơn giản cho test...

Kết luận

Xử lý volume Docker khá đơn giản, tôi tin khía cạnh này vẫn cần phát triển trước khi đạt độ trưởng thành như các phần khác của framework. Chưa giàu tính năng, cần thêm cách kiểm soát data: snapshot, hỗ trợ built-in phân phối và song song hóa data...

Ít nhất bạn đã học vài điều mới: tạo mount point, mount data volume, chain chúng, fix vài rắc rối nhỏ. Có thể hướng dẫn hơi "trần trụi" so với các bài khác, nhưng không cần bài viết nặng nề vô tận. Đôi khi ngắn gọn, ngọt ngào là tốt. Trên đó, kết thúc.

Cheers.