Es gibt einige Fragen zu Containern , wie zum Beispiel:
- Welche Rolle spielen Configuration Management-Tools in unveränderlichen Infrastrukturen?
- Welche Probleme löst eine Container-Orchestrierung?
- Einfache CI / CD-Container in AWS
Meine Fragen :
- Was ist eigentlich ein "Container" (im Kontext von DevOps)?
- Warum werden sie verwendet?
terminology
containers
Pierre.Vriens
quelle
quelle
Antworten:
Das allererste, was Sie über einen Container wissen sollten, ist:
Es ist in erster Linie ein Prozess.
Sobald dies verstanden ist, kann man anfangen zu verstehen, wie Container mit virtuellen Maschinen verglichen und kontrastiert werden. Container und VMs sind von ihren Hosts isoliert . Die Methode der Isolierung ist der entscheidende Unterschied.
Containerprozesse verwenden Erweiterungen des Betriebssystem-Kernel-Hosts, auf dem sie ausgeführt werden, um sich von anderen Prozessen zu isolieren. Andere Erweiterungen bieten auch eine Datenträger- und Ressourcenisolierung. Container teilen ihren Kernel und Speicher mit dem Host-Betriebssystem.
Virtuelle Maschinen verwenden einen Hypervisor , um VMs von ihren Hosts zu isolieren. Hierbei handelt es sich um eine Softwareschicht, die Ressourcenanforderungen von "Gästen" (VMs) an die Hardware weiterleitet. Die Datenträgerisolierung wird durch die Datenträgervirtualisierung bereitgestellt. VMs nicht einen Kernel mit dem Wirt sie ihren eigenen Kernel in dem Speicherraum laden zur VM gewidmet teilen.
Ein wichtiger Effekt dieses Unterschieds ist, dass ein Container mit seinem Host kernelkompatibel sein muss. Beispielsweise ist es nicht möglich, einen Windows Nano Server-basierten Container auf einem Linux-Host oder einen Ubuntu-Container direkt auf einem Windows-Host auszuführen. Im Gegensatz dazu können auf virtuellen Maschinen alle Kernel ausgeführt werden, unabhängig vom Host-Betriebssystem. Wenn Sie einen Linux-Container auf einem Windows-Host ausführen, führt Docker den Container auf einer Linux-VM aus.
Die betrieblichen Unterschiede liegen in der Beweglichkeit: Container starten und stoppen ungefähr so schnell wie ein normaler Prozess. VMs sind "schwerer" und erfordern dedizierte Ressourcen, die für sie reserviert sind. Das Starten und Herunterfahren dauert länger.
Container bieten einem DevOps-Betriebsmodell viel Flexibilität:
quelle
Der Begriff Container bezieht sich auf eine leichte Virtualisierungstechnologie, die auf modernen Linux-Kerneln verfügbar ist. Diese Technologie ist FreeBSD-Jails sehr ähnlich.
Ein älterer, nicht containerfähiger Linux-Kernel kann Prozesse gleichzeitig ausführen. Einige Attribute des Systems können privat verarbeitet werden, z. B. die Prozessumgebung oder der Prozessspeicher. Nur der Prozess, der diese Attribute besitzt, und das Betriebssystem selbst können auf diese Daten zugreifen. (Es gibt eine Menge Schlupflöcher, wie bei einigen ps- Implementierungen, aber das stimmt im Wesentlichen!) Einige andere Attribute werden von den Prozessen gemeinsam genutzt, wie zum Beispiel das Dateisystem und die Netzwerkschnittstellen.
Ein moderner, containerfähiger Linux-Kernel kann mehr Attribute des Systems als private Daten verarbeiten, die einem Prozess oder einer Gruppe von Prozessen zugeordnet sind. Der resultierende Kontext ist ein Container. Anstatt ein Programm in den "Initial Containers" unter Verwendung des Dateisystems und der vom Betriebssystem initialisierten Netzwerkschnittstellen auszuführen, können Prozesse in anderen Containern ausgeführt werden, sodass ein anderes Dateisystem und ein anderes Dateisystem angezeigt werden andere Liste von Netzwerkschnittstellen. Daher teilen sich zwei Prozesse, die in unterschiedlichen Containern ausgeführt werden, nur den Kernel. Sie kennen vielleicht den Befehl chroot, mit dem ein Prozess in einer bestimmten Dateihierarchie ausgeführt werden kann. Container bringen die Idee ein paar Schritte weiter.
Dies ist natürlich nur eine sehr grobe Erklärung, aber ich hoffe, sie hilft bei der Klärung der Idee, was Container sind. Wofür sind sie gut?
Eine beliebte Schnittstelle zu den Containerfunktionen von Linux-Kerneln ist docker, ein Befehlszeilendienstprogramm, mit dem Artefakte für Dateisysteme ( Docker-Images ) erstellt und Prozesse in Containern ausgeführt werden können, auf die diese Dateisysteme zugreifen können. Diese Software-Suite ist auch in der Lage, virtuelle Ad-hoc-Netzwerksysteme zu erstellen, mit denen mehrere Container in einem privaten Netzwerk kommunizieren können.
Containerbasierte Technologien eignen sich für:
(Da Sie mit anderen Virtualisierungstechnologien wie Virtual Box vertraut zu sein scheinen, könnten Sie bemerken, dass diese Technologien auch die drei oben genannten Punkte bequem angehen können. Heutzutage gibt es ein recht kleines Spektrum an Virtualisierungstechnologien, und wir können die Frage nach ihrer Beliebtheit in vergleichen bestimmte Zusammenhänge mit der Popularität von Computersprachen: Es hängt wahrscheinlich von den technischen Vorzügen jeder einzelnen Lösung ab, aber auch von vielen Faktoren, die ich nur als "Zufall" bezeichnen werde.)
quelle
Normalerweise beziehen sich Container auf Docker-Container, die den Namen populär gemacht haben
Ich zitiere dort aus der Docker-Definition:
Die Wurzelnamen lauten Linux-Container (lxc), deren Ziel es war, einen Prozess von seinem Host-System zu isolieren. Das erste Ziel bestand darin, eine Kompromittierung des Prozesses zur Übernahme des Host-Systems zu vermeiden.
Jetzt werden sie in einem weiteren Bereich verwendet. In einer modernen 'Container'-Definition werden Sie mehr oder weniger ein Paket zur Laufzeit freigeben, das Ihre Anwendung, gegebenenfalls die zugrunde liegende Middleware und alle erforderlichen Bibliotheken enthält, und Sie werden sicher sein, dass es auf jedem kompatiblen System ausgeführt werden kann.
Der zweite Vorteil besteht darin, dass mehrere Anwendungen mit derselben Abhängigkeit in unterschiedlichen Versionen verwendet werden können, ohne dass die Umgebungsvariablen stark angepasst werden müssen, damit die richtige geladen wird.
Anders als bei einem VM-System wie einer virtuellen Maschine mit virtueller Box oder einer EC2-Instanz unter AWS sind Container nur auf Dateisystemebene virtuell und nur auf dem Speicherstapel isoliert. Sie teilen sich immer noch den gleichen Host und das Betriebssystem unter ihnen wird CPU-Ticks vermitteln.
Eine virtuelle Maschine ist auf Hardwareebene virtuell und Sie führen ein Betriebssystem aus, ein Container ist auf Betriebssystemebene virtuell und Sie führen einen Prozess aus.
quelle
Aus der AWS-Definition :
Beim Containerisieren werden alle für die Ausführung einer bestimmten Aufgabe / Umgebung erforderlichen Elemente so verpackt, dass sie autark sind und auf jeder Plattform ausgeführt werden können, die beim Einrichten und Installieren von Dingen mit erheblichem Aufwand verbunden ist.
quelle