Keine Ergebnisse gefunden

Ihre Suche ergab keine Treffer.

Beachten Sie die folgenden Tipps, um das Gesuchte zu finden:

  • Prüfen Sie die Schreibweise des Suchbegriffs.
  • Verwenden Sie Synonyme für das eingegebene Stichwort, z. B. “Anwendung” statt “Software.”
  • Testen Sie eine der unten gezeigten beliebten Suchen.
  • Beginnen Sie eine neue Suche.
Aktuelle Fragen

Docker-Container und Container Cloud-Services

Ein Container ist ein Verpackungsformat, das Code und Abhängigkeiten einer Anwendung in einem Standardformat verpackt, mit dem sie schnell und zuverlässig in Computing-Umgebungen ausgeführt werden kann. Ein Docker-Container ist ein beliebter, leichter, eigenständiger und ausführbarer Container, der alles enthält, was zur Ausführung einer Anwendung erforderlich ist, einschließlich Bibliotheken, Systemtools, Code und Laufzeit. Docker ist auch eine Softwareplattform, mit der Entwickler containerisierte Anwendungen schnell erstellen, testen und bereitstellen können.

Containers as a Service (CaaS) oder Container-Services sind verwaltete Cloud-Services, die den Lebenszyklus von Containern verwalten. Container-Services helfen dabei, die Laufzeit von Containern zu steuern (Starten, Stoppen, Skalieren). Mit Container-Services können Sie die Anwendungsentwicklung und den Deployment-Lebenszyklus vereinfachen, automatisieren und beschleunigen.

Docker und Container-Services haben sich rasch durchgesetzt und sind seit mehreren Jahren ein enormer Erfolg. Aus einer fast unbekannten und eher technischen Open-Source-Technologie im Jahr 2013 hat sich Docker zu einer standardisierten Laufzeitumgebung entwickelt, die jetzt offiziell von vielen Unternehmensprodukten von Oracle unterstützt wird.

Wer verwendet Docker?

Docker ist ein offenes Framework zur Anwendungsentwicklung, das für DevOps und Entwickler konzipiert wurde. Mit Docker können Entwickler Anwendungen problemlos als leichte, tragbare, eigenständige Container erstellen, verpacken, versenden und ausführen, die praktisch überall ausgeführt werden können. Mit Containern können Entwickler eine Anwendung mit allen zugehörigen Abhängigkeiten verpacken und als einzelne Einheit bereitstellen. Durch die Bereitstellung vordefinierter und eigenständiger Anwendungs-Container können sich Entwickler auf den Anwendungscode konzentrieren und diesen verwenden, ohne sich um das zugrundeliegende Betriebssystem oder Deployment-System zu kümmern.

Darüber hinaus können Entwickler Tausende von Open-Source-Container-Anwendungen nutzen, die bereits für die Ausführung in einem Docker-Container konzipiert sind. In DevOps-Teams eignet sich Docker besonders gut bei kontinuierlichen Integrations- und Entwicklungs-Toolketten und reduziert die Constraints und Komplexität, die in ihrer Systemarchitektur für das Deployment und die Verwaltung der Anwendungen erforderlich sind. Mit der Einführung von Container-Orchestrierungs-Cloud-Services kann jeder Entwickler containerisierte Anwendungen lokal in seiner Entwicklungsumgebung entwickeln und diese containerisierten Anwendungen dann in der Produktion auf Cloud-Services wie verwaltete Kubernetes-Services verschieben und ausführen.

Docker gegen Kubernetes

Linux-Container existieren zwar bereits seit 2008, sie wurden aber erst 2013 bekannt, als Docker-Container entstanden sind. Mit dem Start von Docker-Containern kam die Explosion des Interesses an der Entwicklung und dem Einsatz containerisierter Anwendungen. Da die Zahl der containerisierten Anwendungen auf Hunderte von Containern heranwuchs, die auf mehreren Servern bereitgestellt wurden, gestaltete sich der Betrieb dieser Anwendungen komplexer. Wie koordinieren, skalieren, verwalten und planen Sie Hunderte von Containern? Hier kann Kubernetes helfen. Kubernetes ist ein Open-Source-Orchestrierungssystem, mit dem Sie Ihre Docker-Container und Workloads ausführen können. Das System unterstützt Sie bei der Verwaltung von Betriebskomplexitäten, wenn Sie mehrere Container skalieren, die auf mehreren Servern bereitgestellt werden. Die Kubernetes-Engine orchestriert automatisch den Container-Lebenszyklus und verteilt die Anwendungs-Container auf die Hosting-Infrastruktur. Kubernetes kann Ressourcen je nach Bedarf schnell nach oben oder unten skalieren. Es regelt, plant, löscht und überwacht kontinuierlich den Zustand der Container.

