CodeGym /Các khóa học /Docker SELF /Gắn kết volumes

Gắn kết volumes

Docker SELF
Mức độ , Bài học
Có sẵn

8.1 Làm quen với ổ đĩa ảo

Gắn volume (Volumes) — là một trong những tính năng hữu ích nhất của Docker. Với nó, container có thể dễ dàng làm việc với dữ liệu trên máy chủ. Chức năng này giúp quản lý dữ liệu linh hoạt và tiện lợi: bạn có thể lưu trữ thông tin lâu dài, chia sẻ dữ liệu giữa các container và dễ dàng sao lưu hoặc phục hồi dữ liệu nếu có trục trặc xảy ra.

Volumes trong Docker — là cách lưu trữ dữ liệu mà không phụ thuộc vào container. Ngay cả khi container bị xóa, thông tin lưu trữ trong volume vẫn được bảo toàn. Volumes có thể được gắn (mounted) vào container, cho phép lưu dữ liệu riêng biệt và tái sử dụng, bất kể bạn tạo hay xóa container bao nhiêu lần.

Các loại volume chính

  1. Volumes ẩn danh (Anonymous Volumes)
    • Tự động được Docker tạo ra nếu container không được chỉ định volume rõ ràng.
    • Dùng để lưu tạm thời dữ liệu.
  2. Volumes có tên (Named Volumes)
    • Được tạo và quản lý bởi Docker.
    • Có thể được gắn vào nhiều container và vẫn tồn tại sau khi container bị xóa hoặc dừng.
  3. Volumes gắn trực tiếp (Bind Mounts)
    • Liên kết một thư mục trên máy chủ với một thư mục trong container.
    • Rất hữu ích để truy cập dữ liệu trên hệ thống host và tiện dụng trong lúc phát triển.

Cú pháp cơ bản lệnh docker run để gắn volumes


-v <host_path>:<container_path>

Cú pháp đầy đủ:


docker run -v <host_path>:<container_path> [OPTIONS] IMAGE [COMMAND] [ARG...]

Các tham số chính để gắn volumes

1. Tham số -v hoặc --volume

Dùng để tạo volume có tên hoặc volume gắn trực tiếp.

Ví dụ:

Terminal

docker run -d -v /host/data:/container/data nginx

2. Tham số --mount

Cung cấp cách chi tiết và linh hoạt hơn để gắn volumes, hỗ trợ các tham số bổ sung.

Ví dụ:

Terminal

docker run -d --mount type=bind,source=/host/data,target=/container/data nginx

8.2 Tạo và sử dụng volumes

1. Volumes có tên

Volumes có tên được tạo và quản lý bởi Docker. Chúng được thiết kế để lưu trữ dữ liệu lâu dài mà cần phải được giữ lại giữa các lần khởi động lại hoặc xóa container.

Tạo volume có tên:

Terminal

docker volume create my_volume

Chạy container với gắn kết volume:

Trong ví dụ này, volume my_volume được gắn kết vào thư mục /data bên trong container my_container. Tất cả dữ liệu lưu vào /data sẽ được lưu trữ trong volume và vẫn giữ sau khi container bị xoá.

Terminal

docker run -d -v my_volume:/data --name my_container nginx

2. Volumes ẩn danh

Volumes ẩn danh được tạo tự động bởi Docker và liên kết với container cụ thể. Chúng hữu ích cho dữ liệu tạm thời không cần giữ lại sau khi container bị xóa.

Chạy container với volume ẩn danh:

Trong ví dụ này, Docker sẽ tự động tạo volume ẩn danh và gắn nó vào thư mục /data bên trong container.

Terminal

docker run -d -v /data --name my_container nginx

3. Thư mục liên kết

Thư mục liên kết cho phép gắn các thư mục hệ thống của host vào container. Điều này tiện lợi để chia sẻ dữ liệu giữa các container và hệ thống host. Cách này cũng thường được sử dụng trong quá trình phát triển, khi mã nguồn được lưu trữ trên hệ thống host.

