Trang chủTin tứcDocker Volume là gì? Phân tích và cách sử dụng Docker Volume
Docker Volume là gì? Phân tích và cách sử dụng Docker Volume

Tìm hiểu Docker Volume là gì, các loại volume phổ biến và hướng dẫn sử dụng Docker Volume một cách dễ hiểu để quản lý dữ liệu hiệu quả trong container.

Trong hệ sinh thái Docker, quản lý dữ liệu là một yếu tố quan trọng để đảm bảo tính bền vững và linh hoạt của ứng dụng. Docker Volume là giải pháp giúp lưu trữ và quản lý dữ liệu một cách độc lập khỏi vòng đời của container. Bài viết này sẽ phân tích chi tiết Docker Volume là gì và hướng dẫn bạn cách sử dụng volume trong Docker để tối ưu hóa quy trình quản lý dữ liệu.

>>> Có thể bạn quan tâm: Docker Hub là gì? Hướng dẫn sử dụng Docker Hub chi tiết

Docker Volume là gì?
Docker Volume là gì?

1. Docker Volume là gì?

Docker Volume là một cơ chế để quản lý dữ liệu trong các container Docker. Khi bạn chạy một container, dữ liệu có thể được lưu trữ trong hệ thống file bên trong container đó. Tuy nhiên, khi container bị xóa hoặc tạo lại, dữ liệu này sẽ bị mất. Để giải quyết vấn đề này, Docker cung cấp volumes.

Docker cung cấp 3 cách khác nhau để có thể chia sẻ dữ liệu (mount data) từ Docker host tới container đó là:

  • volumes
  • bind mounts
  • tmpfs mounts

Docker Volume là gì? 2

Hình ảnh trên mô tả vị trí lưu trữ dữ liệu của container trên Docker host. Theo đó, ta có thể thấy được:

  • volumes được lưu trữ như một phần của filesystem trên Docker host và được quản lý bởi Docker (xuất hiện trong /var/lib/docker/volumes trên Linux). Đây được xem là cách tốt nhất để duy trì dữ liệu trong Docker
  • bind mounts cho phép lưu trữ bất cứ đâu trong host system.
  • tmpfs mounts cho phép lưu trữ tạm thời dữ liệu vào bộ nhớ của Docker host, không bao giờ ghi vào filesystem của Docker host.

2. Phân tích các loại Docker Volume

2.1 Volume

Volumes được tạo và quản lý bởi Docker. Ta có thể tạo volumes với câu lệnh docker volume create hoặc tạo volumes trong khi tạo containers, ...

Khi tạo ra volumes, nó sẽ được lưu trữ trong một thư mục trên Docker host (/var/lib/docker/volumes/<volume-name>). Khi ta thực hiện mount volumes vào 1 thư mục trong container có nghĩa là khi ta truy cập vào container và thực hiện bất kỳ hành động nào ở thư mục ta vừa mount thì volume cũng sẽ biến đổi theo.

Volumes có thể được mount vào nhiều containers cùng một lúc. Khi không có containers nào sử dụng volumes thì volumes vẫn ở trạng thái cho phép mount vào containers và không bị xóa một cách tự động.

Volume là cách phổ biến được lựa chọn để duy trì dữ liệu trong services và containers. Một số trường hợp sử dụng volumes có thể bao gồm:

  • Chia sẻ dữ liệu giữa nhiều containers: Ví dụ container chứa sql cần phải chia sẻ với nhiều container web khác
  • Dữ liệu cần tồn tại khi dừng hoặc xóa containers: Bạn có một cơ sở dữ liệu hoặc một ứng dụng lưu trữ dữ liệu quan trọng cần duy trì, ngay cả khi container chạy ứng dụng bị dừng hoặc bị xóa.
  • Docker host có cấu trúc filesystem không ổn định: như việc nâng cấp hệ điều hành, thay đổi ổ cứng, hoặc các yêu cầu di chuyển hệ thống.
  • Lưu trữ dữ liệu containers trên remote hosts hoặc cloud: Khi bạn muốn chia sẻ cho nhiều docker server khác
  • Khi có nhu cầu sao lưu, backup hoặc migrate dữ liệu tới Docker host khác thì volumes là một sự lựa tốt. Ta cần phải dừng containers sử dụng volumes sau đó thực hiện backup tại đường dẫn /var/lib/docker/volumes/<volume-name>

2.2 Bind mounts

Bind mounts thường được sử dụng trong các trường hợp sau:

  • Chia sẻ các file cấu hình từ Docker host tới containers: Bạn có một file cấu hình Nginx trên Docker host ở đường dẫn /etc/nginx/nginx.conf. Bạn muốn sử dụng cấu hình này cho container Nginx
  • Chia sẻ file hoặc cấu trúc thư mục cố định: container nginx cần ghi log trực tiếp vào file /var/log/

2.3 Tmpfs mount

tmpfs mount được sử dụng trong các trường hợp ta không muốn dữ liệu tồn tại trên Docker host hay containers vì lý do bảo mật hoặc đảm bảo hiệu suất của containers khi ghi một lượng lớn dữ liệu một cách không liên tục.