Docker-Grundlagen

Die Kernkonzepte von Docker sind Images und Container. Ein Docker Image enthält alles, was zur Ausführung Ihrer Software erforderlich ist: den Code, eine Laufzeit (z. B. Java Virtual Machine [JVM]), Treiber, Tools, Skripte, Bibliotheken, Deployments und vieles mehr.

Ein Docker-Container ist eine ausgeführte Instanz eines Docker Image. Anders als bei herkömmlicher Virtualisierung mit Hypervisor Typ 1 oder Typ 2 wird ein Docker-Container jedoch auf dem Kernel des Hostbetriebssystems ausgeführt. In einem Docker Image ist kein separates Betriebssystem vorhanden - wie in Abbildung 1 dargestellt.

Docker-Basisbild
Abbildung 1

Isolation gegen Virtualisierung

Jeder Docker-Container verfügt über ein eigenes Dateisystem, einen eigenen Netzwerk-Stack (und damit eine eigene IP-Adresse), einen eigenen Prozessplatz und definierte Ressourcenbeschränkungen für CPU und Arbeitsspeicher. Da ein Docker-Container kein Betriebssystem hochfahren muss, startet er sofort. Bei Docker geht es um die Isolation, d. h. um die Trennung der Ressourcen eines Hostbetriebssystems, im Gegensatz zur Virtualisierung, bei der es um die Bereitstellung eines Gastbetriebssystems zusätzlich zum Hostbetriebssystem geht.

VM gegen Kubernetes - Deployment-Infrastruktur
Bild zu: inkrementelles Dateisystem
Abbildung 2

Inkrementelles Dateisystem

Das Dateisystem eines Docker Image ist geschichtet und enthält eine Copy-On-Write-Semantik. Dies ermöglicht Vererbung und Wiederverwendung, speichert Ressourcen auf Datenträger und ermöglicht inkrementellen Image-Download.

Wie in Abbildung 2 dargestellt, könnte ein Docker Image mit WebLogic-Deployment auf einem Image mit einer Oracle WebLogic Server-Domain basieren, das auf einem WebLogic-Image basiert, das auf einem Java Development Kit- ( JDK-) Image basiert, das wiederum auf einem Oracle Linux-Basis-Image basiert.

Docker Registry

Während Docker-Images einfach zu erstellen sind und Entwickler die Einfachheit und Portabilität von Docker-Images lieben, erkannten diese schnell, dass die Verwaltung von Tausenden von Docker-Images eine große Herausforderung darstellt. Docker Registry stellt sich dieser Herausforderung. Docker Registry ist eine Standardmethode zum Speichern und Verteilen von Docker-Images. Die Registry ist ein Open-Source-basiertes Repository unter der zulässigen Apache-Lizenz.

Docker Registry hilft auch bei der Verbesserung der Zugriffskontrolle und Sicherheit der Docker-Images, die im Repository gespeichert sind. Sie verwaltet die Verteilung von Images und kann auch in Anwendungsentwicklungs-Workflows integriert werden. Entwickler können ihre eigene Docker Registry einrichten oder einen gehosteten Docker Registry Service wie Docker Hub, Oracle Container Registry, Azure Container Registry usw. verwenden.

Docker Hub ist eine von Docker verwaltete gehostete Docker Registry. Docker Hub verfügt über mehr als 100.000 Container Images von Software-Anbietern, Open Source-Projekten und der Community. Docker Hub enthält Software und Anwendungen aus offiziellen Repositorys wie NGINX, Logstash, Apache HTTP, Grafana, MySQL, Ubuntu und Oracle Linux.

Beim Starten eines Containers ruft Docker standardmäßig automatisch das entsprechende Image aus dem öffentlichen Docker Hub ab, wenn es nicht lokal verfügbar ist. Außerdem können Sie eigene Images erstellen und in ein öffentliches oder privates Repository an Docker Hub weiterleiten.

Abbildung 3: Bildschirmfoto Docker Registry
Abbildung 3

Docker als Microservice-Laufzeit

Die Idee, monolithische Anwendungen in kleinere Microservices zu schneiden, zieht momentan unter Software-Entwicklern große Aufmerksamkeit auf sich.

