2015-12-18 27 views
20

Chúng ta có thể có một khối lượng dữ liệu trong Docker:Docker khối lượng dữ liệu vs thư mục máy chủ gắn

$ docker run -v /path/to/data/in/container --name test_container debian 
$ docker inspect test_container 
... 
Mounts": [ 
    { 
     "Name": "fac362...80535", 
     "Source": "/var/lib/docker/volumes/fac362...80535/_data", 
     "Destination": "/path/to/data/in/container", 
     "Driver": "local", 
     "Mode": "", 
     "RW": true 
    } 
] 
... 

Nhưng nếu cuộc sống khối lượng dữ liệu trong /var/lib/docker/volumes/fac362...80535/_data, là nó bất kỳ khác nhau từ việc các dữ liệu trong một thư mục đã được gắn bằng -v /path/to/data/in/container:/home/user/a_good_place_to_have_data?

Trả lời

18

khác với việc có dữ liệu trong thư mục được gắn bằng v/path/to/data/in/container:/home/user/a_good_place_to_have_data?

Đó là bởi vì, như đã đề cập trong "Mount a host directory as a data volume"

Thư mục host là, bởi bản chất của nó, host-phụ thuộc. Vì lý do này, bạn không thể gắn kết thư mục lưu trữ từ Dockerfile vì hình ảnh được tạo nên có thể di chuyển được. Thư mục lưu trữ sẽ không khả dụng trên tất cả các máy chủ tiềm năng.

Nếu bạn có một số dữ liệu liên tục mà bạn muốn chia sẻ giữa các vùng chứa hoặc muốn sử dụng từ các thùng chứa không liên tục, cách tốt nhất là tạo Vùng chứa dữ liệu có tên và sau đó lắp dữ liệu từ đó.

Bạn có thể kết hợp cả hai phương pháp:

docker run --volumes-from dbdata -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /dbdata 

Dưới đây chúng tôi đã đưa ra một container mới và gắn kết khối lượng từ dbdata container.
Sau đó, chúng tôi đã gắn một thư mục lưu trữ cục bộ là /backup.
Cuối cùng, chúng tôi đã chuyển một lệnh sử dụng tar để sao lưu nội dung của khối lượng dbdata thành tệp backup.tar bên trong thư mục /backup của chúng tôi. Khi lệnh hoàn tất và vùng chứa dừng lại, chúng tôi sẽ để lại bản sao lưu số lượng dbdata của chúng tôi.

+0

Bạn có thể làm rõ những gì tài liệu Docker nghĩa bởi đó thư mục chủ là * host-phụ thuộc *? Có quyền truy cập tập tin có nghĩa là bởi vì họ trong một số trường hợp là một nỗi đau để nhân rộng trên một máy chủ lưu trữ khi bạn di chuyển một container cộng với thư mục được gắn kết với một máy chủ lưu trữ? Ngoài ra sự khác biệt giữa khối lượng được đặt tên và thư mục được gắn kết là gì? Tôi hiểu rằng đặc biệt việc chia sẻ dữ liệu liên tục giữa nhiều vùng chứa là trường hợp sử dụng cho vùng chứa dữ liệu. Nhưng trong trường hợp dữ liệu liên tục chỉ liên quan đến một thùng chứa duy nhất tôi bị mất một chút :-). – PermaFrost

+1

@PermaFrost phụ thuộc vào máy chủ nghĩa là bạn không thể viết Dockerfile với đường dẫn khối từ máy chủ, vì Dockerfile có thể được xây dựng trên bất kỳ máy chủ nào, mỗi đặc điểm riêng của chúng: đường dẫn hợp lệ trên một máy chủ có thể không khả dụng trên máy chủ khác. Đó là lý do tại sao gắn một thư mục máy chủ là một hoạt động * runtime * (docker run), không phải là một thời gian biên dịch (docker build) – VonC

+2

@PermaFrost một khối lượng có tên là host độc lập và liên tục. Ngay cả đối với một thùng chứa chỉ, điều đó có nghĩa là tôi có thể xuất và khôi phục một ổ đĩa có tên trên bất kỳ máy chủ lưu trữ nào. Xem https://madcoda.com/2016/03/docker-named-volume-explained/ – VonC

1

Sự khác biệt giữa thư mục máy chủ và khối lượng dữ liệu ở chỗ Docker quản lý thứ hai bằng cách đặt nó vào thư mục $DOCKER-DATA-DIR/volumes (tên hoặc id được tạo ngẫu nhiên). Đó là bạn sẽ có được một chút tiện lợi.

Cả hai thư mục lưu trữ và khối lượng dữ liệu là các thư mục trên máy chủ. Cả hai đều phụ thuộc vào máy chủ. Bạn không thể tham chiếu một trong số chúng trong số Dockerfile; chỉ thị VOLUME tạo ra một khối lượng không tên (với id được tạo ngẫu nhiên) mỗi khi bạn khởi chạy vùng chứa mới và không thể tham chiếu đến một ổ đĩa hiện có.

