Trong Dockerfile, VOLUME là một chỉ dẫn được sử dụng để khai báo các thư mục dữ liệu (volumes) trong container Docker. Chỉ thị này cho phép bạn định nghĩa các thư mục trong container mà bạn muốn gắn kết với các thư mục hoặc thiết bị khác trên host machine hoặc các container khác.
Cú pháp của VOLUME trong Dockerfile như sau:
VOLUME <đường_dẫn>
- <đường_dẫn>: Đường dẫn tới thư mục trong container muốn khai báo là volume.
Khi bạn chạy container từ image đã xây dựng, bạn có thể sử dụng các tùy chọn -v hoặc –mount của lệnh docker run để gắn kết các thư mục hoặc thiết bị trên host machine với các volumes đã được định nghĩa bằng VOLUME trong Dockerfile.
Ví dụ, để khai báo một volume trong Dockerfile, bạn có thể thêm dòng sau:
VOLUME /app/data
Khi chạy container, bạn có thể gắn kết thư mục /path/to/host/data trên host machine với volume /app/data trong container bằng cách sử dụng -v hoặc –mount:
docker run -v /path/to/host/data:/app/data tên_image
Lưu ý rằng khi sử dụng VOLUME trong Dockerfile, Docker sẽ tự động tạo các volumes tương ứng khi chạy container, nếu chúng chưa tồn tại. Các thay đổi trong các volumes này sẽ được lưu giữ ngay cả sau khi container dừng lại và được truy cập qua các container khác trong cùng một host machine.
VOLUME cũng có thể được sử dụng trong Docker Compose để định nghĩa các volumes trong file compose.
Các bước
- Tạo một image với VOLUME
- Tìm volume đã được tạo
- Mount thử volume để kiểm tra
Tạo một image với VOLUME
Dockerfile
FROM nginx:alpine LABEL maintainer="hocdevops" VOLUME /myvol CMD [ "nginx","-g","daemon off;" ]
Build image Docker
$ docker build -t volume:v1 .
Tạo container dựa trên image volume:v1
$ docker container run --rm -d --name volume-test volume:v1
Tìm size được tạo volume
Kiểm tra tên của container
$ docker container inspect -f '' volume-test ed09456a448934218f03acbdaa31f465ebbb92e0d45e8284527a2c538cc6b016
Xem list các volume
$ docker volume ls DRIVER VOLUME NAME local ed09456a448934218f03acbdaa31f465ebbb92e0d45e8284527a2c538cc6b016
Bạn sẽ thấy volume đã được tạo.
Đường dẫn mount volume trong server
$ docker container inspect -f '' volume-test /var/lib/docker/volumes/ed09456a448934218f03acbdaa31f465ebbb92e0d45e8284527a2c538cc6b016/_data
Thử mount volume
Tạo một tập tin trong thư mục này
$ touch /var/lib/docker/volumes/ed09456a448934218f03acbdaa31f465ebbb92e0d45e8284527a2c538cc6b016/_data/mytestfile.txt
Kiểm tra tệp có trong container đang chạy không
$ docker container exec -it volume-test ls myvol