Microservices werden unabhängig als Prozess bereitgestellt, verwenden leichte Protokolle, um miteinander zu kommunizieren, und jeder Service besitzt seine Daten [7]. Da Microservices einem dezentralen Governance-Ansatz folgen, benötigen sie ein ziemlich hohes Maß an Infrastrukturautomatisierung, automatisiertem Testen, vollautomatischen CD-Pipelines und qualifizierten, agilen DevOps-Teams.

Es gibt zwar immer noch viele Diskussionen über diesen architektonischen Stil. Es wäre jedoch naiv anzunehmen, dass eine Anwendung, die in Microservices zerlegt ist, einfach als eine Reihe von Prozessen betrieben werden kann. Um nur einige Anforderungen zu nennen: Ein Microservice muss hostunabhängig und auf Betriebssystemebene isoliert sein. Er muss innerhalb seiner Ressourcengrenzen ausgeführt, hoch- und herunterskaliert, bei Ausfall neu gestartet und über eine softwaredefinierte Netzwerkschicht mit anderen Microservices erkannt und verbunden werden.

Wenn Sie daher einen Microservice in einem Docker-Container ausführen, können Sie die meisten dieser Ziele problemlos erreichen.

Docker - Zwei Schlüsselveränderungen

Docker ändert die Art und Weise, wie wir Software erstellen, versenden und ausführen auf zwei verschiedenen Ebenen:

  • Es verbessert den Prozess, um Anwendungen zuverlässig von der Entwicklung bis zur Produktion zu führen.
  • Es bietet ein Standardbildformat, um von On Premise zu Cloud zu gelangen.

Beide Ebenen werden in den folgenden Abschnitten näher erläutert.

Docker Image—Von der Entwicklung bis zur Produktion

Das Erstellen eines Docker-Images mit all seinen Abhängigkeiten löst das „aber es hat für mich auf meinem Entwicklungsrechner funktioniert“-Problem . Die Schlüsselidee ist, dass ein Docker-Image automatisch von einer Build Pipeline aus einem Quellcode-Repository wie Git erstellt und zunächst in einer Entwicklungsumgebung getestet wird. Dieses unveränderliche Bild wird dann in einer Docker-Registry gespeichert.

Wie in Abbildung 4 dargestellt, wird dasselbe Bild für weitere Ladetests, Integrationstests, Akzeptanztests und mehr verwendet. In jeder Umgebung wird dasselbe Bild verwendet. Kleine, aber notwendige umweltspezifische Unterschiede wie JDBC-URL für eine Produktionsdatenbank können als Umgebungsvariablen oder -Dateien in den Container eingespeist werden.

Docker-Image-Bildschirmfoto
Abbildung 4

Statistiken zeigen, dass 65% aller aktuellen Docker-Nutzungsfälle in der Entwicklung sind und 48% Docker für die kontinuierliche Integration verwenden [5].

On Premise zu Cloud

Docker hat die Nutzung von Public Clouds geändert: Einerseits gibt es mit einem Docker-Image zum ersten Mal in der Geschichte ein gemeinsames Packageformat, das sowohl vor Ort als auch auf jedem großen Cloud-Provider ausgeführt werden kann. Docker-Container werden auf meinem Laptop genauso ausgeführt, wie sie auf Oracle Cloud ausgeführt werden.

Auf der anderen Seite laufen Docker-Container auf jeder großen Public Cloud - sie sind ein wichtiger Beitrag zur Überwindung eines langen kuratierten Vorurteils gegenüber Public Clouds: der Vendor-Lock-in-Effekt. Jeder große Cloud Provider bietet Docker jetzt als PaaS an.

Docker-Versionen—Fälligkeit der zugrundeliegenden Technologie

Docker-Releases sind viel schneller als der Releasezyklus der traditionellen Unternehmenssoftware. Manchmal wirft allein das Tempo der Docker-Releases zusammen mit der Neuheit des Docker-Projekts Bedenken hinsichtlich der Sicherheit und Stabilität von Docker auf.

Obwohl Docker und seine Befehlszeile, der Docker-Daemon, seine API und Tools wie Docker Swarm, Docker Machine und Docker Compose erst in den letzten drei Jahren weiterentwickelt wurden, sind die zugrundeliegenden Kernel-Features in jedem Linux-Kernel seit fast einem Jahrzehnt verfügbar.