Chạy container với thư mục liên kết:

Trong ví dụ này, thư mục /host/data trên máy host được gắn vào thư mục /container/data bên trong container my_container.

Terminal

docker run -d -v /host/data:/container/data --name my_container nginx

8.3 Ví dụ sử dụng volume

1. Lưu trữ dữ liệu cơ sở dữ liệu

Sử dụng volume cho cơ sở dữ liệu giúp lưu giữ dữ liệu ngay cả khi khởi động lại và cập nhật container. Điều này đặc biệt quan trọng để đảm bảo hoạt động đáng tin cậy trong môi trường sản xuất.

Ví dụ:

Trong ví dụ này, dữ liệu PostgreSQL được lưu trữ trong volume db_data, đảm bảo dữ liệu không bị mất khi khởi động lại hoặc xóa container.

Terminal

docker volume create db_data
docker run -d -v db_data:/var/lib/postgresql/data --name postgres_container postgres

2. Chia sẻ dữ liệu giữa các container

Đôi khi cần chia sẻ dữ liệu giữa nhiều container. Volume giúp việc này trở nên dễ dàng.

Ví dụ

Tạo volume và khởi chạy hai container sử dụng volume này. Cả hai container sẽ có quyền truy cập vào dữ liệu trong volume shared_data, cho phép chúng trao đổi dữ liệu.

Terminal

docker volume create shared_data
docker run -d -v shared_data:/data --name container1 nginx
docker run -d -v shared_data:/data --name container2 nginx

3. Phát triển và kiểm thử

Khi phát triển ứng dụng, rất tiện lợi khi sử dụng các thư mục được gắn kết để chia sẻ mã nguồn giữa container và máy chủ lưu trữ. Điều này cho phép lập trình viên chỉnh sửa mã trên máy chủ lưu trữ, và container có thể làm việc ngay với các cập nhật.

Ví dụ

Trong ví dụ này, thư mục /path/to/source trên máy chủ lưu trữ được gắn kết vào thư mục /app trong container dev_container. Bằng cách này, container có thể sử dụng mã nguồn hiện tại trực tiếp từ hệ thống máy chủ lưu trữ.

Terminal

docker run -d -v /path/to/source:/app --name dev_container node

8.4 Quản lý volumes

Docker cung cấp các lệnh tiện lợi để quản lý volumes, nhờ đó có thể dễ dàng tạo, xóa và xem thông tin về volumes.

1. Xem tất cả volumes

Lệnh này hiển thị danh sách tất cả các volumes có sẵn trên máy host.

Terminal

docker volume ls

2. Xem thông tin về một volume

Sử dụng lệnh này để lấy thông tin chi tiết về volume my_volume: vị trí của nó trên hệ thống tệp của máy host và thông tin về các container đang sử dụng volume này.

Terminal

docker volume inspect my_volume

3. Xóa một volume

Lệnh này xóa volume my_volume. Trước khi xóa, cần đảm bảo rằng volume không được sử dụng bởi bất kỳ container nào, nếu không lệnh sẽ không thực thi được.

Terminal

docker volume rm my_volume

8.5 Sao lưu volumes

Để đảm bảo an toàn dữ liệu, điều quan trọng là phải có khả năng tạo sao lưu cho volumes và khôi phục chúng khi cần thiết.

1. Sao lưu volume

Trong ví dụ này, nội dung của volume my_volume được lưu trữ trong file my_volume_backup.tar.gz, cái này được lưu trong thư mục /backup trên máy chủ.

Terminal

docker run --rm -v my_volume:/volume -v /backup:/backup busybox tar czf /backup/my_volume_backup.tar.gz /volume

2. Khôi phục volume

Ví dụ này khôi phục nội dung của volume my_volume từ bản sao lưu được lưu trữ trong file my_volume_backup.tar.gz.

Terminal

docker run --rm -v my_volume:/volume -v /backup:/backup busybox tar xzf /backup/my_volume_backup.tar.gz -C /volume
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION