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?
Antworten:
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.
Container sind sehr wichtig, wenn es aus folgenden Gründen in die Welt der Datenwissenschaft geht:
Rapid Prototyping mit Edge Node On Demand.
Vermeiden Sie die Notwendigkeit, nach einer Aktualisierung oder einem Fehler alles auf neuer Hardware neu zu installieren.
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.
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.)?
library
Ihre 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.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.
Darüber hinaus verfügt der kubernetes- Cluster über folgende zusätzliche Sicherheitsfunktionen:
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.
Bleiben Sie über Docker-Updates und Schwachstellen in der Software auf dem Laufenden.
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/docker
jedoch, zu einem anderen Einhängepunkt zu wechseln und auf Betriebssystemebene zu überwachen, indemauditd
oderaide services
für Änderungen oder Größe / unerwünschte Workload-Ausführung die Protokolle aufbewahrt werden und entsprechend den Anforderungen konfigurieren.Hinweis: Das Beste daran
step 2
ist, 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 systemd
um 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.Überprüfen Sie die Zeit, in der sich die Benutzer in einer
docker
Gruppe befinden, damit Sie nichtunauthorized elevated access
in 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 derdocker
Gruppe 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. "NIEMALSroot
für Container verwenden, die ausgeführt werden, widmen SiePID
nur diese Aufgabe (haben erhöhten Zugriff, sind jedoch aufgabenbasiert, ich verwende Gravitation für den Cluster und bei der Installation NIEMALS benutze root).Ü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).
Überprüfen Sie alle Docker-Dateien und docker.service in etc, var und was sonst noch anwendbar ist.
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.
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 , auchsensitive data
für das Unternehmen.Sie haben die Möglichkeit, alle sensiblen Informationen während des Transports zu verschlüsseln.
Verwendet nur bestimmte genehmigte
Ports, Protocols and Services
VMs, 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"
.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.
Ermöglicht die Aktivierung
Operating System Anti-Exploitation Features/Deploy Anti-Exploit Technologies
: wieData Execution Prevention(DEP)
oderAddress Space Layout Randomization (ASLR)
.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.).
quelle
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.
quelle
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.
quelle