Ein prominentes Beispiel für einen Frühnutzer der Container-Technologie ist Google. Google verwendete Linux-Container bereits vor Docker. Darüber hinaus führt Google alles in einem Container aus. Schätzungen zufolge startet Google 2 Milliarden Container pro Woche [3].

Cgroups und Namespaces - Geschichte

Die zugrundeliegenden Linux-Kernelfunktionen, die Docker verwendet, sind cgroups und Namespaces. In 2008 wurden cgroups in den in den Linux-Kernel eingeführt, basierend auf der Arbeit, die zuvor von Google-Entwicklern [1] geleistet wurde. Cgroups begrenzen und berücksichtigen die Ressourcennutzung einer Gruppe von Betriebssystemprozessen.

Der Linux-Kernel verwendet Namespace, um die Systemressourcen von Prozessen voneinander zu isolieren. Der erste Namespace, d. h. der Mount-Namespace, wurde bereits 2002 eingeführt.

Container Cloud Services

Im ersten Teil dieses Artikels wurden einige wichtige Docker-Konzepte erläutert. In einer Produktionsumgebung reicht es jedoch nicht aus, eine Anwendung einfach in einem Docker-Container auszuführen.

Um eine Produktionsumgebung einzurichten und zu betreiben, muss die Hardware die Container ausführen. Software wie Docker, Repositorys und Clustermanager müssen installiert, aktualisiert und gepatcht werden. Wenn mehrere Docker-Container über Hosts hinweg kommunizieren, muss ein Netzwerk erstellt werden. Cluster-Container müssen neu gestartet werden, wenn sie nicht erfolgreich sind. Darüber hinaus sollte eine Gruppe von Containern, die miteinander verknüpft sind, genauso einfach bereitgestellt werden können wie eine einzelne logische Anwendungsinstanz. Ein Beispiel hierfür sind ein Load Balancer, einige Webserver, einige Oracle WebLogic Server-Instanzen mit einem Admin-Server, ein Managed Server und eine Datenbank. Um containerisierte Anwendungen skalieren zu können, ist ein Container-Orchestrierungssystem wie Kubernetes oder Docker Swarm erforderlich. Das Bereitstellen, Verwalten und Bedienen von Orchestrierungssystemen wie Kubernetes kann herausfordernd und zeitaufwändig sein.

Damit Entwickler containerisierte Anwendungen leichter und effizienter erstellen können, bieten Cloud-Provider Container Cloud Services oder Containers as a Service (CaaS) an. Container Cloud Services helfen Entwicklern und Betriebsteams dabei, den Lebenszyklus von Containern automatisiert zu optimieren und zu verwalten. Diese Orchestrierungsservices, die normalerweise mit Kubernetes erstellt werden, erleichtern DevOps-Teams die Verwaltung und den Betrieb containerisierter Anwendungen im Maßstab. Oracle Container Engine for Kubernetes und Azure Kubernetes Service sind zwei Beispiele für beliebte Container Orchestration Managed Cloud Services.

Oracle Container Engine for Kubernetes ist ein vollständig verwalteter, skalierbarer und hochverfügbarer Service, mit dem Sie Ihre containerisierten Anwendungen in der Cloud bereitstellen können. Verwenden Sie Container Engine for Kubernetes (manchmal nur OKE abgekürzt), wenn Ihr Entwicklungsteam Cloud-native Anwendungen zuverlässig erstellen, bereitstellen und verwalten möchte.

Docker-Images aus Oracle-Im Folgenden finden Sie einige Quellen zum Abrufen oder Erstellen von Docker-Images für Oracle-Produkte. Das Oracle GitHub-Repository für Docker-Images enthält Docker-Files und Samples zum Erstellen von Docker-Images für kommerzielle Oracle-Produkte und von Oracle gesponserte Open-Source-Projekte.

Docker Hands-On Lab-Containerisierte Entwicklung mit Docker

Verweise

  1. Cgroups (Wikipedia)
  2. Linux Namespaces (Wikipedia)
  3. Bei Google läuft alles in einem Container, von Jack Clark
  4. Docker Hub erreicht 5 Milliarden Pulls
  5. Entwicklung der modernen Software-Lieferkette, Docker-Umfrage 2016
  6. MOS Doc ID 2216342.1:Docker-Support für Oracle DB
  7. Microservices, von Martin Fowler
  8. Oracle Container Engine - und Registry-Demo (3:13)
  9. Container Engine for Kubernetes-Dokumentation