Khái niệm:
- Bind Mount: Gắn một file hoặc thư mục trên máy host vào trong container.
- Khác với volume – lưu trữ nằm trong thư mục
/var/lib/docker/volumes.
So sánh Volume vs Bind Mount
| Tiêu chí | Volume | Bind Mount |
|---|---|---|
| Vị trí lưu trữ | /var/lib/docker/volumes/ | Vị trí bất kỳ trên máy host |
| Tạo bởi Docker | Có thể quản lý qua docker volume | Không quản lý qua docker volume |
| Dùng cho | Dữ liệu app, database | Gắn file cấu hình, code dev, v.v. |
| Ưu điểm | An toàn, tự quản lý | Linh hoạt, trực tiếp |
Cách tạo Bind Mount
Cách 1: Dùng -mount (cách mới)
docker container run -d \
--name nginx-bind-mount1 \
--mount type=bind,source=$(pwd)/target,destination=/app \
nginx
type=bind: kiểu là bind mountsource: đường dẫn thư mục/file trên hostdestination(hoặctarget): nơi mount trong container
kiểm tra
docker container inspect nginx-bind-mount1
Cách 2: Dùng v hoặc -volume (cách cũ)
docker container run -d \
--name nginx-bind-mount2 \
-v $(pwd)/target2:/app \
nginx
Thư mục target2 chưa tồn tại → Docker sẽ tự tạo.
Thực hành tạo và kiểm tra Bind Mount
Từ phía host:
touch target/file1.txt
Từ phía container:
docker exec -it nginx-bind-mount1 /bin/bash
cd /app
touch file2.txt
→ Trên host sẽ thấy target/file2.txt xuất hiện.
Gắn file cấu hình với Bind Mount
docker run -d \
--name nginx-bind-mount3 \
-v $(pwd)/nginx/nginx.conf:/etc/nginx/nginx.conf \
nginx
Use case phổ biến: chỉnh sửa
nginx.conftừ máy host → chỉ cần restart container để áp dụng thay đổi, không cần rebuild image.
Tổng kết
| Lệnh | Mục đích |
|---|---|
--mount type=bind,source=...,target=... | Gắn thư mục hoặc file vào container |
-v /path/on/host:/path/in/container | Gắn bind mount theo cách ngắn gọn |
docker inspect <container> | Kiểm tra bind mount |
docker exec -it <container> bash | Truy cập container kiểm tra nội dung |
Khi nào dùng Bind Mount?
- Phát triển phần mềm → đồng bộ code từ host
- Cấu hình dịch vụ (Nginx, Apache, MySQL config…)
- Gắn file cụ thể thay vì cả thư mục (khác với volume)