In diesem Modul erstellen Sie das Container-Image für Ihre monolithische node.js-Anwendung und schieben es in die Amazon Elastic Container Registry. Die Erstellung beginnen.

Bereitstellung auf Amazon ECR

Mit Containern können Sie Code, Konfigurationen und Abhängigkeiten einer Anwendung in einfach zu handhabende Bausteine verpacken, die Umgebungskonsistenz, operative Effizienz, Entwicklerproduktivität und Versionskontrolle bieten. Container können gewährleisten, dass Anwendungen schnell, zuverlässig und konsistent bereitgestellt werden, unabhängig von der Bereitstellungsumgebung.

Architektur-Übersicht

Geschwindigkeit
Das Starten eines Containers mit einer neuen Code-Version kann ohne erheblichen Implementierungsaufwand durchgeführt werden. Die Betriebsgeschwindigkeit wird verbessert, da der in einem Container auf dem lokalen Computer eines Entwicklers erstellte Code durch Verschieben des Containers auf einen Testserver einfach verschoben werden kann. Während der Erstellung kann dieser Container mit anderen Containern verknüpft werden, die zum Ausführen des Anwendungsstapels erforderlich sind.

Abhängigkeitskontrolle und verbesserte Pipeline
Ein Docker-Container-Image ist eine Zeiterfassung des Codes und der Abhängigkeiten einer Anwendung. Dadurch kann ein technisches Unternehmen eine Standardpipeline für den Anwendungslebenszyklus erstellen. Beispiel:

  1. Entwickler erstellen und führen den Container lokal aus.
  2. Der Continuous Integration Server führt den gleichen Container aus und führt Integrationstests gegen ihn aus, um die Erwartungen zu erfüllen.
  3. Der gleiche Container wird an eine Staging-Umgebung geliefert, wo sein Laufzeitverhalten mithilfe von Belastungstests oder manueller QA überprüft werden kann.
  4. Der gleiche Container wird an die Produktion übergeben.

Das Erstellen, Testen, Übergeben und Ausführen des exakt gleichen Containers über alle Stufen der Integrations- und Bereitstellungspipeline hinweg macht die Bereitstellung einer qualitativ hochwertigen, zuverlässigen Anwendung erheblich einfacher.

Dichte und Ressourceneffizienz
Container ermöglichen eine verbesserte Ressourceneffizienz, da mehrere heterogene Prozesse auf einem einzigen System ausgeführt werden können. Ressourceneffizienz ist ein natürliches Ergebnis der Isolierungs- und Zuordnungstechniken, die Container verwenden. Container können eingeschränkt werden, damit sie nur bestimmte CPU- und Speichermengen eines Hosts verbrauchen. Wenn Sie verstehen, welche Ressourcen ein Container benötigt und welche Ressourcen vom zugrunde liegenden Hostserver verfügbar sind, können Sie die von Ihnen verwendeten Rechenressourcen mit kleineren Hosts richtig dimensionieren oder die Dichte von Prozessen auf einem einzelnen großen Host erhöhen, die Verfügbarkeit erweitern und den Ressourcenverbrauch optimieren.

Flexibilität
Die Flexibilität von Docker-Containern basiert auf deren Portabilität, einfacher Bereitstellung und geringer Größe. Im Gegensatz zur Installation und Konfiguration, die auf einer VM erforderlich ist, können Verpackungsservices innerhalb von Containern einfach zwischen Hosts verschoben, vom Ausfall anderer benachbarter Services isoliert und vor fehlerhaften Patches oder Software-Upgrades auf dem Hostsystem geschützt werden. 

Benötigte Zeit: 20 Minuten

Verwendete Services:


Im ersten Teil dieses Tutorials erstellen Sie das Docker-Container-Image für Ihre monolithische node.js-Anwendung und schieben es in die Amazon Elastic Container Registry. Klicken Sie auf jede Schrittnummer, um den Abschnitt zu erweitern.

