Verwenden des Docker-Plattformzweigs - AWS Elastic Beanstalk

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Verwenden des Docker-Plattformzweigs

AWS Elastic Beanstalk kann Docker-Umgebungen starten, indem ein in einer Dockerfile beschriebenes Abbild erstellt oder ein Remote-Docker-Image geladen wird. Wenn Sie ein Remote-Docker-Image bereitstellen, müssen Sie keine einschließe Dockerfile. Falls Sie auch Docker Compose nutzen, verwenden Sie stattdessen eine docker-compose.yml-Datei, die das zu verwendende Image und zusätzliche Konfigurationsoptionen angibt. Wenn Sie Docker Compose in Ihren Docker-Umgebungen nicht nutzen, verwenden Sie stattdessen eine Dockerrun.aws.json-Datei.

Voraussetzungen

In diesem Tutorial wird davon ausgegangen, dass Sie über Kenntnisse zu den grundlegenden Elastic-Beanstalk-Operationen, den Elastic-Beanstalk-Befehlszeilenschnittstellen (EB CLI) und Docker verfügen. Sofern noch nicht geschehen, befolgen Sie die Anweisungen in Erste Schritte mit Elastic Beanstalk, um die erste Elastic-Beanstalk-Umgebung zu starten. Dieses Tutorial verwendet die EB CLI, aber Sie können auch mit der Elastic-Beanstalk-Konsole Umgebungen erstellen und Anwendungen hochladen.

Für diese Anleitung benötigen Sie außerdem die folgenden Docker-Komponenten:

  • Eine funktionierende lokale Installation von Docker. Weitere Informationen finden Sie unter Docker erhalten auf der Docker-Docs-Website.

  • Zugriff auf Docker-Hub. Sie müssen eine Docker-ID erstellen, um auf den Docker-Hub zuzugreifen. Weitere Informationen finden Sie unter Freigeben der Anwendung auf der Docker-Dokumentationswebsite.

Weitere Informationen über das Konfigurieren von Docker-Umgebungen auf Elastic-Beanstalk-Plattformen finden Sie unter Docker-Konfiguration in diesem Kapitel.

Containerisieren einer Elastic Beanstalk-Anwendung

In diesem Beispiel erstellen Sie ein Docker-Image der Flask-Beispielanwendung aus Bereitstellen einer Flask-Anwendung in Elastic Beanstalk. Die Anwendung besteht aus einer Hauptdate, application.py. Wir benötigen außerdem eine Dockerfile. Platzieren Sie beide Dateien im Stammverzeichnis.

~/eb-docker-flask/ |-- Dockerfile |-- application.py
Beispiel ~/eb-docker-flask/application.py
from flask import Flask # Print a nice greeting def say_hello(username = "World"): return '<p>Hello %s!</p>\n' % username # Some bits of text for the page header_text = ''' <html>\n<head> <title>EB Flask Test</title> </head>\n<body>''' instructions = ''' <p><em>Hint</em>: This is a RESTful web service! Append a username to the URL (for example: <code>/Thelonious</code>) to say hello to someone specific.</p>\n''' home_link = '<p><a href="/">Back</a></p>\n' footer_text = '</body>\n</html>' # Elastic Beanstalk looks for an 'application' that is callable by default application = Flask(__name__) # Add a rule for the index page application.add_url_rule('/', 'index', (lambda: header_text + say_hello() + instructions + footer_text)) # Add a rule when the page is accessed with a name appended to the site # URL application.add_url_rule('/<username>', 'hello', (lambda username: header_text + say_hello(username) + home_link + footer_text)) # Run the application if __name__ == "__main__": # Setting debug to True enables debug output. This line should be # removed before deploying a production application. application.debug = True application.run(host="0.0.0.0")
Beispiel ~/eb-docker-flask/Dockerfile
FROM python:3.6 COPY . /app WORKDIR /app RUN pip install Flask==1.0.2 EXPOSE 5000 CMD ["python", "application.py"]

Lokales Testen eines Containers

