In der Informatik ist ein fundamentaler Trend, dass die Einführung einer weiteren Abstraktionsebene ein Problem lösen kann. Zum Beispiel wurden Computerprogramme am Anfang in Assemblersprache geschrieben. Die Abstraktion von Assembler in Höheren Programmiersprachen (z.B. Java, Python, JavaScript) wird heute von den meisten Entwicklern bevorzugt.
Die Entwicklung hin zu Abstraktion kann auch in der Nutzung von Servern beobachtet werden. Die Ausführung von Applikationen direkt auf der Serverhardware (bare metal) wird heute nur noch für Hochleistungsapplikationen (high performance applications) verwendet. Für den Großteil der Applikationen hat die Abstraktion der darunterliegenden Hardware mehr Vorteile.
Die erste Abstraktionsebene in dem Servermodell ist ein Betriebssystem (OS), das die Applikation ausführt, sodass die Applikation nicht selbst die Hardware verwalten muss.
Die nächste Abstraktion sind Virtuelle Maschinen. Eine Virtuelle Maschine (VM) ist ein Gast-Betriebssystem, das auf einem Host-Betriebssystem ausgeführt wird. Dafür wird eine Software, die als Hypervisor bezeichnet wird, benutzt. Ein Hypervisor sorgt dafür, dass das Gast-Betriebssystem von dem Host-Betriebssystem isoliert ist. Das Gast-Betriebssystem weiß also nicht über das Host-Betriebssystem Bescheid. Das Gast-Betriebssystem denkt, dass es direkt auf der Hardware läuft. Somit können mehrere Gast-Betriebssysteme auf einem Host-Betriebssystem ausgeführt werden, ohne sich gegenseitig in die Quere zu kommen. Virtuelle Maschinen sind eine der grundlegenden Technologie für Cloud Computing. Zum Beispiel sind Amazon Elastic Compute Cloud (EC2) Instanzen virtuelle Server in AWS. EC2 benutzt VM Technologie, um jedem Kunden ein eigenes isoliertes Betriebssystem bereitzustellen. Durch die VM Technologie können die Betriebssysteme von mehreren Kunden auf einem physikalischen Server laufen. Dies erhöht die Effizienz in den Datenzentren.
Eine weitere Abstraktion sind Container. Ein Container beinhaltet nur die Applikation und die Abhängigkeiten für die Applikation. Ein Container beinhaltet kein vollständiges Betriebssystem. Stattdessen übersetzt eine Container Engine die Anfragen von der Applikation an das Host-Betriebssystem. Zudem isoliert die Container Engine mehrere Container auf einem Host-Betriebssystem. Ein Container ist leichtgewichtiger, verglichen mit einer Virtuellen Maschine. Die meisten Applikationen brauchen kein vollständiges Betriebssystem. Eine Virtuelle Maschine ist also sozusagen ein “overkill” zum Ausführen vieler Applikationen. Verglichen mit einer Virtuellen Maschine braucht ein Container weniger Speicherplatz, da kein Speicher für das Betriebssystem benötigt wird. Außerdem kann ein Container schneller gestartet werden als eine Virtuelle Maschine. Eine Virtuelle Maschien muss zuerst das Gast-Betriebssystem starten. Genau wie beim Neustarten von deinem Computer, dauert das Starten vom Gast-Betriebssystem einige Sekunden.
Docker ist eine Software, die die Bereitstellung von Anwendungen vereinfacht, indem Container, die alle notwendigen Abhängigkeiten und der gesamte Code enthalten und sich als Dateien transportieren und installieren lassen. Der Container wird ausgeführt und wenn sein Auftrag beendet ist, wird der Container automatisch beendet.
Docker-Images werden als Docker-Container ausgeführt und enthalten die Anweisungen zum Erstellen von Containern. Die Images können nicht geändert werden und um Änderungen vorzunehmen, muss ein neues Image erstellt werden. Die Images können in einem Repository gespeichert werden. Durch das Speichern in einem Repository kann Image einfach mit anderen Nutzern geteilt werden. Ein Container Registry hilft bei der Verwaltung von Repositories.
Amazon Elastic Container Registry (Amazon ECR) ist eine vollständig verwaltete Container-Registry, die das Speichern, Verwalten und zur Verfügung stellen von Container-Images erleichtert. Ohne die Infrastruktur im Hintergrund verwalten zu müssen, können Container-Images direkt in das Repository gepusht werden und einfach genutzt werden. Der Speicher für die Container-Images ist hochverfügbar und beständig. Da Amazon ECR mit anderen AWS Services wie beispielsweise Amazon Elastic Container Service (Amazon ECS) und Amazon Elastic Kubernetes Service (Amazon EKS) integriert ist, wird die Entwicklung bis zur fertigen Anwendung einfacher, da die Infrastruktur insgesamt nicht verwaltet werden muss, sondern selbstständig skaliert.
Für die Durchführung dieses Moduls werden zwei Container Repositories benötigt. Je ein Repository für den Front- und Backend Container.
Aufgabe:
Erstelle ein Repository für den Backend Container mit Hilfe von Amazon Elastic Container Registry und benenne es workshop-backend
.
Aufgabe:
Erstelle ein Repository für den Frontend Container mit Hilfe von Amazon Elastic Container Registry und benenne es workshop-frontend
.
git clone https://github.com/aws-samples/cloud-app-builders-modules-german.git
cloud-app-builders-modules-german
sichtbar und hat die gleiche Struktur und Inhalt wie das Github Repository.cd ./cloud-app-builders-modules-german/src/container-api
. Falls du dir mit dem Befehl unsicher bist, kannst du hier nochmal nachschauen.workshop-backend
Repository klicken.cd ../todo-frontend
. Da du schon im Directory cloud-app-builders-modules-german/src/ bist, wechseln wir vom Ordner container-api zu todo-frontend.workshop-frontend
Repository klicken.workshop-backend
klicken.workshop-frontend
Repository wiederholen.Herzlichen Glückwunsch! Du hast zwei Container Repositories in Amazon ECR für die Speicherung der Container Images erstellt. In der Cloud9 IDE hast du zudem die beiden Container Images erstellt und über die Push Kommandos der Repositories in Amazon ECR direkt dorthin kopiert. Im nächsten Schritt wird ein Container Cluster aufgesetzt und manuell Container des Frontend-Images als Test gestartet.