Docker für Data Science

7

Ich habe kürzlich angefangen, Artikel über Docker zu lesen.
In der Datenwissenschaft ist Docker für mich nützlich, weil:

1) Sie haben eine völlig andere Umgebung, die Sie vor Problemen mit Bibliotheken und Abhängigkeiten schützt.

2) Wenn Ihre Anwendung beispielsweise die Datenbank Ihres Unternehmens ändert, möchten Sie zunächst sicherstellen, dass der Code ordnungsgemäß funktioniert und keine negativen Auswirkungen auf die Datenbank hat. Daher verwenden Sie Docker, um zuerst Ihren Code zu testen.

meine Fragen:

  • Habe ich recht, wenn ich sage, dass nur der zweite Grund Sandboxen ist? Der erste Grund hat nichts mit Sandboxen zu tun, oder?

  • Gibt es andere Gründe, warum Docker in der Datenwissenschaft nützlich ist?

  • Ich finde nicht viele interessante Forschungsarbeiten über Docker for Data Science. Kennen Sie einige berühmte?

nolw38
quelle
Schließlich haben Sie wahrscheinlich alle Ihre Fragen aufgenommen und beantwortet und eine ausführliche Beschreibung des Sicherheitsteils + der Ressourcen von Konferenzen und Anwendungsfällen dazu erstellt, warum und wie Data Scientist Container verwendet. Bitte lassen Sie mich wissen, wenn Sie eine detailliertere Version benötigen :)
n1tk

Antworten:

4

Anstatt sich auf den Technologiebegriff zu konzentrieren, wird eine allgemeine Antwort gegeben und der Begriff „Container“ verwendet.

Container führen nur das aus, was sie ausführen sollen, vorausgesetzt, etwas Unbekanntes ist nicht vertrauenswürdig. Was sich also nur für die Lebensdauer des Containers im Container befindet, ist die gleiche Änderung in einem zu testenden Code in der Datenbank in VMs (Sandboxing) oder Containern (Docker). Der größte Unterschied besteht im Ressourcenverbrauch und in der Zeit für die Bereitstellung von VMs gegenüber dem Hochfahren von Containern / Pods in wenigen Sekunden für die Anwendung.

Mehr Details:

Teil1_ Aus Sicht der Anwendung

