Docker cho khoa học dữ liệu


7

Gần đây tôi bắt đầu đọc các bài viết về Docker.
Đối với tôi, trong khoa học dữ liệu, Docker rất hữu ích vì:

1) Bạn có một môi trường hoàn toàn khác, bảo vệ bạn trước các vấn đề về thư viện và phụ thuộc.

2) Nếu ứng dụng của bạn sửa đổi, ví dụ: cơ sở dữ liệu của công ty bạn, trước tiên bạn muốn đảm bảo rằng mã hoạt động tốt và sẽ không có hậu quả xấu trên cơ sở dữ liệu. Vì vậy, bạn sử dụng Docker để kiểm tra mã của bạn trước.

những câu hỏi của tôi:

  • Tôi có đúng không nếu tôi nói rằng chỉ có lý do thứ hai là về quyền anh cát? Lý do đầu tiên không liên quan gì đến quyền anh cát, phải không?

  • Có những lý do khác tại sao Docker hữu ích trong khoa học dữ liệu ??

  • Tôi không tìm thấy nhiều tài liệu nghiên cứu thú vị về Docker cho khoa học dữ liệu. Bạn có biết một số người nổi tiếng?


Cuối cùng, kết hợp và trả lời có lẽ tất cả các câu hỏi của bạn và đã mô tả sâu về phần bảo mật + tài nguyên từ các hội nghị và trường hợp sử dụng về lý do và cách thức Nhà khoa học dữ liệu sử dụng các thùng chứa. Xin vui lòng cho tôi biết nếu bạn cần phiên bản chi tiết hơn :)
n1tk

Câu trả lời:


4

Thay vì tập trung vào thuật ngữ công nghệ, sẽ cung cấp câu trả lời khái quát và sử dụng thuật ngữ container container.

Các container chỉ chạy những gì nó phải chạy, giả sử mọi thứ không xác định là không đáng tin cậy, vì vậy những gì chỉ tồn tại trong container chỉ trong vòng đời của container, vì vậy sửa đổi mã trong cơ sở dữ liệu để kiểm tra sẽ là cách tiếp cận tương tự trong VM (hộp cát) hoặc container (docker) và sự khác biệt lớn nhất là mức tiêu thụ tài nguyên kn và thời gian để cung cấp VM so với việc quay các container / pod trong vài giây cho ứng dụng.

Thêm chi tiết:

Part1_ Từ quan điểm ứng dụng

