ECS-verwaltete Docker-Konfiguration - 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.

ECS-verwaltete Docker-Konfiguration

Dockerrun.aws.json ist eine Elastic-Beanstalk-Konfigurationsdatei, die beschreibt, wie eine Reihe von Docker-Containern bereitgestellt wird, die in einem ECS-Cluster in einer Elastic-Beanstalk-Umgebung bereitgestellt wird. Die Elastic Beanstalk-Plattform erstellt eine ECS-Aufgabendefinition, die eine ECS-Container-Definition beinhaltet. Diese Definitionen werden in der Dockerrun.aws.json-Konfigurationsdatei beschrieben.

Die Container-Definition in der Dockerrun.aws.json-Datei beschreibt die Container, die auf jeder Amazon-EC2-Instance im ECS-Cluster bereitgestellt werden sollen. In diesem Fall wird eine Amazon-EC2-Instance auch als Host-Container-Instance bezeichnet, da sie die Docker-Container hostet. Die Konfigurationsdatei beschreibt auch die Datenvolumen, die auf der Host-Container-Instance erstellt werden müssen, damit die Docker-Container gemountet werden können. Weitere Informationen und ein Diagramm der Komponenten in einer von ECS verwalteten Docker-Umgebung auf Elastic Beanstalk finden Sie unter ECS-verwaltete Docker-Plattform weiter oben in diesem Kapitel.

Eine Dockerrun.aws.json-Datei kann alleine verwendet oder mit einem zusätzlichen Quell-Code in einem einzigen Archiv zu einer ZIP-Datei gepackt werden. Quellcode, der mit einer Dockerrun.aws.json-Datei archiviert wird, wird in Amazon EC2-Container-Instances bereitgestellt und ist im /var/app/current/-Verzeichnis zugänglich.

Dockerrun.aws.json v2

Der Abschnitt Dockerrun.aws.json enthält die folgenden Bereiche:

AWSEBDockerrunVersion

Gibt die Versionsnummer als Wert 2 für ECS-verwaltete Docker-Umgebungen an.

volumes

Erstellt Volumes aus Ordnern in der Amazon EC2-Container-Instance oder aus Ihrem Quell-Bundle (bereitgestellt in /var/app/current). Mounten Sie diese Volumen auf Pfade innerhalb Ihrer Docker-Container mit mountPoints im containerDefinitions-Abschnitt.

containerDefinitions

Ein Array von Containerdefinitionen.

Authentifizierung (optional)

Der Speicherort in Amazon S3 für eine .dockercfg-Datei, die Authentifizierungsdaten für ein privates Repository enthält.

Die Bereiche für die Containerdefinition und Volumes von Dockerrun.aws.json verwenden die gleiche Formatierung wie die entsprechenden Bereiche einer Amazon-ECS-Aufgabendefinition. Weitere Informationen zum Aufgabendefinitionsformat und eine vollständige Liste der Aufgabendefinitionsparameter finden Sie in den Amazon-ECS-Aufgabendefinitionen im Entwicklerhandbuch für Amazon Elastic Container Service.

Volume-Format

Der Volume-Parameter erstellt Volumes aus Ordnern in der Amazon-EC2-Container-Instance oder aus Ihrem Quell-Bündel (bereitgestellt in /var/app/current).

Volumes werden in folgendem Format angegeben:

"volumes": [ { "name": "volumename", "host": { "sourcePath": "/path/on/host/instance" } } ],

Mounten Sie diese Volumes auf Pfade innerhalb Ihrer Docker-Container mit mountPoints in der Containerdefinition.

Elastic Beanstalk konfiguriert zusätzliche Volumes für Protokolle, eines für jeden Container. Diese sollten von Ihren Docker-Containern bereitgestellt werden, um Protokolle an die Host-Instance zu schreiben.

Weitere Informationen finden Sie in dem mountPoints-Feld im folgenden Abschnitt Container-Definitionsformat.

Format der Containerdefinition

Die folgenden Beispiele zeigen eine Teilmenge von Parametern, die allgemein im Abschnitt containerDefinitions verwendet werden. Weitere optionale Parameter sind verfügbar.

Die Elastic-Beanstalk-Plattform erstellt eine ECS-Aufgabendefinition, die eine ECS-Container-Definition beinhaltet. Beanstalk unterstützt eine Teilmenge von Parametern für die ECS-Container-Definition. Weitere Informationen finden Sie unter Container-Definitionen im Entwicklerhandbuch für Amazon Elastic Container Service.

Eine Dockerrun.aws.json-Datei enthält ein Array aus einem oder mehreren Containerdefinitionsobjekten mit den folgenden Feldern:

Name

Name des Containers. Weitere Informationen über die maximale Länge und die zulässigen Zeichen finden Sie unter Standardparameter für Containerdefinition.

Abbild