Container sind sehr wichtig, wenn es aus folgenden Gründen in die Welt der Datenwissenschaft geht:

  • Minimierung widersprüchlicher Bibliotheksversionen für verschiedene Entwicklungsprojekte (jedes Projekt verfügt über einen eigenen Container / Pod zum Ausführen).
  • Konsistenz zwischen Umgebungen und Entwicklern anhand bestimmter Entwurfskriterien.
  • Rapid Prototyping mit Edge Node On Demand.

  • Vermeiden Sie die Notwendigkeit, nach einer Aktualisierung oder einem Fehler alles auf neuer Hardware neu zu installieren.

  • Portabilität Ihrer Computerumgebung, Entwicklung auf Ihrem Computer. Wenn Sie mehr Ressourcen wie CPU, RAM oder GPU benötigen, können Sie Ihre Umgebung auf Cloud, leistungsstarke Cluster, leistungsstarke Computer und Containergruppen portieren, die mit Kubernetes oder Dockerized-Clustern namens Swarm orchestriert werden können .
  • Maximieren Sie die Klarheit der Zusammenarbeit zwischen Gruppen. Konsistente Bibliotheken, Ergebnismengen usw.
  • Erweiterung der lokalen Autonomie / Agilität auf Cloud-Skalierung und Reichweite.
  • Projektarbeitsbereiche mit Docker-Containern zur Steuerung der Umgebungskonfiguration. Sie können neue Pakete installieren oder Befehlszeilenskripte direkt vom integrierten Terminal ausführen.
  • Die von Containern verwendeten Ressourcen sind im Vergleich zu VM oder Bare Metal sehr gering. Sie können mehrere Container in VM oder Bare Metal ausführen, wodurch die Lizenzkosten für das Betriebssystem erheblich gesenkt werden und Projekte / Apps basierend auf den benötigten Ressourcen und nicht den vollständigen Ressourcen skaliert werden des Hosts (hier zu beachten: Sie werden mehrere Apps / Modelle auf einem Computer ausführen, wenn Sie Container verwenden, die ohne Container verglichen werden. Sie verwenden die vollständigen Maschinenressourcen für eine einzelne App / ein einzelnes Modell. Dies ist eine Verschwendung von Ressourcen. In einer Clusterumgebung können Sie dies tun Starten Sie mehrere Pods / Container (Apps / Modelle im gesamten Cluster und ohne Pod-Kosten im Vergleich zu VMs, die Sie für das Betriebssystem jedes Hosts bezahlen, und führen Sie alle Ressourcen für diese Aufgabe aus).
  • Es ist einfach, ein neues Image mit neuen Paketen zu installieren und mit allen zu teilen, um mit virtuellen Umgebungen in VMs umzugehen und Konflikte zwischen Paketen und vielem mehr zu haben (ich würde gerne sehen, dass virtuelle Umgebungen vom herkömmlichen Ansatz auf Container umgestellt werden, das ist gut Verbesserung und wird Datenwissenschaftlern sehr helfen, die Konfiguration jedes Projekts bei allen Konflikten einzeln zu umgehen und zu aktivieren / deaktivieren und dann bei der Produktion nach Anforderungen zu suchen, wenn Sie mit Containern nur eine Konfigurationsdatei benötigen. Dies ist meine Sichtweise was ich täglich in der Data Science-Welt sehe).
  • Mit der infrastrukturunabhängigen Plattform können Datenwissenschaftler die Analyseanwendungen auf der für die Anwendungen am besten optimierten Infrastruktur ausführen
  • Ermöglichen Sie Datenwissenschaftlern, Modelle mit den Tools und Paketen zu erstellen, die für die Forschung am besten geeignet sind, ohne sich um Anwendungs- und Umgebungskonflikte sorgen zu müssen.
  • Wichtigste Reproduzierbarkeit der Forschung: Die von Containern bereitgestellte Skalierung lässt sich problemlos mit Containern skalieren und ist in allen Umgebungen identisch. Das Host-Betriebssystem ist Ihnen egal, wodurch die Wiederholbarkeit von Analyse und Forschung mit unveränderlichen Containern sichergestellt und Probleme mit verschiedenen Umgebungen beseitigt werden
  • Sichere Zusammenarbeit: Die integrierte Sicherheit in der Plattform und im Lebenszyklus ermöglicht die Zusammenarbeit ohne das Risiko von Manipulationen und Datenintegrität (weitere Einzelheiten in Teil 2 und 3).

Hier kommt Cloudera mit Cloudera Data Science Workbench und Anaconda mit Anaconda Enterprise ins Spiel. Beide verwenden Container, um schnelle Ergebnisse für das Unternehmen zu erzielen und die Modelle von Entwickler über Qualitätssicherung bis hin zur Produktion einfach bereitzustellen.

Warum ist wichtige letzte Aussage wichtig? ist die Portabilität von dev zu prod ohne Änderungen an den Umgebungen und ohne Kosten für die Operationalisierung von DevOps.

Teil2_ Aus Sicherheitsgründen

Ein berüchtigter Sicherheitsvorteil besteht darin, dass die Sicherheit des Host-Betriebssystems vom Container getrennt ist. Dies bedeutet, dass das Patchen getrennt erfolgt. Das Patchen des Host-Betriebssystems hat keine Auswirkungen auf Ihre containerisierte Anwendung (wie oft haben wir das Problem, wenn wir das Betriebssystem patchen und das App und Dienst in diesem Betriebssystem (Pfade, Ports, Dienste usw.)?

  • Beispiel: Wenn libraryIhre App / Ihr Code bösartig ist , befindet sich diese Malware nur für die Zeit, in der der Container aktiv ist, in diesem Container. Container werden die ganze Zeit als Endpunkt ausgeführt und es wurde kein Fall festgestellt, der die Malware verbreitet ins Netzwerk.
  • Das Überwachen eines Containerknotens ist robust und Sie können Add-Ons oder Dienste hinzufügen, um das Verhalten von Anwendungen oder Knoten zu überwachen. Sie replizieren nur neue Knoten / Container und basieren nur auf der Konfigurationsdatei.

Vergleichen von VMs mit Containern: Bei Containern ist das Betriebssystem von Containern getrennt (Container sind eine separate Aufgabe, wenn Sicherheit vorhanden ist).

Die Docker-Sicherheit bietet detaillierte Informationen zu wichtigen Sicherheitspunkten.

Docker-Standards und -Konformitäten bieten eine vollständige Liste der für Container verfügbaren Sicherheitskonformitäten und -standards.

"Docker-Container mit einem gut gestalteten Seccomp-Profil (das unerwartete Systemaufrufe blockiert) bieten in etwa die gleiche Sicherheit wie ein Hypervisor."

Ordnerfreigabe . Mit Containern können Sie einen Ordner freigeben, indem Sie einen freigegebenen Mount einrichten. Da der Docker / Kernel Dateiberechtigungen erzwingt, die von Containern verwendet werden, kann das Gastsystem diese Einschränkungen nicht umgehen. Dies ist für Data Science-Anwendungen und -Benutzer sehr wichtig, da in Unternehmen die meiste Zeit sensible / eingeschränkte Daten verwendet werden und mehrere Sicherheitsebenen oder Einschränkungen vorhanden sind. Ein Ansatz zur Lösung dieses Sicherheitsproblems ist die Verwendung von VDI oder VMs mit AD-Gruppe vorhanden, um den Datenzugriff einzuschränken / gemeinsam zu nutzen, und es wird problematisch und kostspielig, Ressourcen zu warten und zuzuweisen.

Wann kommt es zum Debuggen von Anwendungen oder Betriebssystemen mit allen generierten Diensten und Protokollen? Ich denke, Container gewinnen und entwickeln sich jetzt zum NLP-Ansatz: Ein experimentelles NLP-Dienstprogramm (Natural Language Processing) zum Korrekturlesen von Sicherheitserzählungen ist ebenfalls enthalten.

Hier zitiere ich Jianing Guo von Google: Eine ordnungsgemäß gesicherte und aktualisierte VM bietet eine Isolation auf Prozessebene, die sowohl für reguläre Anwendungen als auch für Container-Workloads gilt. Kunden können Linux-Sicherheitsmodule verwenden, um die Angriffsfläche eines Containers weiter einzuschränken. Beispielsweise unterstützt Kubernetes, ein Open-Source-Container-Orchestrierungssystem für die Produktion, die native Integration mit AppArmor, Seccomp und SELinux, um Syscalls, die Containern ausgesetzt sind, Einschränkungen aufzuerlegen. Kubernetes bietet außerdem zusätzliche Tools zur weiteren Unterstützung der Containerisolierung. Mit PodSecurityPolicy können Kunden die Arbeitslast oder den Zugriff auf Knotenebene einschränken. Für besonders sensible Workloads, die eine Isolierung auf VM-Ebene erfordern,

Darüber hinaus verfügt der kubernetes- Cluster über folgende zusätzliche Sicherheitsfunktionen:

  1. Verwenden Sie TLS (Transport Layer Security) für den gesamten API-Verkehr
  2. API-Authentifizierung
  3. API-Autorisierung
  4. Einfache Behebung von Sicherheitslücken und minimale Auswirkungen auf Anwendung / Umgebung im Vergleich zu VMs oder dediziertem Bare-Metal.

Teil3_ CIS-Benchmarks zum Härten von Behältern : Docker & Kubernetes.

  1. Der erste Schritt, um die Sicherheit von Containern zu erhöhen, besteht darin, den Hostcomputer vorzubereiten, der für die Ausführung von Workloads mit Containweized vorgesehen ist. Durch die Sicherung des Container-Hosts und die Befolgung der Best Practices für die Infrastruktursicherheit wird eine solide und sichere Grundlage für die Ausführung von Container-Workloads geschaffen.

  2. Bleiben Sie über Docker-Updates und Schwachstellen in der Software auf dem Laufenden.

  3. Verfügen Sie über ein bestimmtes dediziertes Verzeichnis für Docker-bezogene Dateien und weisen Sie gerade genug Speicherplatz zu, damit Container ausgeführt werden können (Standardpfad ist /var/lib/dockerjedoch, zu einem anderen Einhängepunkt zu wechseln und auf Betriebssystemebene zu überwachen, indem auditdoder aide servicesfür Änderungen oder Größe / unerwünschte Workload-Ausführung die Protokolle aufbewahrt werden und entsprechend den Anforderungen konfigurieren.

Hinweis: Das Beste daran step 2ist, dass Sie mit VMs viel mehr Speicherorte für Ihr Data Science-Projekt überwachen müssen (Bibliotheken an unterschiedlichen Speicherorten, mehrere Versionen von Paketen, Speicherorte / Pfade für sogar Python, ausführen, cron jobs or systemdum sicherzustellen, dass einige Prozesse ausgeführt werden, alle protokollieren Protokolle usw., aber mit Containern ist ein einziger Punkt, an dem alle diese Jobs ausgeführt und nur ein Pfad anstelle mehrerer Pfade überwacht werden können.

  1. Überprüfen Sie die Zeit, in der sich die Benutzer in einer dockerGruppe befinden, damit Sie nicht unauthorized elevated accessin das System gelangen (Docker ermöglicht die Freigabe von Verzeichnissen zwischen dem Docker-Host und einem Gastcontainer, ohne die Zugriffsrechte des Containers einzuschränken). Entfernen Sie daher nicht vertrauenswürdige Benutzer aus der dockerGruppe und erstellen Sie keine Eine Zuordnung von vertraulichen Verzeichnissen vom Host zu Containervolumes. Hier würde ich sagen, dass Sie einen separaten Benutzer für die Installation und bestimmte Containeraufgaben verwenden sollen. "NIEMALS rootfür Container verwenden, die ausgeführt werden, widmen Sie PIDnur diese Aufgabe (haben erhöhten Zugriff, sind jedoch aufgabenbasiert, ich verwende Gravitation für den Cluster und bei der Installation NIEMALS benutze root).

  2. Überprüfen Sie alle Docker-Daemon-Aktivitäten (beachten Sie, dass die Protokolle in der containerisierten "Welt" Speicherplatz beanspruchen. Bereiten Sie daher eine separate Partition mit ausreichend Speicherplatz für die Protokolle und die erforderliche Konfiguration vor (Rotation und Zeitraum zum Speichern der Protokolle).

  3. Überprüfen Sie alle Docker-Dateien und docker.service in etc, var und was sonst noch anwendbar ist.

  4. Beschränken Sie die gesamte Kommunikation zwischen Containern. Verknüpfen Sie bestimmte Container, für die Kommunikation erforderlich ist (am besten erstellen Sie ein benutzerdefiniertes Netzwerk und verbinden Sie nur Container, die mit diesem benutzerdefinierten Netzwerk kommunizieren müssen). Dieser Härtungsansatz verhindert die unbeabsichtigte und unerwünschte Weitergabe von Informationen an andere Behälter.

  5. Alle Anwendungen in containerisierter Infrastruktur sollten so konfiguriert sein oder zumindest die Option dazu haben Encryp All Sensitive Information(dies ist für Data Scientist sehr wichtig, da wir uns die meiste Zeit auf Plattformen anmelden, um Daten abzurufen , auch sensitive datafür das Unternehmen.

  6. Sie haben die Möglichkeit, alle sensiblen Informationen während des Transports zu verschlüsseln.

  7. Verwendet nur bestimmte genehmigte Ports, Protocols and ServicesVMs, die eine offenere Oberfläche haben, wenn eine App / ein Projekt ausgeführt wird. Bei Containern geben Sie nur an, was verwendet werden soll, und wundern sich nicht, dass alle anderen Ports, Betriebssysteme und Dienste, die auf Betriebssystemebene ausgeführt werden, zum Schutz von oder ausgeführt werden Monitor, dies minimiert die "attack surface".

  8. Auf Systemen gespeicherte vertrauliche Informationen werden im Ruhezustand verschlüsselt und erfordern einen sekundären Authentifizierungsmechanismus, der nicht in das Betriebssystem integriert ist, um auf die Informationen zugreifen zu können.

  9. Ermöglicht die Aktivierung Operating System Anti-Exploitation Features/Deploy Anti-Exploit Technologies: wie Data Execution Prevention(DEP)oder Address Space Layout Randomization (ASLR).

  10. Der beste einfache Sicherheitsunterschied zwischen VMs und Containern besteht darin, dass Sie beim Aktualisieren oder Ausführen eines Projekts keinen erhöhten Zugriff benötigen, um dies über die gesamte VM oder das gesamte Netzwerk zu tun. Sie werden nur als definierter Benutzer ausgeführt. Wenn es sich um erhöhten Zugriff handelt, ist dieser nur für vorhanden Die Zeit des Containers und nicht für den gesamten Host freigegeben (hier werden Data Science-Bibliotheken installiert, aktualisiert, Projektcode ausgeführt usw.).

Teil 4_ Weitere Ressourcen (zusätzlich zu den in Teil 1-3 enthaltenen Links) in Bezug auf Container für Data Science:

  1. Data Science auf Docker
  2. Conda, Docker und Kubernetes: Die Cloud-native Zukunft der Datenwissenschaft (gesponsert von Anaconda)
  3. https://devblogs.nvidia.com/making-data-science-teams-productive-kubernetes-rapids/
  4. Warum Datenwissenschaftler Kubernetes lieben
  5. Ein sehr gutes Buch zum Verständnis der Docker-Verwendung für Data Science: Docker für Data Science: Aufbau einer skalierbaren und erweiterbaren Dateninfrastruktur rund um den Jupyter Notebook Server .
n1tk
quelle
Vielen Dank !! Aber Sie haben die Sicherheitsgründe nicht erwähnt?
Nolw38
1

Mit dem Docker Swarm-Modus können Sie Ihren eigenen sicheren Cluster kostengünstiger Maschinen einrichten.

  • Wenn Sie sich für die verteilte Verarbeitung großer Datenmengen interessieren, kann Docker Swarm (und alternativ möglicherweise das Container-Management-Tool Kubernetes) die Grundlage für die Bereitstellung von Apache Spark (oder ähnlicher Software) auf vielen Containern (und / oder Hosts) für die parallele Verarbeitung sein.

  • Wenn Sie sich mit Echtzeitanalysen von Datenströmen beschäftigen, können Sie den Cluster entsprechend der aktuellen Nachfrage relativ einfach skalieren, ohne viele teure Netzwerkgeräte oder teure Verwaltungssoftware von Anbietern von Virtualisierungstechnologien kaufen zu müssen.

(Ich habe dies nicht persönlich getan, außer für Spielzeugbeispiele im Zusammenhang mit MOOCs. Hier ist jedoch ein Blogpost vom April 2019 über Spark on Docker Swarm von jemand anderem. - Beachten Sie, dass der Swarm-Modus einst nur für Docker Enterprise Edition verfügbar war , nicht die kostenlose Community Edition. Jetzt heißt es in der Dokumentation nicht mehr, aber ich weiß es nicht genau.

knb
quelle
1

Beide Gründe betreffen virtuelle Umgebungen und die Devops-Kultur, die Entwicklungs- und Betriebsaktivitäten miteinander verbindet. Ich würde lieber die Terminologie "Testumgebung" als Sandboxing verwenden, um diese Funktion zu beschreiben.

Docker ist ein nützliches Tool für die Datenwissenschaft. Andere Gründe könnten sein, dass dies die Zusammenarbeit zwischen verschiedenen Parteien erleichtert, da jeder das gleiche Image verwendet (Ihr Standpunkt zu Abhängigkeiten und Bibliotheksproblemen) und das Teilen und Verwalten Ihrer Anwendung / Ihres Codes / Workflows mit allen Personen erleichtert, die von dem von ihnen verwendeten Betriebssystem unabhängig sind. Grundsätzlich ist es hilfreich, Code, seine Verwaltung mit Dritten und Benutzeranfragen bezüglich Bibliotheksabhängigkeiten usw. zu teilen.

Ich kenne keine interessanten Forschungsarbeiten, aber ich denke, die Frage ähnelt der Frage, ob es interessante Forschungsarbeiten zu Python oder R gibt.

Dr. H. Lecter
quelle
In der Datenwissenschaft hat Docker also nichts mit Sandboxing zu tun? Und der Grund für die Sicherheit wäre besser "Eine Testumgebung für die Anwendung haben"?
Nolw38
Nein, ich meinte, Sandboxing ist eine der vielen Anwendungen. Die Testumgebung ist etwas größer, da Sie möchten, dass Ihre Umgebung so nah wie möglich an der Umgebung ist, in der Sie Ihre Vorgänge ausführen, und Sandboxing, aber auch Fehlerbehebung enthält. Aus Sicherheitsgründen bezieht es sich auf die Devops-Kultur, in der Sie nicht mit dem, was funktioniert (Operationen, dh Ihre Datenbank in dem von Ihnen angegebenen Beispiel) und Entwicklungen (das Ausprobieren neuer Dinge) in Konflikt geraten möchten.
Dr. H. Lecter