break-the-monolith
  • Schritt 1. Richten Sie das Setup ein

    In den nächsten Schritten verwenden Sie Docker, GitHub, Amazon ECS und Amazon ECR, um den Code in den Containern zu implementieren. Damit Sie diese Schritte ausführen können, müssen Sie über die richtigen Tools verfügen.

    1. Sie benötigen ein AWS-Konto: Falls Sie noch kein AWS-Konto haben, können Sie sich hier anmelden. Alle Übungen in diesem Tutorial sind so konzipiert, dass sie durch das kostenlose AWS-Kontingent gedeckt sind.
      ⚐ HINWEIS: Für einige der Services, die Sie verwenden, muss Ihr Konto möglicherweise länger als 12 Stunden aktiv sein. Wenn Probleme mit Services auftreten und Sie ein neu erstelltes Konto haben, warten Sie bitte einige Stunden und versuchen Sie es erneut.
    2. Installieren Sie Docker: Sie verwenden Docker, um die Image-Dateien zu erstellen, die Sie in Ihrem Containern ausführen. Docker ist ein Open-Source-Projekt und kann hier für Mac oder Windows heruntergeladen werden.
      Sobald Docker installiert ist, können Sie durch das Ausführen von Docker --version im Terminal überprüfen, ob es funktioniert. Sie müssen etwas sehen wie Docker Version 17.03.0-ce, Build 60ccb22.
    3. Installieren Sie die AWS CLI
      • Sie verwenden die AWS-Befehlszeilenschnittstelle (CLI), um die Bilder an die Amazon Elastic Container-Registry zu senden. Sie können hier mehr über die CLI erfahren.
      • Sobald die AWS-CLI installiert ist, können Sie durch das Ausführen von aws --version im Terminal überprüfen, ob sie funktioniert. Sie müssen etwas sehen wie aws-cli/1.11.63 Python/2.7.10 Darwin/16.5.0 botocore/1.5.26.
      • Wenn Sie die AWS-CLI bereits installiert haben, führen Sie den folgenden Befehl im Terminal aus, damit sie auf die neueste Version aktualisiert wird: pip install awscli --upgrade --user
    4. Sie benötigen einen Texteditor: Falls Sie noch keinen Texteditor für die Codierung haben, sollten Sie einen Texteditor in Ihrer lokalen Umgebung installieren. Atom ist ein einfacher Open-Source-Texteditor von GitHub, der bei Entwicklern sehr beliebt ist.
  • Schritt 2. Laden Sie das Projekt herunter und öffnen Sie es

    Laden Sie den Code von GitHub herunter: Navigieren Sie zu https://github.com/awslabs/amazon-ecs-nodejs-microservices und wählen Sie „Clone or Download“, um das GitHub-Repository auf Ihre lokale Umgebung herunterzuladen. Sie können auch GitHub Desktop oder Git verwenden, um das Repository zu klonen.

    Öffnen Sie die Projektdateien: Starten Sie Atom, wählen Sie "Projektordner hinzufügen" und wählen Sie den Ordner aus, in dem Sie das Repository amazon-ecs-nodejs-microservices gespeichert haben. Dadurch wird das gesamte Projekt zu Atom hinzugefügt, sodass Sie problemlos damit arbeiten können.

    In Ihrem Projektordner sehen Sie nun die Ordner für Infrastruktur und Services. Infrastruktur enthält den Infrastrukturkonfigurationscode für die AWS CloudFormation, den Sie im nächsten Schritt verwenden. Der Services-Ordner enthält den Code, der die node.js-Anwendung bildet.

    Nehmen Sie sich ein paar Minuten Zeit, um sich durch die Dateien zu klicken und sich mit den verschiedenen Aspekten der Anwendung vertraut zu machen, einschließlich der Datenbank db.json, dem Server server.js, package.json und der Docker-Anwendung.

    Microservices-Projekt
  • Schritt 3. Stellen Sie ein Repository bereit

    Erstellen Sie das Repository:


    Bewahren Sie die Repository-Informationen auf:

    • Nachdem Sie "Weiter" angeklickt haben, erscheint die folgende Meldung:
    erstellen
    • Die Repository-Adresse folgt einem einfachen Format: [account-id].dkr.ecr.[region].amazonaws.com/[repo-name].

     

    ⚐ HINWEIS: Sie benötigen diese Adresse, einschließlich Ihrer Konto-ID und der Region, die Sie in den nächsten Schritten verwenden.

  • Schritt 4. Erstellen und verschieben Sie das Docker-Image

    Öffnen Sie Ihr Terminal, und geben Sie Ihren Pfad zum 2-containerized/services/api-Bereich des GitHub-Codes im Verzeichnis ein, in das Sie ihn geklont oder heruntergeladen haben: ~/amazon-ecs-nodejs-microservices/2-containerized/services/api.

    Authentifizieren Sie die Docker-Anmeldung mit AWS:

    1. Führen Sie aws ecr get-login --no-include-email --region [region] aus. Beispiel: aws ecr get-login --no-include-email --region us-west-2 Wenn Sie die AWS-CLI noch nie zuvor verwendet haben, müssen Sie möglicherweise Ihre Anmeldeinformationen konfigurieren.
    2. Sie erhalten eine massive Ausgabe, beginnend mit docker login -u AWS -p ... Kopieren Sie die gesamte Ausgabe, fügen Sie sie im Terminal ein und führen Sie sie aus.
    3. Sie sollten sehen, dass die Anmeldung erfolgreich war.

    ⚐ HINWEIS: Wenn diese Anmeldung nicht erfolgreich ist, liegt das möglicherweise daran, dass Sie eine neuere Version von Docker haben, die "-e none"-Markierung entfernt hat. Um dies zu korrigieren, fügen Sie die Ausgabe in Ihren Texteditor ein, entfernen Sie "-e none" vom Ende der Ausgabe und führen Sie die aktualisierte Ausgabe im Terminal aus.

    • Erstellen Sie das Image: Führen Sie im Terminal docker build -t api aus. HINWEIS: Der . ist hier wichtig.
    • Markieren Sie das Image: Nachdem die Erstellung abgeschlossen ist, markieren Sie das Image, damit Sie es in das Repository verschieben können: docker tag api:latest [account-id].dkr.ecr.[region].amazonaws.com/api:v1

    ⚐ Pro-Tipp: :v1 steht für das Build der Image-Version. Jedes Mal, wenn Sie das Image erstellen, sollten Sie diese Versionsnummer erhöhen. Wenn Sie ein Skript verwenden, können Sie eine automatische Nummer verwenden, z. B. einen Zeitstempel, um das Bild zu markieren. Dies ist eine bewährte Methode, mit der Sie künftig problemlos zu einem früheren Build des Container-Images zurückkehren können.

    • Verschieben Sie das Bild zum ECR: Führen Sie docker push aus, um Ihr Image zum ECR zu verschieben: docker push [account-id].dkr.ecr.[region].amazonaws.com/api:latest

    Wenn Sie zu Ihrem ECR-Repository navigieren, sollten Sie Ihr mit der neuesten Markierung versehenes Image sehen.

    images