5.1 Ý tưởng về bind mounts
Mount thư mục của host vào container bằng cách sử dụng bind mounts là một tính năng mạnh mẽ của Docker, cho phép container sử dụng trực tiếp các file và thư mục có sẵn trong hệ thống host. Điều này đặc biệt hữu ích khi phát triển, kiểm tra và cấu hình, khi cần sử dụng các file cục bộ mà không cần copy chúng vào container. Ở bài giảng này, tụi mình sẽ tìm hiểu cách sử dụng bind mounts, đưa ra các ví dụ và best practices dành cho nó.
Bind mounts cho phép bạn mount những thư mục hoặc file cụ thể từ hệ thống của host vào trong container. Nó khác với volumes, vốn được quản lý bởi Docker và được lưu trữ trong một thư mục đặc biệt.
Lợi ích của việc sử dụng bind mounts
- Truy cập trực tiếp vào file của host: Container có thể sử dụng và chỉnh sửa trực tiếp các file trên host.
- Tiện lợi khi phát triển: Devs có thể chỉnh sửa file trên host và thấy sự thay đổi đó trong container ngay lập tức.
- Linh hoạt: Bất kỳ thư mục nào trên host đều có thể được mount vào container.
Câu lệnh để mount bind mounts
Bind mounts được mount bằng cách sử dụng các tham số -v
hoặc --mount
khi khởi chạy container.
5.2 Ví dụ sử dụng tham số -v
1. Mount thư mục của host vào container
Ví dụ đơn giản về việc mount thư mục của host vào container:
docker run -d --name my_container -v /path/on/host:/path/in/container nginx
Trong ví dụ này, thư mục /path/on/host
trên host được mount vào thư mục /path/in/container
bên trong container nginx.
2. Mount file của host vào container
Bạn cũng có thể mount các file riêng lẻ:
docker run -d --name my_container -v /path/on/host/config.conf:/etc/nginx/nginx.conf nginx
Trong ví dụ này, file cấu hình config.conf
trên host được mount thành file cấu hình nginx.conf
bên trong container.
5.3 Ví dụ về việc sử dụng tham số --mount
Tham số --mount
cung cấp một cách chi tiết hơn để mount các thư mục bind với khả năng chỉ định các tham số khác nhau.
1. Mount thư mục sử dụng --mount
docker run -d --name my_container --mount type=bind,source=/path/on/host,target=/path/in/container nginx
Ví dụ này tương tự với ví dụ trước sử dụng -v
, nhưng dùng cú pháp chi tiết hơn.
2. Mount ở chế độ chỉ đọc
docker run -d --name my_container --mount
type=bind,source=/path/on/host,target=/path/in/container,readonly nginx
Trong ví dụ này, thư mục được mount trong chế độ chỉ đọc, điều này ngăn không cho sửa đổi các tệp trong container.
5.4 Các ví dụ thực tế
Để phát triển ứng dụng web, bạn có thể mount thư mục chứa code nguồn từ host vào container.
Tạo thư mục chứa code nguồn trên host:
mkdir -p ~/my_web_app
echo "Xin chào, Thế giới!" > ~/my_web_app/index.html
Chạy container với việc mount thư mục:
docker run -d --name web_dev -v ~/my_web_app:/usr/share/nginx/html nginx
Bây giờ bất kỳ thay đổi nào trong thư mục ~/my_web_app trên host sẽ được phản ánh ngay lập tức trong container.
Ví dụ 2: Sử dụng file cấu hình
Bạn có thể mount file cấu hình từ thư mục trên host vào container.
Tạo file cấu hình trên host:
echo "user www-data;" > ~/nginx.conf
echo "worker_processes auto;" >> ~/nginx.conf
Chạy container với việc mount file cấu hình:
docker run -d --name nginx_custom -v ~/nginx.conf:/etc/nginx/nginx.conf nginx
Trong ví dụ này, file cấu hình Nginx trên host được sử dụng bên trong container.
5.5 Kiểm tra các thư mục và tệp đã mount
Bạn có thể kiểm tra nội dung của các thư mục và tệp đã mount bằng cách sử dụng lệnh docker exec để thực thi các lệnh bên trong container.
Ví dụ
Kiểm tra nội dung thư mục:
docker exec -it my_container ls /path/in/container
Kiểm tra nội dung tệp:
docker exec -it my_container cat /path/in/container/config.conf
Xóa các thư mục bind
Các thư mục bind không được Docker quản lý trực tiếp, do đó việc xóa chúng được thực hiện ở cấp hệ thống tệp của host.
Ví dụ
Xóa thư mục bind trên host:
rm -r /path/on/host
GO TO FULL VERSION