Hướng dẫn sử dụng Docker Volume – Bài 8

Trong bài viết này, chúng ta sẽ tìm hiểu cách sử dụng Docker Volume để:

  • Giúp container lưu trữ dữ liệu lâu dài, không bị mất khi container bị xoá.
  • Dùng chung dữ liệu giữa nhiều container.
  • Kiểm tra xem dữ liệu còn tồn tại không sau khi container bị xoá.

Xem thêm:

Docker Registry và Docker Repo – Bài 6

Hướng dẫn Mapping Port trong Docker – Mở port (expose và publish) – Bài 7

1. Tại sao cần dùng Docker Volume?

Khi bạn không tạo volume, mọi dữ liệu được ghi trong container sẽ nằm trong hệ thống tạm của nó. Nếu bạn xoá container, toàn bộ dữ liệu bên trong sẽ bị mất.

Docker Volume giúp bạn lưu dữ liệu vào hệ thống file của host, độc lập với container. Dữ liệu vẫn tồn tại ngay cả khi container bị xoá.

2. Tạo volume

Tạo volume tên là website:

docker volume create website

Kiểm tra:

docker volume ls

Bạn sẽ thấy:

DRIVER    VOLUME NAME
 local     website

3. Tạo container và gắn volume bằng --mount

Chúng ta chạy một container Apache PHP, gắn volume vào đúng thư mục Apache mặc định (/var/www/html):

docker run -d \
  --name web01 \
  --mount source=website,target=/var/www/html \
  -p 4444:80 \
  php:apache

Giải thích:

  • source=website: tên volume đã tạo.
  • target=/var/www/html: nơi mount trong container.
  • -p 4444:80: mở cổng 80 của container ra cổng 4444 của host.

4. Thêm nội dung vào volume từ host

Tìm đường dẫn thực tế của volume:

docker volume inspect website

Bạn sẽ thấy trường "Mountpoint" trỏ đến thư mục thực tế trên máy chủ, ví dụ:

/var/lib/docker/volumes/website/_data

Gõ:

cd /var/lib/docker/volumes/website/_data

Tạo file:

echo "<h1>Hello from Docker Volume</h1>" > index.html

5. Truy cập container từ trình duyệt

Giả sử máy bạn có IP 192.168.1.100. Truy cập:

http://192.168.1.100:4444

Bạn sẽ thấy dòng chữ: Hello from Docker Volume.

6. Chạy container thứ 2 dùng chung volume

Chúng ta tạo container thứ hai dùng cùng volume website:

docker run -d \
  --name web02 \
  --mount source=website,target=/var/www/html \
  -p 7777:80 \
  php:apache

Truy cập:

http://192.168.1.100:7777

→ Bạn sẽ thấy cùng một nội dung như container đầu tiên.

7. Kiểm tra đồng bộ dữ liệu giữa container và volume

Bạn có thể thay đổi file index.html từ host hoặc từ bên trong container, và thấy kết quả phản ánh ngay:

Từ container:

docker exec -it web01 sh
echo "<h1>Updated from inside container</h1>" > /var/www/html/index.html
exit

Truy cập lại trình duyệt, bạn sẽ thấy nội dung đã được cập nhật.

8. Xoá container và kiểm tra dữ liệu

Dừng và xoá cả hai container:

docker stop web01 web02
docker rm web01 web02

Kiểm tra dữ liệu:

ls /var/lib/docker/volumes/website/_data

Dữ liệu vẫn còn!

9. So sánh gắn volume và không gắn volume

Tiêu chí Không gắn volume Gắn volume (best practice)
Dữ liệu sau khi xoá container Bị mất Vẫn còn nguyên
Dùng chung giữa nhiều container Không
Tốc độ đọc/ghi dữ liệu Tốt Tốt
Quản lý, backup dễ dàng Khó Dễ dàng, di chuyển, backup tốt

Kết luận

Trong bài thực hành hôm nay, chúng ta đã học:

  • Cách tạo volume bằng Docker.
  • Gắn volume vào container bằng --mount.
  • Kiểm tra dữ liệu tồn tại sau khi container bị xoá.
  • Chia sẻ dữ liệu giữa nhiều container thông qua volume.

Bài viết cùng chủ đề:

Docker Network là gì? Làm sao các container kết nối với nhau? – Bài 9

Hướng dẫn chạy MySQL và Adminer bằng Docker & Docker Compose – Bài 10

Nguyễn Tiến Trường

Mình viết về những điều nhỏ nhặt trong cuộc sống, Viết về câu chuyện những ngày không có em