Erstellen eines Container-Images zur Verwendung auf Amazon ECS - Amazon Elastic Container Service

Erstellen eines Container-Images zur Verwendung auf Amazon ECS

Amazon ECS verwendet Docker-Images in Aufgabendefinitionen, um Container zu launchen. Docker ist eine Technologie, die Ihnen die Tools zum Erstellen, Ausführen, Testen und Bereitstellen verteilter Anwendungen in Containern bereitstellt. Docker bietet eine exemplarische Vorgehensweise zum Bereitstellen von Containern auf Amazon ECS. Weitere Informationen finden Sie unter Bereitstellen von Docker-Containern auf Amazon ECS.

Der Zweck der hier beschriebenen Schritte besteht darin, Sie durch das Erstellen Ihres ersten Docker-Images zu führen und dieses Image an Amazon ECR, eine Container-Registry, zu übertragen, um es in Ihren Amazon-ECS-Aufgabendefinitionen zu verwenden. Diese Anleitung setzt voraus, dass Sie ein grundlegendes Verständnis davon haben, was Docker ist und wie es funktioniert. Weitere Informationen zu Docker finden Sie unter Was ist Docker? und im Thema Docker-Übersicht.

Wichtig

AWS und Docker haben zusammengearbeitet, um ein vereinfachtes Entwicklererlebnis zu ermöglichen, mit dem Sie Container in Amazon ECS direkt mithilfe von Docker-Tools bereitstellen und verwalten können. Sie können Ihre Container jetzt lokal mit Docker Desktop und Docker Compose erstellen und testen und sie dann in Amazon ECS on Fargate bereitstellen. Laden Sie Docker Desktop herunter und registrieren Sie sich optional für eine Docker-ID, um mit der Amazon ECS und Docker-Integration zu beginnen. Weitere Informationen finden Sie unter Docker-Desktop und Docker-ID-Anmeldung.

Voraussetzungen

Bevor Sie beginnen, stellen Sie sicher, dass die folgenden Voraussetzungen erfüllt sind.

  • Stellen Sie sicher, dass Sie die Einrichtungsschritte für Amazon ECR abgeschlossen haben. Weitere Informationen finden Sie unter Einrichtung für Amazon ECR im Benutzerhandbuch für Amazon Elastic Container Registry.

  • Ihr Benutzer verfügt über die erforderlichen IAM-Berechtigungen für den Zugriff auf den Amazon-ECR-Service und dessen Nutzung. Weitere Informationen finden Sie unter Amazon ECR-verwaltete Richtlinien.

  • Sie haben Docker installiert. Informationen zu Docker-Installationsschritten für Amazon Linux 2 finden Sie unter Installation von Docker auf Amazon Linux 2. Informationen zu allen anderen Betriebssystemen finden Sie in der Docker-Dokumentation unter Docker-Desktop-Übersicht.

  • Die AWS CLI muss installiert und konfiguriert sein. Weitere Informationen finden Sie unter Installieren der AWS Command Line Interface im AWS Command Line Interface-Leitfaden.

Wenn Sie keine lokale Entwicklungsumgebung haben oder benötigen und Docker mithilfe einer Amazon-EC2-Instance verwenden möchten, haben wir Ihnen die folgenden Schritte bereitgestellt, um eine Amazon-EC2-Instance mit Amazon Linux 2 zu launchen und Docker Engine und die Docker-CLI zu installieren.

Docker Desktop ist eine einfach zu installierende Anwendung für Ihre Mac- oder Windows-Umgebung, mit der Sie containerisierte Anwendungen und Microservices erstellen und gemeinsam nutzen können. Docker Desktop enthält Docker Engine, Docker CLI-Client, Docker Compose und andere Tools, die bei der Verwendung von Docker mit Amazon ECS hilfreich sind. Weitere Informationen zum Installieren von Docker Desktop unter Ihrem bevorzugten Betriebssystem finden Sie unter Docker-Desktop – Überblick.

