[Hinweis: Diese Antwort konzentriert sich auf Linux-Container und gilt möglicherweise nicht vollständig für andere Betriebssysteme. ]]
Was ist ein Container?
Es ist eine App : Ein Container ist eine Möglichkeit, voneinander isolierte Anwendungen auszuführen. Anstatt die Hardware zu virtualisieren, um mehrere Betriebssysteme auszuführen, müssen Container das Betriebssystem virtualisieren, um mehrere Anwendungen auszuführen. Dies bedeutet, dass Sie mehr Container auf derselben Hardware als VMs ausführen können, da nur eine Kopie des Betriebssystems ausgeführt wird und Sie nicht für jede Instanz Ihrer App den Speicher und die CPU-Kerne vorab zuweisen müssen. Wie bei jeder anderen App werden sie von einem Container, der die CPU oder den Arbeitsspeicher benötigt, zugewiesen und anschließend freigegeben, sodass andere Apps später dieselben begrenzten Ressourcen verwenden können.
Sie nutzen Kernel-Namespaces : Jeder Container erhält standardmäßig eine Umgebung, in der die folgenden Namespaces vorhanden sind:
- Mount: Dateisysteme
/
im Container unterscheiden sich von denen /
auf dem Host.
- PID: Prozess-IDs, PID 1 im Container ist Ihre gestartete Anwendung. Diese PID unterscheidet sich vom Host aus.
- Netzwerk: Container werden standardmäßig mit einer eigenen Loopback-Schnittstelle (127.0.0.1) und einer privaten IP-Adresse ausgeführt. Docker verwendet Technologien wie Linux-Brückennetzwerke, um mehrere Container in ihrem eigenen privaten LAN miteinander zu verbinden.
- IPC: Interprozesskommunikation
- UTS: Dies beinhaltet den Hostnamen
- Benutzer: Sie können optional alle Benutzer-IDs verschieben, die von denen des Hosts versetzt werden sollen
Jeder dieser Namespaces verhindert auch, dass ein Container Dinge wie das Dateisystem oder Prozesse auf dem Host oder in anderen Containern sieht, es sei denn, Sie entfernen diese Isolation explizit.
Und andere Linux-Sicherheitstools : Container verwenden auch andere Sicherheitsfunktionen wie SELinux, AppArmor, Capabilities und Seccomp, um zu verhindern, dass Benutzer im Container, einschließlich des Root-Benutzers, dem Container entkommen oder den Host negativ beeinflussen können.
Packen Sie Ihre Apps mit ihren Abhängigkeiten für die Portabilität : Um eine Anwendung in einen Container zu packen, müssen Sie nicht nur die Anwendung selbst, sondern alle zum Ausführen dieser Anwendung erforderlichen Abhängigkeiten zu einem tragbaren Image zusammenfügen. Dieses Image ist das Basisdateisystem, mit dem ein Container erstellt wird. Da wir nur die Anwendung isolieren, enthält dieses Dateisystem nicht den Kernel und andere Betriebssystemdienstprogramme, die zum Virtualisieren eines gesamten Betriebssystems erforderlich sind. Daher sollte ein Image für einen Container erheblich kleiner sein als ein Image für eine gleichwertige virtuelle Maschine, damit die Bereitstellung auf Knoten im gesamten Netzwerk beschleunigt werden kann. Infolgedessen sind Container zu einer beliebten Option für die Bereitstellung von Anwendungen in der Cloud und in entfernten Rechenzentren geworden.
Kann es eine virtuelle Maschine ersetzen, die für die Entwicklung vorgesehen ist?
Dies hängt davon ab : Wenn in Ihrer Entwicklungsumgebung Linux ausgeführt wird und Sie entweder keinen Zugriff auf Hardwaregeräte benötigen oder ein direkter Zugriff auf die physische Hardware zulässig ist, ist die Migration in einen Linux-Container recht einfach. Das ideale Ziel für einen Docker-Container sind Anwendungen wie webbasierte APIs (z. B. eine REST-App), auf die Sie über das Netzwerk zugreifen.
Was ist mit einfachen Worten der Zweck der Verwendung von Docker in Unternehmen? Der Hauptvorteil ?
Entwicklung oder Betrieb : Docker wird normalerweise auf einem von zwei Pfaden in eine Umgebung gebracht. Entwickler, die nach einer Möglichkeit suchen, ihre Anwendung schneller zu entwickeln und lokal zu testen, und Vorgänge, die mehr Arbeitslast auf weniger Hardware ausführen möchten, als dies mit virtuellen Maschinen möglich wäre.
Oder Entwickler : Eines der idealen Ziele besteht darin, Docker sofort über das CI / CD-Bereitstellungstool zu nutzen, die Anwendung zu kompilieren und sofort ein Image zu erstellen, das für Entwicklung, CI, Produkt usw. bereitgestellt wird. Container verkürzen häufig die Zeit zum Verschieben der Anwendung vom Einchecken des Codes bis zum Testen, wodurch Entwickler effizienter werden. Bei ordnungsgemäßem Design kann dasselbe Image, das von den Entwicklern und CI-Tools getestet und genehmigt wurde, in der Produktion bereitgestellt werden. Da dieses Image alle Anwendungsabhängigkeiten enthält, wird das Risiko eines Produktionsausfalls, der in der Entwicklung funktioniert hat, erheblich verringert.
Skalierbarkeit : Ein letzter wesentlicher Vorteil von Containern, den ich erwähnen werde, ist, dass sie unter Berücksichtigung der horizontalen Skalierbarkeit ausgelegt sind. Wenn Sie zustandslose Apps unter hoher Last haben, lassen sich Container aufgrund ihrer geringeren Bildgröße und des geringeren Overheads viel einfacher und schneller skalieren. Aus diesem Grund werden Container von vielen größeren webbasierten Unternehmen wie Google und Netflix verwendet.