2016-09-15 43 views
7

Tôi cần tạo hình ảnh Docker (và do đó là vùng chứa từ hình ảnh đó) sử dụng các tệp lớn (có chứa dữ liệu di truyền, do đó đạt kích thước ~ 10GB).Các tệp lớn trong vùng chứa Docker

Tôi phải tối ưu hóa mức sử dụng của mình như thế nào? Tôi có nên đưa chúng vào thùng chứa (chẳng hạn như COPY large_folder large_folder_in_container) không? Có cách nào tốt hơn để tham khảo các tệp như vậy không? Vấn đề là nó có vẻ kỳ lạ với tôi để đẩy container đó (mà sẽ là> 10GB) trong kho riêng của tôi. Tôi tự hỏi nếu có một cách để gắn một loại khối lượng vào thùng chứa, mà không đóng gói tất cả những GB với nhau.

Cảm ơn bạn.

Trả lời

5

Tôi có nên đưa chúng vào vùng chứa (chẳng hạn như COPY large_folder large_folder_in_container) không?

Nếu bạn làm như vậy, điều đó sẽ bao gồm chúng trong ảnh, không phải là container: bạn có thể khởi động 20 container từ hình ảnh đó, không gian đĩa thực tế sử dụng vẫn sẽ là 10 GB.

Nếu bạn tạo một hình ảnh khác từ hình ảnh đầu tiên của bạn, hệ thống tệp lớp sẽ tái sử dụng các lớp từ hình ảnh gốc và hình ảnh mới sẽ vẫn là "chỉ" 10GB.

+0

Điều đó rất hữu ích. Nhưng tôi lo lắng về sự lúng túng của hệ thống khi tôi đi và bật lên hình ảnh từ registry (để chạy một container). Tôi đang cố gắng để phù hợp với điều này vào một đường ống CI/CD, mà sẽ yêu cầu (trong giai đoạn triển khai) để tải container trên một thể hiện OpenStack mới (thông qua Packer). Vì ví dụ này luôn khác nhau, điều này sẽ yêu cầu mỗi khi tôi đi qua đường dẫn CD để tải một thùng chứa lớn vào cá thể OpenStack mới được tạo ra (không có bất kỳ lớp nào được tải trước đó), và do đó di chuyển 10GB ở mọi cam kết. Đây có phải là giải pháp tốt nhất mà người ta có thể tìm thấy không? – Eleanore

+0

@Eleanore Khi hình ảnh đã được tải vào sổ đăng ký docker cục bộ của nô lệ, vùng chứa sẽ bắt đầu ngay lập tức. Nhưng nếu hình ảnh thay đổi, điều tốt nhất là xây dựng từng bước một hình ảnh mới dựa trên hình ảnh trước đó và chỉ bao gồm các thay đổi. Điều đó đang được nói, nếu * tất cả * 10GB thay đổi từ một hình ảnh đến tiếp theo ... bạn có một vấn đề thực sự. – VonC

4

Có cách nào tốt hơn để tham chiếu các tệp như vậy không?

Nếu bạn đã có cách nào đó để phân phối dữ liệu, tôi sẽ sử dụng "gắn kết gắn kết" để đính kèm âm lượng vào các vùng chứa.

docker run -v /path/to/data/on/host:/path/to/data/in/container <image> ... 

Bằng cách đó bạn có thể thay đổi hình ảnh và bạn sẽ không phải tải xuống lại bộ dữ liệu lớn mỗi lần.

Nếu bạn muốn sử dụng registry để phân phối các bộ dữ liệu lớn, nhưng muốn quản lý thay đổi dữ liệu cài đặt riêng, bạn có thể sử dụng một container khối lượng dữ liệu với một Dockerfile như thế này:

FROM scratch 
COPY dataset /dataset 
VOLUME /dataset 

Từ vùng chứa ứng dụng của bạn, bạn có thể đính kèm khối lượng đó bằng cách sử dụng:

docker run -d --name dataset <data volume image name> 
docker run --volumes-from dataset <image> ... 

Dù bằng cách nào, tôi nghĩ rằng https://docs.docker.com/engine/tutorials/dockervolumes/ là những gì bạn muốn.

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