So installieren Sie Docker auf einer Amazon-EC2-Instance

  1. Starten Sie eine Instance mit dem Amazon Linux 2 AMI. Weitere Informationen finden Sie unter Starten einer Instance im Benutzerhandbuch zu Amazon EC2 für Linux-Instances.

  2. Verbinden Sie sich mit der Instance. Weitere Informationen finden Sie unter Verbinden Sie sich mit Ihrer Linux-Instance im Benutzerhandbuch zu Amazon EC2 für Linux-Instances.

  3. Aktualisieren Sie die installierten Pakete und den Cache der Paketverwaltung auf Ihrer Instance.

    sudo yum update -y
  4. Installieren Sie das neueste Docker-Engine-Paket.

    sudo amazon-linux-extras install docker
    Wichtig

    In diesem Schritt wird davon ausgegangen, dass Sie das Amazon-Linux-2-AMI für Ihre Instance verwenden. Informationen zu allen anderen Betriebssystemen finden Sie unter Docker-Desktop-Übersicht.

  5. Starten Sie den Docker-Service.

    sudo service docker start

    (Optional) Um sicherzustellen, dass der Docker-Daemon nach jedem Systemneustart gestartet wird, führen Sie den folgenden Befehl aus:

    sudo systemctl enable docker
  6. Fügen Sie den ec2-user zur Gruppe docker hinzu, sodass Sie Docker-Befehle ohne Verwendung von sudo ausführen können.

    sudo usermod -a -G docker ec2-user
  7. Melden Sie sich ab und wieder an, um die neuen Berechtigungen der Gruppe docker zu übernehmen. Sie erreichen dies, indem Sie das aktuelle SSH-Terminalfenster schließen und sich über ein neues Terminalfenster wieder mit Ihrer Instance verbinden. Ihre neue SSH-Sitzung verfügt über die entsprechenden docker-Gruppenberechtigungen.

  8. Überprüfen Sie, ob Sie Docker-Befehle ohne sudo ausführen können.

    docker info
    Anmerkung

    In einigen Fällen müssen Sie möglicherweise Ihre Instance neu starten, um den ec2-user für den Zugriff auf den Docker-Daemon zu berechtigen. Versuchen Sie, Ihre Instance neu zu starten, wenn die folgende Fehlermeldung angezeigt wird:

    Cannot connect to the Docker daemon. Is the docker daemon running on this host?

Erstellen eines Docker-Image

Amazon ECS-Aufgabendefinitionen nutzen Docker-Images, um Container auf den Container-Instances in Ihren Clustern zu starten. In diesem Abschnitt erstellen Sie ein Docker-Image einer einfachen Webanwendung, testen es auf Ihrem lokalen System oder Ihrer Amazon-EC2-Instance und übertragen das Image direkt an das Container-Registry von Amazon ECR, um es in einer Amazon-ECS-Aufgabendefinition verwenden zu können.

So erstellen Sie ein Docker-Image einer einfachen Webanwendung

  1. Erstellen Sie eine Datei mit dem Namen Dockerfile. Eine Docker-Datei ist eine Manifestdatei, die das für Ihr Docker-Image zu verwendende Basis-Image sowie die Inhalte beschreibt, die Sie darauf installieren und ausführen möchten. Weitere Informationen zu Dockerfiles finden Sie unter Dockerfile Reference.

    touch Dockerfile
  2. Bearbeiten Sie die soeben von Ihnen erstellte Dockerfile und fügen Sie die folgenden Inhalte hinzu.

    FROM ubuntu:18.04 # Install dependencies RUN apt-get update && \ apt-get -y install apache2 # Install apache and write hello world message RUN echo 'Hello World!' > /var/www/html/index.html # Configure apache RUN echo '. /etc/apache2/envvars' > /root/run_apache.sh && \ echo 'mkdir -p /var/run/apache2' >> /root/run_apache.sh && \ echo 'mkdir -p /var/lock/apache2' >> /root/run_apache.sh && \ echo '/usr/sbin/apache2 -D FOREGROUND' >> /root/run_apache.sh && \ chmod 755 /root/run_apache.sh EXPOSE 80 CMD /root/run_apache.sh

    Diese Dockerfile verwendet das Ubuntu 18.04-Image. Die RUN-Anweisungen aktualisieren die Caches der Paketverwaltung, installieren einige Softwarepakete für den Webserver und schreiben dann den Inhalt "Hello World!" in das Dokumenten-Stammverzeichnis des Webservers. Die EXPOSE-Anweisung stellt Port 80 auf dem Container bereit, und die CMD-Anweisung startet den Webserver.

  3. Erstellen Sie das Docker-Image aus der Dockerfile.

    Anmerkung

    Einige Versionen von Docker erfordern im folgenden Befehl anstelle des unten angegebenen relativen Pfads den vollständigen Pfad zu Ihrer Dockerfile.

    docker build -t hello-world .
  4. Führen Sie docker images aus, um zu überprüfen, ob das Image korrekt erstellt wurde.

    docker images --filter reference=hello-world

    Ausgabe:

    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    hello-world         latest              e9ffedc8c286        4 minutes ago       241MB
  5. Führen Sie das neu erstellte Image aus. Die Option -p 80:80 ordnet den bereitgestellten Port 80 auf dem Container dem Port 80 auf dem Hostsystem zu. Weitere Informationen zu docker run finden Sie unter Referenz zu Docker run.

    docker run -t -i -p 80:80 hello-world
    Anmerkung

    Ausgabe vom Apache-Webserver wird im Terminal-Fenster angezeigt. Sie können die Meldung „Could not reliably determine the server's fully qualified domain name“ ignorieren.

  6. Öffnen Sie einen Browser und richten Sie ihn auf den Server aus, auf dem Docker ausgeführt und Ihr Container gehostet wird.

    • Wenn Sie eine EC2-Instance verwenden, ist dies der Wert für Öffentliche DNS für den Server. Dabei handelt es sich um dieselbe Adresse, mit der Sie eine Verbindung mit der Instance per SSH herstellen. Vergewissern Sie sich, dass die Sicherheitsgruppe für Ihre Instance eingehenden Datenverkehr auf Port 80 zulässt.

    • Wenn Sie Docker lokal ausführen, richten Sie Ihren Browser auf http://localhost/ aus.

    • Wenn Sie docker-machine auf einem Windows- oder Mac-Computer verwenden, suchen Sie mit dem Befehl docker-machine ip nach der IP-Adresse der VirtualBox-VM, auf der Docker gehostet wird. Dabei ersetzen Sie machine-name durch den Namen der von Ihnen verwendeten Docker Machine.

      docker-machine ip machine-name

    Sie sollten eine Webseite mit dem Text "Hello, World!" Nachricht sehen.

  7. Beenden Sie den Docker-Container, indem Sie Strg+C eingeben.

