Container Image

Themen

Einleitung

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.

Vergleich Bare Metal, Betriebssystem, Virtuelle Machine, Containers

Technische Konzepte

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.

Relevante AWS Services

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.


Anwendung

Erstellen der Container Repositories

Für die Durchführung dieses Moduls werden zwei Container Repositories benötigt. Je ein Repository für den Front- und Backend Container.

Repository für Backend Container:

Aufgabe: Erstelle ein Repository für den Backend Container mit Hilfe von Amazon Elastic Container Registry und benenne es workshop-backend.

Hinweis
Lösung

Repository für Frontend Container:

Aufgabe: Erstelle ein Repository für den Frontend Container mit Hilfe von Amazon Elastic Container Registry und benenne es workshop-frontend.

Lösung

Klonen des Source Code Repositories

  1. Öffne deine Cloud9 IDE, die du im Einleitung Kapitel erstellt hast. Tipp: Zum Öffnen gehe dazu unter Services zu dem Dienst Cloud9.
  2. Kopiere nun in dein Terminal folgenden Befehl. Dadurch wird das GitHub Repository für diesen Workshop geklont. Das kann einen Moment dauern.
git clone https://github.com/aws-samples/cloud-app-builders-modules-german.git
  1. Nun ist auf der linken Seite in Cloud9 der Ordner cloud-app-builders-modules-german sichtbar und hat die gleiche Struktur und Inhalt wie das Github Repository.

Erstellung und Veröffentlichung der Container Images

Erstellung des Backend Container Images:
  1. Im Terminal in Cloud9 in das Verzeichnis container-api wechseln mit cd ./cloud-app-builders-modules-german/src/container-api. Falls du dir mit dem Befehl unsicher bist, kannst du hier nochmal nachschauen.
  2. Zum Amazon ECR Browser Tab wechseln und dort auf das workshop-backend Repository klicken.
  3. Ein Klick auf View push commands zeigt die notwendigen Schritte als Kommandos für die Erstellung und die Publikation des Container Images. Da AWS Cloud9 eine Linux EC2-Instanz nutzt, brauchst du die macOS/Linux-Befehle.
  4. Die Kommandos nacheinander kopieren und in dem Terminal Fenster in der AWS Cloud9 Instanz einfügen und ausführen.
  5. Im Tab mit Amazon ECR das Fenster mit den push commands schliessen.
Erstellung des Frontend Container Images:
  1. Im Terminal in Cloud9 in das Verzeichnis todo-frontend wechseln mit cd ../todo-frontend. Da du schon im Directory cloud-app-builders-modules-german/src/ bist, wechseln wir vom Ordner container-api zu todo-frontend.
  2. Zum Amazon ECR Browser Tab wechseln und dort auf das workshop-frontend Repository klicken.
  3. Ein Klick auf View push commands zeigt die notwendigen Schritte als Kommandos für die Erstellung und die Publikation des Container Images. Da Cloud9 eine Linux EC2-Instanz nutzt, brauchst du die macOS/Linux-Befehle.
  4. Die Kommandos nacheinander kopieren und in dem Terminal Fenster in der AWS Cloud9 Instanz einfügen und ausführen.
  5. Im Tab mit Amazon ECR das Fenster mit den push commands schliessen.

Verifikation des Container Images

  1. Zurück zum Tab mit Amazon ECR wechseln.
  2. In der Repositroy Übersicht z.B. auf den Namen workshop-backend klicken.
  3. Hier wird nun das eben erstellte und veröffentlichte Container Image angezeigt.
  4. Im Punkt Image URI ist der Pfad zum Image abrufbar. Ein Klick auf Copy URI kopiert diesen in die Zwischenablage.
  5. Den Pfad auch wieder zwischenspeichern (am besten in einem Textfile). Der Pfad wird zum Referenzieren des Container Images im nächsten Schritt benötigt.
  6. Schritte 2-5 für das workshop-frontend Repository wiederholen.

Zusammenfassung und nächste Schritte

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.