Verwenden Sie die Elastic Beanstalk CLI (EB CLI) zum Konfigurieren Ihres lokalen Repositorys für die Bereitstellung in Elastic Beanstalk. Legen Sie die Dockerfile Ihrer Anwendung im Stammverzeichnis fest.

~/eb-docker-flask$ eb init -p docker application-name

(Optional) Verwenden Sie den Befehl eb local run für die lokale Erstellung und Ausführung Ihres Containers.

~/eb-docker-flask$ eb local run --port 5000
Anmerkung

Weitere Informationen zum eb local-Befehl finden Sie unter eb local. Der Befehl wird unter Windows nicht unterstützt. Alternativ können Sie Ihre Container mit den Befehlen docker build und docker run erstellen und ausführen. Weitere Informationen finden Sie in der Docker-Dokumentation.

(Optional) Wenn Ihr Container ausgeführt wird, verwenden Sie den eb local open-Befehl, um Ihre Anwendung in einem Webbrowser anzuzeigen. Alternativ öffnen Sie http://localhost:5000/ in einem Webbrowser.

~/eb-docker-flask$ eb local open

Bereitstellen eines Containers mit einer Dockerfile-Datei

Nachdem Sie Ihre Anwendung lokal getestet haben, stellen Sie sie in einer Elastic Beanstalk-Umgebung bereit. Elastic Beanstalk verwendet die Anweisungen in Ihrem Dockerfile, um das Image zu erstellen und auszuführen.

Verwenden Sie den Befehl eb create, um eine Umgebung zu erstellen und die Anwendung bereitzustellen.

~/eb-docker-flask$ eb create environment-name

Verwenden Sie nach dem Starten der Umgebung den Befehl eb open, um sie in einem Webbrowser anzuzeigen.

~/eb-docker-flask$ eb open

Testen eines Remote-Docker-Images

Als Nächstes erstellen wir ein Docker-Image der Flask-Anwendung aus dem vorherigen Abschnitt und übertragen es in den Docker Hub.

Hinweise
  • In den folgenden Schritten erstellen Sie ein öffentlich verfügbares Docker-Image.

  • Sie verwenden Docker-Befehle aus Ihrer lokalen Docker-Installation zusammen mit Ihren Docker-Hub-Anmeldeinformationen. Weitere Informationen finden Sie im vorangegangenen Voraussetzungen Abschnitt.

Nachdem das Image erstellt und gepusht wurde, kann es in Elastic Beanstalk mit einer docker-compose.yml-Datei bereitgestellt werden, wenn Sie Docker Compose in Ihrer Docker-Umgebung verwenden. Falls Sie Docker Compose in Ihrer Docker-Umgebung nicht nutzen, verwenden Sie stattdessen eine Dockerrun.aws.json-Datei. Um ein Docker-Image der Flask-Anwendung zu erstellen und in den Docker Hub zu übertragen, führen Sie die folgenden Befehle aus: Wir verwenden dasselbe Verzeichnis aus dem vorherigen Beispiel, aber Sie können jedes Verzeichnis mit dem Code Ihrer Anwendung verwenden. Geben Sie Ihre Docker-ID für docker-id, um sich bei Docker-Hub anzumelden.

~/eb-docker-flask$ docker build -t docker-id/beanstalk-flask:latest . ~/eb-docker-flask$ docker push docker-id/beanstalk-flask:latest
Anmerkung

Bevor Sie Ihr Image übertragen, müssen Sie möglicherweise ausführe docker login. Wenn Sie den Befehl ohne Parameter ausführen, werden Sie aufgefordert, Ihre Docker-Hub-Anmeldeinformationen einzugeben.

Falls Sie Ihre Docker-Umgebung mithilfe des Docker Compose-Tools verwalten, haben Sie nun die Möglichkeit, Ihre Anwendung nur mit einer docker-compose.yml-Datei bereitzustellen. Weitere Informationen zu docker-compose.yml-Dateien finden Sie unter Docker-Konfiguration.