Senden Sie Ihr Image an die Amazon Elastic Container-Registry

Amazon ECR ist ein verwalteter AWS-Docker-Registrierungsservice. Sie können die Docker-Befehlszeilenschnittstelle (CLI) verwenden, um Images in Ihren Amazon ECR-Repositorys zu pushen, pullen und zu verwalten. Amazon ECR-Produktdetails, vorgestellte Fallbeispiele von Kunden und häufig gestellte Fragen finden Sie auf den Seiten mit den Amazon Elastic Container-Registry-Produktdetails.

So versehen Sie Ihr Image mit Tags und übertragen es per Push direkt zu Amazon ECR

  1. Erstellen Sie ein Amazon ECR-Repository, um Ihr hello-world-Image zu speichern. Notieren Sie sich den repositoryUri in der Ausgabe.

    Ersetzen Sie region durch Ihre AWS-Region, z. B. us-east-1.

    aws ecr create-repository --repository-name hello-repository --region region

    Ausgabe:

    {
        "repository": {
            "registryId": "aws_account_id",
            "repositoryName": "hello-repository",
            "repositoryArn": "arn:aws:ecr:region:aws_account_id:repository/hello-repository",
            "createdAt": 1505337806.0,
            "repositoryUri": "aws_account_id.dkr.ecr.region.amazonaws.com/hello-repository"
        }
    }
  2. Versehen Sie das hello-world-Abbild als Tag mit dem repositoryUri-Wert aus dem vorherigen Schritt.

    docker tag hello-world aws_account_id.dkr.ecr.region.amazonaws.com/hello-repository
  3. Führen Sie den Befehl aws ecr get-login-password aus. Geben Sie den Registrierungs-URI an, bei dem Sie sich authentifizieren möchten. Weitere Informationen finden Sie unter Registry-Authentifizierung im Benutzerhandbuch zu Amazon-Elastic-Container-Registry.

    aws ecr get-login-password | docker login --username AWS --password-stdin aws_account_id.dkr.ecr.region.amazonaws.com

    Ausgabe:

    Login Succeeded
    Wichtig

    Bei einem Fehler installieren oder aktualisieren Sie auf die neueste AWS CLI-Version. Weitere Informationen finden Sie unter Installieren der AWS Command Line Interface im AWS Command Line Interface-Leitfaden.

  4. Senden Sie das Image per Push mit dem repositoryUri-Wert aus dem vorherigen Schritt zu Amazon ECR.

    docker push aws_account_id.dkr.ecr.region.amazonaws.com/hello-repository

Bereinigen

Um mit dem Erstellen einer Amazon-ECS-Aufgabendefinition und dem Launchen einer Aufgabe mit Ihrem Container-Image fortzufahren, gehen Sie über zu Nächste Schritte. Wenn Sie Ihr Amazon ECR-Image nicht mehr nutzen möchten, können Sie das Repository löschen, sodass Ihnen keine Kosten für die Image-Speicherung anfallen.

aws ecr delete-repository --repository-name hello-repository --region region --force

Nächste Schritte

Nachdem Sie Ihr Container-Image erstellt und an Amazon ECR übertragen haben, sollten Sie die folgenden nächsten Schritten in Betracht ziehen.