Bài 04: Docker Volumes

  • Đăng bởi JP
  • 08/12/2024

Trong các ứng dụng thực tế, việc quản lý dữ liệu là một yếu tố quan trọng. Dữ liệu của ứng dụng cần được lưu trữ một cách an toàn và có thể được tái sử dụng khi container bị dừng hoặc xóa.

Docker Volume là một công cụ mạnh mẽ để quản lý dữ liệu bền vững (persistent data) trong Docker. Bài viết này sẽ giúp bạn hiểu cách Docker Volume hoạt động và cách sử dụng chúng.

Docker volumes

Docker volumes


Docker Volume Là Gì?

Docker Volume là một cơ chế lưu trữ dữ liệu được Docker quản lý. Volume tồn tại độc lập với vòng đời của container, nghĩa là dữ liệu vẫn được lưu trữ ngay cả khi container bị xóa.

Tại sao sử dụng Docker Volume?

  • Lưu trữ bền vững: Dữ liệu không bị mất khi container dừng hoặc xóa.
  • Dễ dàng chia sẻ dữ liệu: Nhiều container có thể truy cập cùng một Volume.
  • Hiệu suất cao: Volume được tối ưu hóa để sử dụng trong Docker so với việc sử dụng file system thông thường.

Các Loại Storage Trong Docker

Docker cung cấp ba cách chính để lưu trữ dữ liệu:

  1. Volumes: Quản lý bởi Docker, lưu trữ trong thư mục Docker.
  2. Bind Mounts: Gắn trực tiếp thư mục từ hệ thống host vào container.
  3. tmpfs Mounts: Lưu trữ dữ liệu tạm thời trong bộ nhớ (RAM).

Cách Sử Dụng Docker Volume

1. Tạo Docker Volume

Bạn có thể tạo một Volume bằng lệnh:

docker volume create my_volume

Kiểm tra các Volume hiện có:

docker volume ls

2. Sử dụng Volume trong Container

Khi chạy container, bạn có thể gắn Volume bằng cách sử dụng tùy chọn -v hoặc --mount:

Cách 1: Sử dụng -v

docker run -d -v my_volume:/data my_app_image

Trong đó:

  • my_volume: Tên Volume.
  • /data: Thư mục trong container mà Volume được gắn vào.

Cách 2: Sử dụng --mount

docker run -d --mount source=my_volume,target=/data my_app_image

Tùy chọn này cho phép định nghĩa rõ ràng hơn.


3. Chia sẻ Volume giữa các Container

Nhiều container có thể chia sẻ cùng một Volume để trao đổi dữ liệu:

  • Container 1:

    docker run -d --name container1 --mount source=my_volume,target=/data my_app_image
    
  • Container 2:

    docker run -d --name container2 --mount source=my_volume,target=/data my_other_app_image
    

4. Kiểm tra Volume

Bạn có thể kiểm tra thông tin chi tiết của một Volume:

docker volume inspect my_volume

5. Xóa Volume

Khi không còn cần sử dụng, bạn có thể xóa Volume để giải phóng không gian lưu trữ:

docker volume rm my_volume

Lưu ý: Volume không thể bị xóa nếu nó đang được sử dụng bởi container.


Ví Dụ Thực Tế

Sử dụng Volume để lưu trữ cơ sở dữ liệu

Giả sử bạn muốn chạy một container MySQL và lưu dữ liệu trong một Volume:

docker run -d \
  --name mysql_container \
  -e MYSQL_ROOT_PASSWORD=my_password \
  --mount source=mysql_data,target=/var/lib/mysql \
  mysql:latest

Trong ví dụ này:

  • mysql_data là Volume lưu trữ dữ liệu của MySQL.
  • Dữ liệu vẫn tồn tại ngay cả khi container MySQL bị xóa.

Bind Mounts: Một Lựa Chọn Khác

Nếu bạn muốn container truy cập trực tiếp vào một thư mục cụ thể trên hệ thống host, bạn có thể sử dụng Bind Mounts:

docker run -d \
  -v /path/on/host:/path/in/container \
  my_app_image

Lưu ý:

  • Bind Mounts không được quản lý bởi Docker.
  • Cần cẩn thận khi chia sẻ các thư mục quan trọng của hệ thống host.

Tổng Kết

Docker Volume là một công cụ mạnh mẽ để quản lý dữ liệu bền vững trong các ứng dụng container. Hiểu và sử dụng Volume hiệu quả sẽ giúp bạn quản lý dữ liệu tốt hơn, đặc biệt trong các ứng dụng yêu cầu lưu trữ dài hạn như cơ sở dữ liệu hoặc các dịch vụ lưu trữ tệp.

Trong bài tiếp theo, chúng ta sẽ tìm hiểu về quy trình triển khai một ứng dụng thực tế với Docker.


Toàn bộ series


Trân trọng,
JP

Thảo luận trên tinh thần học hỏi