*$DOCKER-DATA-DIR/var/lib/docker tại đây trừ khi bạn thay đổi giá trị mặc định.

3

Mặc dù khi sử dụng chúng cũng giống như vậy, với sự thay đổi duy nhất vị trí của thư mục, có sự khác biệt.

Volumes vs Bind Mounts

  • Với Bind núi, một tập tin hoặc thư mục trên máy chủ được gắn vào một container.Tệp hoặc thư mục được tham chiếu bởi đường dẫn đầy đủ hoặc tương đối của nó trên máy chủ.
  • Với Âm lượng, một thư mục mới được tạo trong thư mục lưu trữ của Docker trên máy chủ và Trình quản lý Docker quản lý nội dung của thư mục đó.

Volumes ưu điểm so với gắn kết ràng buộc:

  • Volumes được dễ dàng hơn để sao lưu hoặc di chuyển hơn gắn kết ràng buộc.
  • Bạn có thể quản lý các tập bằng lệnh Docker CLI hoặc API Docker.
  • Âm lượng hoạt động trên cả vùng chứa Linux và Windows.
  • Khối lượng có thể được chia sẻ an toàn hơn giữa nhiều vùng chứa.
  • Trình điều khiển âm lượng cho phép bạn lưu trữ tập trên máy chủ từ xa hoặc nhà cung cấp dịch vụ đám mây, để mã hóa nội dung của tập hoặc để thêm chức năng khác.
  • Nội dung của một tập mới có thể được điền trước bởi vùng chứa.

Volumes

Tạo và Docker quản lý. Bạn có thể tạo một khối lượng rõ ràng bằng cách sử dụng lệnh tạo bộ tạo docker hoặc Docker có thể tạo một khối lượng khi tạo vùng chứa hoặc dịch vụ.

Khi bạn tạo một ổ đĩa, nó được lưu trữ trong một thư mục trên máy chủ lưu trữ Docker. Khi bạn gắn ổ đĩa vào một thùng chứa, thư mục này là những gì được gắn vào vùng chứa. Đây là tương tự như cách gắn kết gắn kết hoạt động, ngoại trừ khối lượng đó được quản lý bởi Đế và được tách biệt với chức năng chính của máy chủ .

Một khối lượng nhất định có thể được đặt đồng thời vào nhiều vùng chứa. Khi không có vùng chứa đang chạy đang sử dụng âm lượng, âm lượng vẫn là có sẵn cho Docker và không bị xóa tự động. Bạn có thể xóa khối lượng không sử dụng bằng cách sử dụng phần mở rộng của trình chỉnh sửa docker.

Khi bạn lắp một ổ đĩa, nó có thể được đặt tên hoặc ẩn danh. Ẩn danh khối lượng không được đặt tên rõ ràng khi được gắn lần đầu tiên vào vùng chứa, vì vậy Docker cung cấp cho họ một tên ngẫu nhiên là được đảm bảo là duy nhất trong một máy chủ Docker đã cho. Bên cạnh tên, có tên và khối lượng ẩn danh hoạt động theo cùng một cách.

Khối lượng cũng hỗ trợ sử dụng trình điều khiển âm lượng, cho phép bạn lưu trữ dữ liệu của bạn trên máy chủ từ xa hoặc nhà cung cấp dịch vụ đám mây, trong số các khả năng khác .

enter image description here

Bind gắn kết

sẵn kể từ những ngày đầu của Docker. Gắn kết gắn kết có giới hạn chức năng so với khối lượng. Khi bạn sử dụng gắn kết gắn kết, một tệp hoặc thư mục trên máy chủ được gắn vào vùng chứa. Tập tin hoặc thư mục được tham chiếu bởi đường dẫn đầy đủ của nó trên máy chủ. Tệp tin hoặc thư mục không cần tồn tại trên máy chủ Docker. Nó được tạo theo yêu cầu nếu nó chưa tồn tại. Gắn kết gắn kết là rất hiệu suất, nhưng chúng dựa vào hệ thống tệp của máy chủ lưu trữ có cấu trúc thư mục cụ thể là . Nếu bạn đang phát triển các ứng dụng Docker mới, hãy cân nhắc sử dụng tập hợp được đặt tên thay thế. Bạn không thể sử dụng lệnh CLI Docker để quản lý trực tiếp gắn kết gắn kết.

enter image description here

Ngoài ra còn có tmpfs mounts.
tmpfs gắn kết

Một tmpfs gắn kết không được duy trì trên đĩa, hoặc trên máy chủ Docker hoặc trong một container. Nó có thể được sử dụng bởi một thùng chứa trong suốt đời của thùng chứa, để lưu trữ trạng thái không liên tục hoặc thông tin nhạy cảm . Ví dụ, nội bộ, dịch vụ swarm sử dụng tmpfs gắn kết để gắn kết bí mật vào vùng chứa của một dịch vụ.
enter image description here

tham khảo:
https://docs.docker.com/storage/

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