Der Name eines Docker-Image in einem Online-Docker-Repository, aus dem Sie einen Docker-Container erstellt haben. Beachten Sie diese Konventionen:

  • Abbilder in offiziellen Repositorys in Docker Hub verwenden einen einzelnen Namen (z. B. ubuntu oder mongo).

  • Images in anderen Repositorys in Docker Hub sind mit einem Organisationsnamen qualifiziert (z. B, amazon/amazon-ecs-agent.

  • Abbilder in anderen Online-Repositorys sind durch einen Domänennamen zusätzlich qualifiziert (z. B, quay.io/assemblyline/ubuntu).

Umgebung

Ein Array an Umgebungsvariablen, die an den Container übergeben werden.

Der folgende Eintrag definiert beispielsweise eine Umgebungsvariable mit dem Namen Container und dem Wert PHP:

"environment": [ { "name": "Container", "value": "PHP" } ],
essential

„true“, wenn die Aufgabe stoppen soll, wenn der Container fehlschlägt. Unwesentliche Container können abschließen oder abstürzen, ohne dass dies Auswirkungen auf die restlichen Container in der Instance hat.

memory

Größe des Speichers auf der Container-Instance, die für den Container reserviert werden soll. Geben Sie eine Ganzzahl ungleich null für einen oder beide der Parameter memory oder memoryReservation in Containerdefinitionen an.

memoryReservation

Die weiche Arbeitsspeichergrenze (in MiB) für die Reservierung für den Container. Geben Sie eine Ganzzahl ungleich null für einen oder beide der Parameter memory oder memoryReservation in Containerdefinitionen an.

mountPoints

Volumes aus der Amazon EC2-Container-Instance, die gemountet werden soll und der Speicherort im Docker-Container-Dateisystem, an dem sie gemountet werden sollen. Wenn Sie Volumes mounten, die mit Anwendungs-Inhalte enthalten, kann Ihr Container die Daten lesen, die Sie in Ihrem Quell-Bundle hochladen. Wenn Sie Protokoll-Volumes für das Schreiben von Protokolldaten mounten, kann Elastic Beanstalk Protokolldaten von diese Volumes erfassen.

Elastic Beanstalk erstellt Protokoll-Volumes auf der Container-Instance, eines für jeden Docker-Container, unter /var/log/containers/containername. Diese Volumes haben die Bezeichnung awseb-logs-containername und sollten in das Verzeichnis innerhalb der Container-Dateistruktur bereitgestellt werden, in dem Protokolle geschrieben werden.

Beispiel: Der folgende Mounting-Punkt weist den nginx-Protokoll-Standort im Container dem von Elastic Beanstalk generierten Volume für den nginx-proxy-Container zu.

{ "sourceVolume": "awseb-logs-nginx-proxy", "containerPath": "/var/log/nginx" }
portMappings

Ordnet Netzwerk-Ports auf dem Container Ports auf dem Host zu.

links

Liste der Container, zu denen Link erstellt werden soll. Verknüpfte Container können sich gegenseitig erkennen und sicher kommunizieren.

volumesFrom

Mounten aller Volumes aus einem anderen Container. Zum Beispiel zum Mounten von Volumes aus einem Container mit dem Namen web:

"volumesFrom": [ { "sourceContainer": "web" } ],

Authentifizierungsformat – Verwenden von Images aus einem privaten Repository

Der authentication-Abschnitt enthält Authentifizierungsdaten für ein privates Repository. Dieser Eintrag ist optional.

Fügen Sie die Informationen über den Amazon S3-Bucket hinzu, der die Authentifizierungsdatei im authentication-Parameter der Dockerrun.aws.json-Datei enthält. Stellen Sie sicher, dass der authentication-Parameter einen gültigen Amazon S3-Bucket und -Schlüssel enthält. Der Amazon S3-Bucket muss in derselben Region gehostet sein wie die Umgebung, die ihn verwendet. Elastic Beanstalk lädt keine Dateien von Amazon S3-Buckets herunter, die in anderen Regionen gehostet werden.

Verwendet das folgende Format:

"authentication": { "bucket": "DOC-EXAMPLE-BUCKET", "key": "mydockercfg" },

Weitere Informationen zum Generieren und Hochladen der Authentifizierungsdatei finden Sie unter Verwenden von Images aus einem privaten Repository im Thema Umgebungskonfiguration in diesem Kapitel.

Beispiel Dockerrun.aws.json v2

Der folgende Codeausschnitt ist ein Beispiel, das die Syntax der Dockerrun.aws.json-Datei für eine Instance mit zwei Containern zeigt.

{ "AWSEBDockerrunVersion": 2, "volumes": [ { "name": "php-app", "host": { "sourcePath": "/var/app/current/php-app" } }, { "name": "nginx-proxy-conf", "host": { "sourcePath": "/var/app/current/proxy/conf.d" } } ], "containerDefinitions": [ { "name": "php-app", "image": "php:fpm", "environment": [ { "name": "Container", "value": "PHP" } ], "essential": true, "memory": 128, "mountPoints": [ { "sourceVolume": "php-app", "containerPath": "/var/www/html", "readOnly": true } ] }, { "name": "nginx-proxy", "image": "nginx", "essential": true, "memory": 128, "portMappings": [ { "hostPort": 80, "containerPort": 80 } ], "links": [ "php-app" ], "mountPoints": [ { "sourceVolume": "php-app", "containerPath": "/var/www/html", "readOnly": true }, { "sourceVolume": "nginx-proxy-conf", "containerPath": "/etc/nginx/conf.d", "readOnly": true }, { "sourceVolume": "awseb-logs-nginx-proxy", "containerPath": "/var/log/nginx" } ] } ] }