Nếu bạn có một container cần xử lý thông tin đăng nhập tạm thời mà bạn không muốn lưu lại trên Docker host, bạn có thể sử dụng tmpfs mount

Các loại Docker Volume
Các loại Docker Volume

3. Hướng dẫn sử dụng Docker Volume

3.1 Cách sử dụng volumes

Để tạo một volume, ta sử dụng câu lệnh:

docker volume create my-vol

Khi khởi chạy containers với volume chưa có (tồn tại) thì Docker sẽ tự động tạo ra volume với tên được khai báo hoặc với một tên ngẫu nhiên và đảm bảo tên ngẫu nhiên này là duy nhất. Ví dụ:

docker run -d \

  -it \

  --name devtest \

  --mount type=volume,source=myvol2,target=/var/www/html \

  nginx:latest

câu lệnh trên sẽ thực hiện tạo volume myvol2 và mount tới thư mục /var/www/html trong container devtest.

Khi này ta sử dụng lệnh đăng nhập vào container và thực hiện bất kỳ thao tác tạo sửa xóa file trên thư mục /var/www/html thì trên volume /var/lib/docker/volumes/myvol2 cũng sẽ thay đổi theo.

docker exec -it devtest bash

Nếu muốn mount volume với chế độ readonly, ta có thể thêm vào trong --mount. Với ví dụ trên có thể là làm như sau:

--mount source=myvol2,target=/app,readonly

3.2 Cách sử dụng bind mounts

Sử dụng tương tự như volume, ta chỉ cần thay đổi giá trị của type trong --mount. Theo đó ta có câu lệnh ví dụ như sau:

docker run -d \

  -it \

  --name devtest \

  --mount type=bind,source=/home/thanhquang,target=/var/www/html \

  nginx:latest

Lúc này docker sẽ không tạo volume nữa mà sẽ mount thư mục /home/thanhquang có sẵn trong máy vào thư mục /var/www/html trên container devtest. (Lưu ý là thư mục bên trong container nhé).

3.3 Cách sử dụng tmpfs mounts

Khi sử dụng tmpfs mounts thì ta không thể chia sẻ dữ liệu giữa containers.

tmpfs mounts chỉ làm việc đối với Linux containers.

Tương tự như khi sử dụng volumes, ta chỉ cần thay đổi giá trị type trong --mount và bỏ source đi.

docker run -d \

  -it \

  --name devtest \

  --mount type=tmpfs,target=/var/www/html \

  nginx:latest

4. Volume share

Docker volume share là một tính năng cho phép nhiều container sử dụng chung một volume. Ví dụ như bạn có 2 container và 2 container này cùng chạy một image là nginx và bạn muốn 2 container này cùng chạy song song, nếu chẳng may có container này bị down thì sẽ có container kia còn dùng được.

Tạo docker volume.

docker volume create nginx-data

Chạy 2 container nginx dùng chung một volume vừa tạo.

docker run -d --name nginx-container-1 -v nginx-data:/usr/share/nginx/html -p 8081:80 nginx

docker run -d --name nginx-container-2 -v nginx-data:/usr/share/nginx/html -p 8082:80 nginx

Bây giờ ta sẽ vào container 1 để tạo ra 1 file index xong đó lên trang web truy cập vào 2 container xem có share chung dữ liệu không.

docker exec -it nginx-container-1 /bin/bash

Ta sẽ dùng lệnh EOF để có thể tạo 1 file index.html nhé.

cat > /usr/share/nginx/html/index.html << 'EOF'

Nội dung file index

….

EOF

Bây giờ ta vào trình duyệt và kiểm tra
Bây giờ ta vào trình duyệt và kiểm tra

Tổng kết

Đến đây chắc hẳn bạn đã hiểu rõ Docker volume là gì cũng như cách sử dụng hiệu quả. Docker volume là một cơ chế lưu trữ dữ liệu trong Docker, cho phép dữ liệu được giữ lại ngay cả khi container bị xóa. Volumes được lưu trữ ngoài container's filesystem, giúp dữ liệu được bảo toàn và dễ dàng chia sẻ giữa các container. Docker volume giúp tách biệt dữ liệu khỏi vòng đời của container, cho phép quản lý dữ liệu linh hoạt và an toàn hơn. Đây là giải pháp tối ưu để quản lý dữ liệu bền vững trong các ứng dụng containerized, đảm bảo tính toàn vẹn và khả năng truy cập dữ liệu liên tục.

>>> Xem thêm: Docker image là gì? Dockerfile là gì? Build image từ Dockerfile

Tác giả:
author avatar
Mình là Huy, hiện mình đang là kỹ sư hệ thống tại SunCloud. Mình có nhiều năm kinh nghiệm, kiến thức chuyên môn về mạng, hệ thống, điện toán mây và an ninh bảo mật. Mình đã triển khai và vận hành rất nhiều dự án thực tế cho doanh nghiệp, cơ quan. Mình đã đạt được một số chứng chỉ quốc tế như CCNP, LPI, VCP, đồng thời mình vẫn đang tiếp tục học tập để trau dồi kiến thức mỗi ngày. Mình rất yêu thích công nghệ, đam mê chia sẻ những kiến thức, thông tin hữu ích cho mọi người.

Tin tức nổi bật