Falls Sie Docker Compose nicht nutzen, verwenden Sie stattdessen eine Dockerrun.aws.json-Datei. Weitere Informationen finden Sie unter Bereitstellen mit Dockerrun.aws.json v1 (ohne Docker Compose).

Erstellen Sie ein neues Verzeichnis und eine docker-compose.yml-Datei.

Beispiel ~/remote-docker/docker-compose.yml
version: '3.8' services: beanstalk-flask: image: "username/beanstalk-flask" ports: - "80:5000"

Falls Sie Ihre Docker-Umgebung nicht mithilfe des Docker Compose-Tools verwalten, haben Sie nun die Möglichkeit, Ihre Anwendung nur mit einer Dockerrun.aws.json-Datei bereitzustellen. Weitere Informationen zu Dockerrun.aws.json-Dateien finden Sie unter Konfiguration für Docker-Plattformen (ohne Docker Compose) .

Erstellen Sie ein neues Verzeichnis und eine Dockerrun.aws.json-Datei.

Beispiel ~/remote-docker/Dockerrun.aws.json
{ "AWSEBDockerrunVersion": "1", "Image": { "Name": "username/beanstalk-flask", "Update": "true" }, "Ports": [ { "ContainerPort": "5000" } ] }

Verwenden Sie die EB CLI zum Konfigurieren Ihres lokalen Repositorys für die Bereitstellung in Elastic Beanstalk.

~/remote-docker$ eb init -p docker application-name

(Optional) Verwenden Sie eb local run für die lokale Erstellung und Ausführung Ihres Containers. Weitere Informationen zum eb local-Befehl finden Sie unter eb local.

~/remote-docker$ eb local run --port 5000

(Optional) Wenn Ihr Container ausgeführt wird, verwenden Sie den eb local open-Befehl, um Ihre Anwendung in einem Webbrowser anzuzeigen. Alternativ öffnen Sie http://localhost:5000/ in einem Webbrowser.

~/remote-docker$ eb local open

Bereitstellen eines Remote-Docker-Images in Elastic Beanstalk

Nachdem Sie Ihren Container lokal getestet haben, stellen Sie ihn in einer Elastic Beanstalk-Umgebung bereit. Elastic Beanstalk verwendet die docker-compose.yml-Datei, um Ihr Image abzurufen und auszuführen, wenn Sie Docker Compose verwenden. Ansonsten verwendet Elastic Beanstalk stattdessen Dockerrun.aws.json.

Verwenden Sie die EB CLI, um eine Umgebung zu erstellen und das Image bereitzustellen.

~/remote-docker$ eb create environment-name

Sobald Ihre Umgebung gestartet wurde, verwenden Sie eb open, um sie in einem Webbrowser anzuzeigen.

~/remote-docker$ eb open

Bereinigen

Wenn Sie nicht mehr mit Elastic Beanstalk arbeiten, können Sie Ihre Umgebung beenden. Elastic Beanstalk beendet alle AWS-Ressourcen der Umgebung, z. B. Amazon-EC2-Instances, Datenbank-Instances, Lastenverteilung, Sicherheitsgruppen und Alarme.

So beenden Sie die Elastic Beanstalk-Umgebung
  1. Öffnen Sie die Elastic-Beanstalk-Konsole und wählen Sie in der Liste Regions (Regionen) Ihre AWS-Region aus.

  2. Wählen Sie im Navigationsbereich Environments (Umgebungen) aus und wählen Sie dann in der Liste den Namen Ihrer Umgebung aus.

    Anmerkung

    Wenn Sie viele Umgebungen haben, filtern Sie Umgebungsliste mit der Suchleiste.

  3. Klicken Sie auf Actions (Aktionen) und dann auf Terminate Environment (Umgebung beenden).

  4. Verwenden Sie das Dialogfeld auf dem Bildschirm, um die Beendigung der Umgebung zu bestätigen.

Mit Elastic Beanstalk können Sie ganz einfach und jederzeit eine neue Umgebung für Ihre Anwendung erstellen.

Oder mit der EB CLI:

~/remote-docker$ eb terminate environment-name