3.1 Cơ bản về gắn volumes
Gắn volumes (volumes) vào containers — đây là một trong những tính năng quan trọng nhất của Docker, cho phép lưu trữ dữ liệu bên ngoài containers, đảm bảo lưu trữ lâu dài và khả năng truy cập. Volumes có thể được sử dụng cho nhiều mục đích khác nhau, bao gồm lưu trữ các file cấu hình, cơ sở dữ liệu, logs và các dữ liệu quan trọng khác. Trong bài giảng này, chúng ta sẽ tìm hiểu cách gắn volumes vào containers, và đưa ra ví dụ thực tế.
Cơ bản về gắn volumes
Volumes, như mình đã nói, tồn tại độc lập với vòng đời của containers. Chúng được lưu trữ trong một thư mục đặc biệt trên máy chủ mẹ và có thể được gắn vào bất kỳ container nào.
Lệnh để gắn volumes
Volumes được gắn vào containers bằng cách sử dụng các tham số -v
hoặc --mount
khi khởi chạy container.
3.2 Tham số -v
Ví dụ sử dụng tham số -v
1. Gắn volume vào container
Tạo volume và gắn nó vào container:
Tạo volume:
docker volume create my_volume
Chạy container với volume đã gắn:
docker run -d --name my_container -v my_volume:/app nginx
Trong ví dụ này, volume my_volume
được gắn vào thư mục /app
của container my_container
2. Gắn nhiều volume
Bạn có thể gắn nhiều volume vào một container:
docker run -d --name my_container -v volume1:/app/data -v volume2:/app/logs nginx
Trong ví dụ này, volume volume1
được gắn vào thư mục /app/data
, còn volume volume2
được gắn vào thư mục /app/logs
.
3.3 Tham số --mount
Tham số --mount
cung cấp cách chi tiết hơn để gắn volume, với khả năng chỉ định các tham số khác nhau.
1. Gắn volume sử dụng --mount
docker run -d --name my_container --mount source=my_volume,target=/app nginx
Ví dụ này tương tự như ví dụ trước với -v
, nhưng sử dụng cú pháp chi tiết hơn.
2. Gắn với các tham số bổ sung
docker run -d --name my_container --mount source=my_volume,target=/app,readonly nginx
Trong ví dụ này, volume được gắn ở chế độ chỉ đọc (readonly
).
3.4 Các ví dụ thực tế
Ví dụ 1: Sử dụng volumes cho cơ sở dữ liệu
Tạo và sử dụng volume để lưu trữ dữ liệu của cơ sở dữ liệu.
Tạo volume:
docker volume create db_data
Chạy container cơ sở dữ liệu với volume đã được gắn kết:
docker run -d --name postgres -e POSTGRES_PASSWORD=mysecretpassword -v
db_data:/var/lib/postgresql/data postgres
Trong ví dụ này, dữ liệu của cơ sở dữ liệu PostgreSQL được lưu trữ trong volume db_data
.
Ví dụ 2: Sử dụng volumes cho các file cấu hình
Tạo một volume để lưu trữ các file cấu hình và gắn kết nó vào container.
Tạo volume:
docker volume create config_data
Sao chép các file cấu hình vào volume:
docker run --rm -v config_data:/app busybox sh -c "echo 'dữ liệu cấu hình' > /app/config.txt"
Chạy container sử dụng volume cho các file cấu hình:
docker run -d --name my_app -v config_data:/app/config nginx
Trong ví dụ này, các file cấu hình được lưu trong volume config_data
, được gắn kết vào thư mục /app/config
của container.
Ví dụ 3: Logs của container
Tạo một volume để lưu trữ logs của container và gắn kết nó vào container.
Tạo volume:
docker volume create logs_data
Chạy container với volume được gắn kết cho logs:
docker run -d --name my_app -v logs_data:/var/log/nginx nginx
Trong ví dụ này, logs của Nginx được lưu trong volume logs_data
.
3.5 Kiểm tra nội dung volume
Bạn có thể kiểm tra nội dung của volume bằng cách gắn nó vào một container tạm thời.
Ví dụ
Chạy container tạm thời với volume được gắn:
docker run --rm -v my_volume:/app busybox ls /app
Ví dụ này sẽ hiển thị nội dung của volume my_volume
.
Xóa volume
Xóa một volume không còn được sử dụng nữa.
Ví dụ
Xóa volume:
docker volume rm my_volume
Nếu volume đang được sử dụng bởi container, Docker sẽ báo lỗi. Hãy đảm bảo các container đang sử dụng volume đã được dừng và xóa.
GO TO FULL VERSION