2016-01-15 25 views
28

Tôi đang cố gắng để đi sâu hơn trong sự hiểu biết của tôi về khối lượng Docker, và tôi đang gặp một thời gian khó khăn để tìm ra sự khác biệt/use-case của:là gì mục đích của VOLUME trong Dockerfile

  • lệnh docker volume create
  • các docker run -v /path:/host_path
  • các VOLUME entry trong file Dockerfile

tôi đặc biệt không hiểu những gì xảy ra nếu bạn đồng mbine mục nhập VOLUME với cờ -v.

Nếu ai đó hiểu rõ, hãy giải thích cho tôi!

Trả lời

23

Một khối lượng là một dữ liệu liên tục lưu trữ trong /var/lib/docker/volumes/...

  • Bạn có thể khai báo nó trong một Dockerfile, có nghĩa là mỗi lần một container được ghi từ các hình ảnh, âm lượng được tạo ra (trống) , ngay cả khi bạn không có bất kỳ tùy chọn -v nào.

  • Bạn có thể khai báo trên thời gian chạy docker run -v [host-dir:]container-dir.
    kết hợp hai (VOLUME + docker run -v) có nghĩa là bạn có thể gắn kết các nội dung của một thư mục máy chủ vào khối lượng của bạn vẫn kiên trì bởi các container trong /var/lib/docker/volumes/...

  • docker volume create tạo ra một khối lượng mà không cần phải xác định một Dockerfile và xây dựng một hình ảnh và chạy một container. Nó được sử dụng để nhanh chóng cho phép các thùng chứa khác gắn kết khối lượng nói trên.

Nếu bạn đã khăng khăng một số nội dung trong một thể tích, nhưng kể từ đó xóa các container (mà theo mặc định không xóa khối lượng liên quan của nó, trừ khi bạn đang sử dụng Docker rm -v), bạn có thể tái đính kèm nói khối lượng đến một container mới (tuyên bố cùng một khối lượng).

Xem "Docker - How to access a volume not attached to a container?".
Với khối lượng docker được tạo, điều này rất dễ dàng để gắn lại một ổ đĩa được đặt tên cho vùng chứa.

docker volume create --name aname 
docker run -v aname:/apath --name acontainer 
... 
# modify data in /apath 
... 
docker rm acontainer 

# let's mount aname volume again 
docker run -v aname:/apath --name acontainer 
ls /apath 
# you find your data back! 
+1

Giả sử bạn sử dụng 'Dockerfile' với cờ' VOLUME' và '-v/path:/host_path /'. Nội dung của 'VOLUME' sẽ bị ghi đè bởi nội dung của'/host_path/'? – radium226

+0

@ radium226 yes. – VonC

+0

Nhờ bạn @VonC, tôi nghĩ rằng tôi nhận được nó :) Và nếu bạn làm một 'docker khối lượng tạo - tên my_volume' theo sau là một' docker run - volume-from my_volume', làm thế nào để bạn biết nơi mountpoint sẽ được? – radium226