2015-02-14 14 views
13

Hãy lấy một ví dụ.Dockerfile: tìm hiểu hướng dẫn VOLUME

Sau đây là VOLUME hướng dẫn cho hình ảnh nginx:

VOLUME ["/etc/nginx/sites-enabled", "/etc/nginx/certs", "/etc/nginx/conf.d", "/var/log/nginx", "/var/www/html"] 

Dưới đây là những câu hỏi của tôi:

  1. Khi bạn bắt đầu container, sẽ các thư mục này hiển thị trên máy chủ của tôi không? Và khi tôi ngừng container, các thư mục sẽ ở lại?

  2. Nếu một số (hoặc tất cả) thư mục này đã tồn tại trong máy chủ của tôi, điều gì sẽ xảy ra? Ví dụ: giả sử hình ảnh đi kèm với tệp cấu hình mặc định trong thư mục /etc/nginx của vùng chứa và tôi cũng có tệp cấu hình trong phạm vi /etc/nginx trên máy chủ của mình. Khi vùng chứa bắt đầu, tệp nào trong số những tệp này sẽ được ưu tiên?

  3. Sự khác nhau chính giữa -v /host/dir:container/dirVOLUME là gì?

Tài liệu tham khảo:

Trả lời

16

khối lượng của một thùng chứa chỉ là thư mục vào ngày e máy chủ bất kể phương thức chúng được tạo bởi. Nếu bạn không chỉ định thư mục trên máy chủ lưu trữ, Docker sẽ tạo thư mục mới cho ổ đĩa, thường dưới /var/lib/docker/vfs.

Tuy nhiên khối lượng đã được tạo ra, thật dễ dàng để tìm nó ở đâu trên máy chủ bằng cách sử dụng lệnh docker inspect ví dụ:

$ ID=$(docker run -d -v /data debian echo "Data container") 
$ docker inspect -f {{.Mounts}} $ID 
[{0d7adb21591798357ac1e140735150192903daf3de775105c18149552a26f951 /var/lib/docker/volumes/0d7adb21591798357ac1e140735150192903daf3de775105c18149552a26f951/_data /data local true }] 

Chúng ta có thể thấy rằng Docker đã tạo ra một thư mục cho khối lượng tại /var/lib/docker/volumes/0d7adb21591798357ac1e140735150192903daf3de775105c18149552a26f951/_data.

Bạn có thể tự do điều chỉnh/thêm/xóa các tập tin trong thư mục này từ máy chủ, nhưng lưu ý rằng bạn có thể cần phải sử dụng sudo cho phép.

Docker sẽ chỉ xóa các thư mục khối lượng trong hai trường hợp:

  • Nếu tùy chọn --rm được trao cho docker run, bất kỳ khối lượng sẽ bị xóa khi container thoát
  • Nếu một container bị xóa với docker rm -v CONTAINER, bất kỳ khối lượng sẽ bị xóa.

Trong cả hai trường hợp, khối lượng sẽ chỉ bị xóa nếu không có vùng chứa nào khác đề cập đến chúng. Khối lượng được ánh xạ tới các thư mục lưu trữ cụ thể (cú pháp -v HOST_DIR:CON_DIR) sẽ không bao giờ bị xóa bởi Docker. Tuy nhiên, nếu bạn loại bỏ các thùng chứa cho một khối lượng, kế hoạch đặt tên có nghĩa là bạn sẽ có một thời gian khó tìm ra thư mục có chứa khối lượng.

câu hỏi Vì vậy, cụ thể:

  1. Có và vâng, với hãy cẩn thận ở trên.
  2. Mỗi khối lượng được quản lý của Docker nhận một thư mục mới trên máy chủ
  3. Hướng dẫn VOLUME giống hệt với -v mà không chỉ định thư mục lưu trữ. Khi thư mục lưu trữ được chỉ định, Docker không tạo bất kỳ thư mục nào cho ổ đĩa, sẽ không sao chép trong tập tin từ hình ảnh và sẽ không bao giờ xóa ổ đĩa (docker rm -v CONTAINER sẽ không xóa khối lượng được ánh xạ tới thư mục lưu trữ do người dùng chỉ định).

biết thêm thông tin ở đây:

http://container-solutions.com/2014/12/understanding-volumes-docker/

+1

Well done! Ngoài bài viết của bạn, tôi đã tìm thấy các cuộc thảo luận về khối lượng tại [Container42] (http://container42.com/2014/11/03/docker-indepth-volumes/) từ cpuguy83 (Nhà phát triển tại Docker) và thảo luận chi tiết từ [Mark Lamourine] (http://cloud-mechanic.blogspot.de/2014/10/storage-concepts-in-docker.html) đáng kinh ngạc có giá trị. –

+0

Câu trả lời hay, rất hữu ích. Chỉ cần đầu ra của 'kiểm tra docker' thay đổi sau khi docker 1.8. Bây giờ bạn có thể tìm thấy thông tin về khối lượng qua '$ docker inspect -f '{{.Config.Volumes}}' $ ID' và' $ docker inspect -f '{{.Mounts}}' $ ID' – gengmao

+0

@gengmao Cập nhật , cảm ơn. –

Các vấn đề liên quan