Các container rất quan trọng khi đến với thế giới khoa học dữ liệu từ các điểm sau:

  • Giảm thiểu các phiên bản thư viện xung đột cho các dự án phát triển khác nhau (mỗi dự án có container / pod riêng để chạy).
  • Tính nhất quán giữa các môi trường và nhà phát triển đối với các tiêu chí thiết kế cụ thể.
  • Tạo mẫu nhanh với Edge Node theo yêu cầu.

  • Tránh phải cài đặt lại mọi thứ trên phần cứng mới sau khi làm mới hoặc thất bại.

  • Tính di động của môi trường tính toán của bạn, phát triển trong máy của bạn và nếu bạn cần nhiều tài nguyên hơn như CPU, RAM hoặc GPU, bạn có thể chuyển môi trường của mình sang đám mây, cụm mạnh mẽ, máy mạnh mẽ, nhóm container có thể được sắp xếp với Kubernetes hoặc cụm Dockerized được gọi là Swarm .
  • Tối đa hóa sự rõ ràng hợp tác giữa các nhóm. Thư viện nhất quán, bộ kết quả, vv
  • Mở rộng quyền tự chủ / nhanh nhẹn tại chỗ lên quy mô và tầm với của đám mây.
  • Không gian làm việc của dự án được cung cấp bởi các container Docker để kiểm soát cấu hình môi trường. Bạn có thể cài đặt các gói mới hoặc chạy các tập lệnh dòng lệnh trực tiếp từ thiết bị đầu cuối tích hợp.
  • Tài nguyên được sử dụng bởi các container rất ít so sánh với VM hoặc Bare metal ... bạn có thể có nhiều container chạy trong VM hoặc Bare metal, vì vậy điều này sẽ giúp giảm đáng kể chi phí cấp phép cho HĐH và các dự án / ứng dụng sẽ mở rộng dựa trên tài nguyên cần thiết và không phải tài nguyên đầy đủ của máy chủ lưu trữ (ở đây cần lưu ý: bạn sẽ chạy nhiều ứng dụng / mô hình trong một máy khi sử dụng các container so sánh không có container, bạn sẽ sử dụng toàn bộ tài nguyên máy cho 1 ứng dụng / mô hình duy nhất và điều này gây lãng phí tài nguyên. quay vòng nhiều nhóm / bộ chứa (ứng dụng / mô hình trên toàn cụm và với chi phí không bằng so với máy ảo mà bạn trả cho HĐH của mỗi máy chủ và bạn chạy tất cả tài nguyên cho tác vụ đó).
  • Thay vào đó, dễ dàng có hình ảnh mới với các gói mới được cài đặt và chia sẻ với mọi người để xử lý các môi trường ảo thành VM và xung đột các gói và nhiều thứ khác (muốn thấy các môi trường ảo được chuyển từ cách tiếp cận truyền thống sang container, điều đó sẽ tốt cải thiện và sẽ giúp rất nhiều cho các nhà khoa học dữ liệu bỏ qua cấu hình của từng dự án riêng lẻ với tất cả các xung đột và kích hoạt / hủy kích hoạt sau đó tìm kiếm các yêu cầu khi đưa vào sản xuất khi với các thùng chứa tất cả những gì bạn cần là một tệp cấu hình, đây là quan điểm của tôi từ những gì tôi thấy hàng ngày trong thế giới Khoa học dữ liệu).
  • Nền tảng độc lập cơ sở hạ tầng cho phép các nhà khoa học dữ liệu chạy các ứng dụng phân tích trên cơ sở hạ tầng được tối ưu hóa tốt nhất cho các ứng dụng
  • Trao quyền cho các nhà khoa học dữ liệu để xây dựng các mô hình với các công cụ và gói phù hợp nhất cho nghiên cứu mà không phải lo lắng về xung đột ứng dụng và môi trường.
  • Khả năng sinh sản nghiên cứu quan trọng nhất: SCALE được cung cấp bởi các container, bạn dễ dàng mở rộng quy mô với các container và sẽ giống hệt nhau trên tất cả các môi trường và bạn không quan tâm đến HĐH máy chủ, đảm bảo lặp lại phân tích và nghiên cứu với các container bất biến và loại bỏ các vấn đề với các môi trường khác nhau
  • Hợp tác an toàn: Bảo mật tích hợp trong nền tảng và vòng đời cho phép cộng tác mà không có nguy cơ giả mạo và toàn vẹn dữ liệu (chi tiết hơn trong Phần 2 & 3.

Ở đây có Cloudera với Cloudera Data Science Workbench và Anaconda với Anaconda Enterprise, cả hai đều sử dụng container để có thể mang lại kết quả nhanh chóng cho doanh nghiệp và triển khai dễ dàng các mô hình từ dev đến QA và cuối cùng là sản xuất.

Tại sao tuyên bố cuối cùng quan trọng? là có tính di động từ dev đến prod mà không có bất kỳ thay đổi nào đối với môi trường và không có chi phí DevOps để vận hành.

Part2_ Từ quan điểm bảo mật

Một ưu điểm bảo mật nổi tiếng là bảo mật hệ điều hành máy chủ tách biệt với vùng chứa, nghĩa là được vá tách rời, vá hệ điều hành máy chủ sẽ không ảnh hưởng đến ứng dụng được chứa của bạn (chúng tôi gặp sự cố bao nhiêu lần khi chúng tôi vá hệ điều hành và ảnh hưởng đến ứng dụng và dịch vụ trong HĐH đó (đường dẫn, cổng, dịch vụ, v.v.)?

  • Ví dụ: nếu bạn có mã độc librarytrên ứng dụng / mã của mình thì phần mềm độc hại đó sẽ chỉ tồn tại trên vùng chứa đó trong thời gian container tồn tại, các container sẽ chạy như điểm cuối mọi lúc và không thấy trường hợp nào phát tán phần mềm độc hại vào mạng
  • giám sát một nút chứa là mạnh mẽ và bạn có thể đặt tiện ích bổ sung hoặc dịch vụ để giám sát các hành vi của ứng dụng hoặc nút và sẽ chỉ sao chép nút / vùng chứa mới và chỉ dựa trên tệp cấu hình.

So sánh VM với container: Với container là một câu chuyện khác, bạn hãy quan tâm đến HĐH tách biệt với container (container là nhiệm vụ riêng khi bảo mật được đặt ra).

Docker bảo mật cung cấp thông tin chi tiết của các điểm bảo mật chính.

Các tiêu chuẩn và tuân thủ Docker cung cấp một danh sách đầy đủ các tuân thủ và tiêu chuẩn bảo mật có sẵn cho các container.

"Docker container với một hồ sơ seccomp được chế tạo tốt (chặn các cuộc gọi hệ thống không mong muốn) cung cấp bảo mật gần tương đương với một trình ảo hóa."

Chia sẻ thư mục . Với các thùng chứa, bạn có thể chia sẻ thư mục bằng cách thiết lập gắn kết được chia sẻ và vì Docker / kernel thực thi các quyền tệp được sử dụng bởi các container, hệ thống khách không thể bỏ qua các hạn chế đó. Điều này rất quan trọng đối với người dùng và ứng dụng Khoa học dữ liệu vì trong công ty được sử dụng hầu hết dữ liệu nhạy cảm / bị hạn chế và có nhiều lớp bảo mật hoặc hạn chế, một cách tiếp cận để giải quyết vấn đề bảo mật này là sử dụng VDI hoặc VM với nhóm AD tại chỗ để hạn chế / chia sẻ quyền truy cập dữ liệu và trở nên có vấn đề và tốn kém để duy trì và phân bổ tài nguyên.

Khi bắt đầu gỡ lỗi các ứng dụng hoặc HĐH với tất cả các dịch vụ và nhật ký được tạo, tôi nghĩ rằng các container đang chiến thắng và phát triển theo cách tiếp cận NLP: Một tiện ích xử lý ngôn ngữ tự nhiên thử nghiệm (NLP) cũng được đưa vào, để đọc lại các tường thuật bảo mật.

Ở đây tôi sẽ trích dẫn Jianing Guo từ Google: VM được cập nhật và bảo mật đúng cách cung cấp cách ly mức quy trình áp dụng cho cả các ứng dụng thông thường cũng như khối lượng công việc của container và khách hàng có thể sử dụng các mô-đun bảo mật Linux để hạn chế hơn nữa bề mặt tấn công của bộ chứa. Ví dụ, Kubernetes, một hệ thống điều phối container cấp sản xuất nguồn mở, hỗ trợ tích hợp riêng với AppArmor, Seccomp và SELinux để áp đặt các hạn chế đối với các tòa nhà tiếp xúc với các container. Kubernetes cũng cung cấp công cụ bổ sung để hỗ trợ thêm cách ly container. PodSecurityPolicy cho phép khách hàng áp đặt các hạn chế đối với những gì khối lượng công việc có thể làm hoặc truy cập ở cấp độ Nút. Đối với khối lượng công việc đặc biệt nhạy cảm đòi hỏi cách ly mức VM,

Trên hết, cụm kubernetes có các tính năng bảo mật bổ sung:

  1. Sử dụng Bảo mật lớp vận chuyển (TLS) cho tất cả lưu lượng API
  2. Xác thực API
  3. Ủy quyền API
  4. Dễ dàng khắc phục các lỗi bảo mật và giảm thiểu tác động đến ứng dụng / môi trường so với VM hoặc kim loại Bare chuyên dụng.

Part3_ CIS điểm chuẩn cho container cứng : Docker & Kubernetes.

  1. Bước đầu tiên làm cho các container an toàn hơn là chuẩn bị máy chủ được lên kế hoạch sử dụng để thực hiện các khối lượng công việc có chứa. Bằng cách đảm bảo máy chủ chứa container và tuân theo các thực tiễn tốt nhất về bảo mật cơ sở hạ tầng sẽ xây dựng một nền tảng vững chắc và an toàn để thực hiện khối lượng công việc được đóng gói.

  2. Luôn cập nhật về cập nhật Docker, lỗ hổng trong phần mềm.

  3. Có một thư mục dành riêng cho các tệp liên quan đến Docker và phân bổ dung lượng vừa đủ để xem các container chạy (đường dẫn mặc định /var/lib/dockernhưng thay đổi thành điểm gắn kết khác và giám sát ở cấp độ HĐH bằng cách sử dụng auditdhoặc aide servicescho bất kỳ thay đổi hoặc kích thước / khối lượng công việc không mong muốn nào, hãy giữ nhật ký và cấu hình theo nhu cầu.

Lưu ý: Phần tốt nhất step 2là với máy ảo, bạn cần theo dõi nhiều vị trí hơn cho dự án khoa học dữ liệu của mình (thư viện ở vị trí khác nhau, nhiều phiên bản gói, vị trí / đường dẫn cho ngay cả python, chạy cron jobs or systemdđể đảm bảo một số quy trình chạy, ghi nhật ký tất cả các bản ghi vv nhưng với các thùng chứa là một điểm duy nhất cho tất cả các công việc này để chạy và chỉ giám sát một đường dẫn thay vì nhiều đường dẫn).

  1. Xác minh tất cả thời gian người dùng vào dockernhóm để bạn ngăn chặn unauthorized elevated accessvào hệ thống (Docker cho phép chia sẻ thư mục giữa máy chủ Docker và bộ chứa khách mà không giới hạn quyền truy cập của bộ chứa), vì vậy hãy xóa mọi người dùng không tin cậy khỏi dockernhóm và không tạo một ánh xạ của các thư mục nhạy cảm frim máy chủ để khối lượng container. Ở đây tôi sẽ nói sử dụng một người dùng riêng cho việc cài đặt và các tác vụ trong thùng chứa cụ thể "KHÔNG BAO GIỜ sử dụng rootcho các container chạy chỉ dành riêng PIDcho nhiệm vụ này (sẽ có quyền truy cập cao nhưng sẽ dựa trên nhiệm vụ, tôi sử dụng trọng lực cho cụm và khi cài đặt Tôi KHÔNG BAO GIỜ sử dụng root).

  2. Kiểm tra tất cả các hoạt động của Docker daemon (lưu ý rằng sẽ chiếm không gian các bản ghi trong "thế giới" được đóng gói, vì vậy hãy chuẩn bị phân vùng riêng với không gian phù hợp để giữ các bản ghi và cấu hình cần thiết (xoay và định kỳ để lưu trữ các bản ghi).

  3. Kiểm tra tất cả các tệp Docker và docker.service, trong vv, var và những gì khác có thể áp dụng được.

  4. Hạn chế tất cả các giao tiếp giữa các container, Liên kết các container cụ thể với nhau cần giao tiếp (tốt nhất sẽ là tạo một mạng tùy chỉnh và chỉ tham gia các container cần giao tiếp với mạng tùy chỉnh đó). Cách tiếp cận cứng này sẽ ngăn chặn việc tiết lộ thông tin ngoài ý muốn và không mong muốn cho các container khác.

  5. Tất cả các ứng dụng trong cơ sở hạ tầng được đóng gói phải được định cấu hình hoặc ít nhất là phải có ứng dụng Encryp All Sensitive Information(điều này rất quan trọng đối với Nhà khoa học dữ liệu vì hầu hết thời gian chúng tôi đăng nhập vào nền tảng để lấy dữ liệu, kể cả sensitive datacho công ty.

  6. Có tùy chọn để mã hóa tất cả thông tin nhạy cảm trong quá cảnh.

  7. Chỉ sử dụng cụ thể được phê duyệt Ports, Protocols and Services, VM có bề mặt mở hơn khi chạy ứng dụng / dự án, với các thùng chứa bạn chỉ định những gì sẽ được sử dụng và không thắc mắc cho tất cả các cổng, protocls và dịch vụ khác chạy ở cấp độ HĐH để bảo vệ hoặc giám sát, điều này không giảm thiểu "attack surface".

  8. Thông tin nhạy cảm được lưu trữ trên các hệ thống được mã hóa ở phần còn lại và không yêu cầu cơ chế xác thực thứ cấp, không được tích hợp vào hệ điều hành, để truy cập thông tin.

  9. Không cho phép được kích hoạt Operating System Anti-Exploitation Features/Deploy Anti-Exploit Technologies: chẳng hạn như Data Execution Prevention(DEP)hoặc Address Space Layout Randomization (ASLR).

  10. Sự khác biệt bảo mật đơn giản tốt nhất giữa VM và Container là: khi cập nhật hoặc chạy dự án, bạn không cần quyền truy cập nâng cao để thực hiện trên toàn bộ VM hoặc mạng, bạn chỉ chạy như một người dùng được xác định và nếu truy cập nâng cao thì chỉ tồn tại cho thời gian của container và không được chia sẻ trên máy chủ (ở đây có thư viện Khoa học dữ liệu cài đặt, cập nhật, thực thi mã dự án, v.v.).

Phần 4_ Thêm tài nguyên (trên đầu các liên kết được tích hợp trong Phần1-3) liên quan đến các bộ chứa cho Khoa học dữ liệu:

  1. Khoa học dữ liệu trên docker
  2. Conda, Docker và Kubernetes: Tương lai dựa trên nền tảng đám mây của khoa học dữ liệu (được tài trợ bởi Anaconda)
  3. https://devbloss.nvidia.com/making-data-science-teams-productive-kubernetes-rapids/
  4. Tại sao các nhà khoa học dữ liệu yêu Kubernetes
  5. Một cuốn sách rất hay để hiểu cách sử dụng docker cho Data Science: Docker for Data Science: Xây dựng cơ sở hạ tầng dữ liệu có thể mở rộng và mở rộng xung quanh máy chủ Notebook Jupyter .

Cảm ơn rất nhiều !! Nhưng, bạn đã không đề cập đến lý do bảo mật ??
nolw38

1

Với Docker Swarm Mode, bạn có thể thiết lập cụm máy giá rẻ an toàn của riêng mình.

  • Vì vậy, nếu bạn tham gia vào quy trình phân tán của các bộ dữ liệu lớn, Docker Swarm (và có lẽ là công cụ quản lý bộ chứa Kubernetes) có thể là cơ sở để triển khai Apache Spark (hoặc phần mềm tương tự) trên nhiều container (và / hoặc máy chủ), để xử lý song song.

  • Nếu bạn đang phân tích luồng dữ liệu theo thời gian thực, bạn có thể mở rộng cụm tương đối dễ dàng, theo nhu cầu hiện tại, mà không phải mua nhiều thiết bị mạng đắt tiền hoặc phần mềm quản lý tốn kém từ các nhà cung cấp công nghệ ảo hóa.

(Tôi chưa thực hiện việc này một cách cá nhân ngoại trừ các ví dụ về đồ chơi trong ngữ cảnh của MOOCs. Tuy nhiên, đây là một blog blog từ tháng 4 năm 2019 về Spark trên Docker Swarm, bởi một người khác. - Hãy coi chừng Swarm Mode chỉ có sẵn cho Docker Enterprise Edition , không phải là Phiên bản cộng đồng miễn phí. Bây giờ tài liệu không còn nói như vậy nữa, nhưng tôi không biết chắc chắn)


1

Cả hai lý do là về môi trường ảo và văn hóa tín đồ tích hợp các hoạt động phát triển và vận hành cùng nhau. Tôi thà sử dụng thuật ngữ "môi trường thử nghiệm" hơn là hộp cát để mô tả chức năng này.

Docker là một công cụ hữu ích cho khoa học dữ liệu. Các lý do khác có thể bao gồm đó là tạo điều kiện cho sự hợp tác giữa các bên khác nhau vì mọi người đều sử dụng cùng một hình ảnh (quan điểm của bạn về các vấn đề phụ thuộc và thư viện) và nó tạo điều kiện chia sẻ và quản lý ứng dụng / mã / quy trình làm việc của bạn với bất kỳ ai độc lập trên HĐH mà họ sử dụng. Về cơ bản, rất hữu ích để chia sẻ mã, quản lý của nó với các bên thứ ba và các yêu cầu của người dùng liên quan đến phụ thuộc thư viện, v.v.

Tôi không biết về các tài liệu nghiên cứu thú vị nhưng tôi nghĩ rằng câu hỏi này hơi giống với việc hỏi có những tài liệu nghiên cứu thú vị về Python hay R.


Vậy, trong khoa học dữ liệu, Docker không liên quan gì đến Sandboxing? Và lý do về bảo mật sẽ tốt hơn là "Có môi trường thử nghiệm cho ứng dụng"?
nolw38

Không, ý tôi là hộp cát là một trong nhiều ứng dụng. Môi trường kiểm tra lớn hơn một chút vì bạn muốn môi trường của mình gần nhất có thể với môi trường bạn chạy và bao gồm hộp cát, nhưng cũng sửa lỗi cho ví dụ. Để bảo mật, nó liên quan đến văn hóa tín đồ mà bạn không muốn làm hỏng những gì đang hoạt động (hoạt động tức là cơ sở dữ liệu của bạn trong ví dụ bạn đã đưa ra) và phát triển (thử những điều mới).
Tiến sĩ H. Lecter
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.