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.
Docker-Konfiguration
In diesem Abschnitt wird beschrieben, wie Sie Ihr Docker-Image und Ihren Container für die Bereitstellung auf Elastic Beanstalk vorbereiten.
Docker-Umgebung mit Docker Compose
In diesem Abschnitt wird beschrieben, wie Sie Ihr Docker-Image und Ihren Container für die Bereitstellung auf Elastic Beanstalk vorbereiten. Jede Webanwendung, die Sie für Elastic Beanstalk in einer Docker-Umgebung bereitstellen, muss eine docker-compose.yml
-Datei enthalten, wenn Sie auch das Docker Compose-Tool verwenden. Sie können Ihre Webanwendung als containerisierten Dienst für Elastic Beanstalk bereitstellen, indem Sie eine der folgenden Aktionen ausführen:
-
Erstellen Sie eine
docker-compose.yml
-Datei, um ein Docker-Image aus einem gehosteten Repository für Elastic Beanstalk bereitzustellen. Wenn alle Ihre Bereitstellungen aus Images in öffentlichen Repositorys stammen, sind keine weiteren Dateien erforderlich. (Falls für Ihre Bereitstellung ein Image aus einem privaten Repository benötigt wird, müssen zusätzliche Konfigurationsdateien für die Authentifizierung eingeschlossen werden. Mehr Informationen dazu finden Sie unter Verwenden von Images aus dem privaten Repository.) Weitere Informationen zurdocker-compose.yml
-Datei finden Sie auf der Docker-Website in der Referenz zu Compose-Dateien. -
Erstellen Sie eine
Dockerfile
-Datei, damit von Elastic Beanstalk ein benutzerdefiniertes Image erstellt und ausgeführt werden kann. Diese Datei ist optional und von Ihren Bereitstellungsanforderungen abhängig. Weitere Informationen zurDockerfile
-Datei finden Sie auf der Docker-Website in der Dockerfile-Referenz. -
Erstellen Sie eine
.zip
-Datei mit Ihren Anwendungsdateien, sämtlichen Abhängigkeiten der Anwendungsdatei, derDockerfile
und derdocker-compose.yml
-Datei. Wenn Sie die EB CLI verwenden, um Ihre Anwendung bereitzustellen, wird automatisch eine.zip
-Datei erstellt. Die beiden Dateien müssen sich im Stammverzeichnis oder im oberste Level des.zip
-Archivs befinden.Wenn Sie nur eine
docker-compose.yml
-Datei verwenden, um Ihre Anwendung bereitzustellen, müssen Sie keine.zip
-Datei erstellen.
Dieses Thema ist eine Syntaxreferenz. Ausführliche Verfahren zum Starten von Docker-Umgebungen mit Elastic Beanstalk finden Sie unter Verwenden des Docker-Plattformzweigs.
Weitere Informationen zu Docker Compose und zur Installation von Docker Compose finden Sie auf den Docker-Websites Overview of Docker Compose
Anmerkung
Wenn Sie Ihre Docker-Umgebungen nicht mit Docker Compose konfigurieren, sollten Sie die docker-compose.yml
-Datei nicht verwenden. Verwenden Sie stattdessen die Dockerrun.aws.json
-Datei, die Dockerfile
-Datei oder beide.
Weitere Informationen finden Sie unter Konfiguration für Docker-Plattformen (ohne Docker Compose) .
Verwenden von Images aus einem privaten Repository
Elastic Beanstalk muss sich bei der Onlineregistrierung authentifizieren, die als Host für das private Repository fungiert, um Ihre Images aus einem privaten Repository pullen und bereitstellen zu können. Wir haben zwei Möglichkeiten, Anmeldeinformationen für Ihre Elastic Beanstalk-Umgebung zu speichern und abzurufen, um sich bei einem Repository zu authentifizieren.
-
Der AWS Secrets Manager
-
Die Datei
Dockerrun.aws.json v3
Sie können Elastic Beanstalk so konfigurieren, dass vor dem Start des Bereitstellungsprozesses eine Anmeldung bei Ihrem privaten Repository durchgeführt wird. Dadurch kann Elastic Beanstalk auf die Images aus dem Repository zugreifen und diese Images in Ihrer Elastic Beanstalk-Umgebung bereitstellen.
Durch diese Konfiguration werden Ereignisse in der Prebuild-Phase des Bereitstellungsprozesses von Elastic Beanstalk initiiert. Verwenden Sie zur Einrichtung das Konfigurationsverzeichnis .ebextentions. Von der Konfiguration werden Skripts vom Typ Plattform-Hook verwendet, die docker login aufrufen, um die Authentifizierung bei der Onlineregistrierung durchzuführen, die als Host für das private Repository fungiert. Diese Konfigurationsschritte werden im Anschluss detailliert beschrieben.
So konfigurieren Sie Elastic Beanstalk für die Authentifizierung bei Ihrem privaten Repository mit AWS Secrets Manager
Anmerkung
Für diese Schritte müssen bestimmte Berechtigungen erteilt werden. Weitere Informationen finden Sie unter der folgenden Referenz.
-
In Schritt 2 benötigen Sie Berechtigungen, um ein Secret zu erstellen. Weitere Beispiele finden Sie unter Beispiel: Berechtigung zum Erstellen von Secrets im AWS Secrets Manager-Benutzerhandbuch.
-
In Schritt 3 benötigen Sie Berechtigungen, um Geheimnisse mithilfe
secretsmanager
dynamischer Verweise abzurufen. Weitere Beispiele finden Sie unter Beispiel: Berechtigung zum Abrufen von Secret-Werten im AWS Secrets Manager-Benutzerhandbuch.
-
Erstellen Sie Ihre Verzeichnisstruktur für
.ebextensions
wie folgt:├── .ebextensions │ └── env.config ├── .platform │ ├── confighooks │ │ └── prebuild │ │ └── 01login.sh │ └── hooks │ └── prebuild │ └── 01login.sh ├── docker-compose.yml
-
Verwenden Sie AWS Secrets Manager, um die Anmeldeinformationen Ihres privaten Repositorys zu speichern, damit Elastic Beanstalk bei Bedarf Ihre Anmeldeinformationen abrufen kann. Führen Sie dazu den Befehl create-secret AWS CLI von Secrets Manager aus.
aws secretsmanager create-secret \ --name
MyTestSecret
\ --description "My image repo credentials created with the CLI.
" \ --secret-string "{\"USER\
":\"EXAMPLE-USERNAME\
",\"PASSWD\
":\"EXAMPLE-PASSWORD\
"}" -
Erstellen Sie die folgende Datei
env.config
und platzieren Sie sie im Verzeichnis.ebextensions
, wie in der obigen Verzeichnisstruktur gezeigt. Diese Konfiguration verwendet den Namespace aws:elasticbeanstalk:application:environment, um die UmgebungsvariablenUSER
undPASSWD
von Elastic Beanstalk mit dynamischen Referenzen zu AWS Secrets Manager zu initialisieren. Weitere Informationen zusecretsmanager
dynamischen Verweisen finden Sie im AWS Secrets ManagerBenutzerhandbuch unter Abrufen eines AWS Secrets Manager Secrets in einer AWS CloudFormation Ressource.Anmerkung
USER
undPASSWD
im Skript müssen den Zeichenfolgen entsprechen, die im obigen Befehlen vom Typsecretsmanager
create-secret verwendet wurden.option_settings: aws:elasticbeanstalk:application:environment: USER: '{{resolve:secretsmanager:MyTestSecret:SecretString:USER}}' PASSWD: '{{resolve:secretsmanager:MyTestSecret:SecretString:PASSWD}}'
-
Erstellen Sie die folgende Skriptdatei
01login.sh
und platzieren Sie sie in den folgenden Verzeichnissen, wie ebenfalls in der obigen Verzeichnisstruktur gezeigt:-
.platform/confighooks/prebuild
-
.platform/hooks/prebuild
### example 01login.sh #!/bin/bash USER=/opt/elasticbeanstalk/bin/get-config environment -k USER /opt/elasticbeanstalk/bin/get-config environment -k PASSWD | docker login -u $USER --password-stdin
Das
01login.sh
-Skript ruft das get-config Plattformskript auf, um die Repository-Anmeldeinformationen abzurufen und sich beim Repository anzumelden. Es speichert den Benutzernamen in der Skript-VariablenUSER
. In der nächsten Zeile wird das Passwort abgefragt. Anstatt das Passwort in einer Variablen zu speichern, leitet das Skript das Passwort direkt an den docker login-Befehl imstdin
-Eingabestream weiter. Die--password-stdin
-Option verwendet den Eingabestream, sodass Sie das Passwort nicht in einer Variablen speichern müssen. Weitere Informationen zur Authentifizierung mit der Docker-Befehlszeilenschnittstelle finden Sie unter Docker-Loginauf der Docker-Dokumentationswebsite. Hinweise
-
Alle Skriptdateien müssen über die Ausführungsberechtigung verfügen. Legen Sie mit chmod +x die Ausführungsberechtigung für Ihre Hook-Dateien fest. Für alle auf Amazon Linux 2 basierenden Plattformversionen, die am oder nach dem 29. April 2022 veröffentlicht wurden, gewährt Elastic Beanstalk automatisch Ausführungsberechtigungen für alle Plattform-Hook-Skripts. In diesem Fall müssen Sie Ausführungsberechtigungen nicht manuell erteilen. Eine Liste dieser Plattformversionen finden Sie in den Versionshinweisen vom 29. April 2022 – Linux-Plattform im AWS Elastic Beanstalk-Leitfaden für Versionshinweise.
-
Bei Hook-Dateien kann es sich um Binär- oder Skriptdateien handeln, die mit einer #!-Zeile mit dem Interpreter-Pfad beginnen (z. B. #!/bin/bash).
-
Weitere Informationen finden Sie in Erweitern von Elastic Beanstalk-Linux-Plattformen unter Plattform-Hooks.
-
Wenn sich Elastic Beanstalk bei der Onlineregistrierung authentifiziert, die als Host für das private Repository fungiert, können Sie Ihre Images abrufen und bereitstellen.
In diesem Abschnitt wird eine andere Methode für die Authentifizierung von Elastic Beanstalk bei einem privaten Repository beschrieben. Dabei wird eine Authentifizierungsdatei mit dem Docker-Befehl erstellt und in einen Amazon S3-Bucket hochgeladen. In der Datei Dockerrun.aws.json v3
müssen auch die Bucket-Informationen eingeschlossen werden.
So generieren Sie eine Authentifizierungsdatei und stellen sie in Elastic Beanstalk bereit
-
Erstellen Sie eine Authentifizierungsdatei mit dem docker login-Befehl. Für Repositorys auf Docker Hub führen Sie au docker login:
$
docker login
Für andere Registrys fügen Sie die URL des Registry-Servers ein:
$
docker login
registry-server-url
Anmerkung
Wenn Ihre Elastic Beanstalk-Umgebung die Amazon Linux AMI-Docker-Plattformversion verwendet (vor Amazon Linux 2), lesen Sie die entsprechenden Informationen unter Docker-Konfiguration auf Amazon Linux AMI (Vorgängerversion von Amazon Linux 2).
Weitere Informationen zur Authentifizierungsdatei finden Sie unter Store images on Docker Hub
und docker login auf der Docker-Website. -
Laden Sie eine Kopie der Authentifizierungsdatei mit dem Namen
.dockercfg
in einen sicheren Amazon S3-Bucket hoch.-
Der Amazon-S3-Bucket muss in derselben AWS-Region gehostet sein wie die Umgebung, die ihn verwendet. Elastic Beanstalk kann keine Dateien von einem Amazon S3-Bucket herunterladen, der in anderen Regionen gehostet wird.
-
Erteilen Sie Berechtigungen für den Vorgang
s3:GetObject
für die IAM-Rolle im Instance-Profil. Weitere Informationen finden Sie unter Elastic Beanstalk Instance-Profile verwalten.
-
-
Schließen Sie die Amazon S3-Bucket-Informationen in den
Authentication
-Parameter der DateiDockerrun.aws.json v3
ein.Im Anschluss sehen Sie ein Beispiel für eine
Dockerrun.aws.json v3
-Datei.{ "AWSEBDockerrunVersion": "3", "Authentication": { "bucket": "
DOC-EXAMPLE-BUCKET
", "key": "mydockercfg
" } }Anmerkung
Der
AWSEBDockerrunVersion
-Parameter gibt die Version derDockerrun.aws.json
-Datei an.-
Die Docker Amazon Linux 2-Plattform verwendet die Datei
Dockerrun.aws.json v3
für Umgebungen, in denen Docker Compose zum Einsatz kommt. Die DateiDockerrun.aws.json v1
wird für Umgebungen genutzt, in denen Docker Compose nicht verwendet wird. -
Die Amazon Linux AMI-Multicontainer-Docker-Plattform verwendet die Datei
Dockerrun.aws.json v2
.
-
Wenn sich Elastic Beanstalk bei der Onlineregistrierung authentifizieren kann, die als Host für das private Repository fungiert, können Ihre Images bereitgestellt und abgerufen werden.
Erstellen benutzerdefinierter Images mit einer Dockerfile-Datei
Falls Sie noch nicht über ein in einem Repository gehostetes Image verfügen, müssen Sie eine Dockerfile
erstellen.
Der folgende Codeausschnitt ist ein Beispiel für die Dockerfile
. Wenn Sie die Anweisungen in Verwenden des Docker-Plattformzweigs befolgen, können Sie die Dockerfile
wie beschrieben hochladen. Elastic Beanstalk führt das Spiel 2048 aus, wenn Sie diese verwende Dockerfile
.
Weitere Informationen zu den Anweisungen, die Sie in die Dockerfile
einschließen können, finden Sie unter Dockerfile-Referenz
FROM ubuntu:12.04
RUN apt-get update
RUN apt-get install -y nginx zip curl
RUN echo "daemon off;" >> /etc/nginx/nginx.conf
RUN curl -o /usr/share/nginx/www/master.zip -L https://codeload.github.com/gabrielecirulli/2048/zip/master
RUN cd /usr/share/nginx/www/ && unzip master.zip && mv 2048-master/* . && rm -rf 2048-master master.zip
EXPOSE 80
CMD ["/usr/sbin/nginx", "-c", "/etc/nginx/nginx.conf"]
Anmerkung
Sie können mehrstufige Builds aus einer einzigen Dockerfile ausführen, um kleinere Images mit einer signifikanten Verringerung der Komplexität zu erzeugen. Weitere Informationen finden Sie unter Verwenden mehrstufiger Builds
Konfiguration für Docker-Plattformen (ohne Docker Compose)
Wenn Docker Compose in Ihrer Elastic Beanstalk-Docker-Umgebung nicht verwendet wird, lesen Sie die zusätzlichen Informationen in den folgenden Abschnitten.
Alle Webanwendungen, die Sie in Elastic Beanstalk in einer Docker-Umgebung bereitstellen, müssen eine Dockerfile
- oder eine Dockerrun.aws.json
-Datei enthalten. Sie können Ihre Webanwendung über einen Docker-Container in Elastic Beanstalk bereitstellen, indem Sie eine der folgenden Aktionen ausführen:
-
Erstellen Sie eine
Dockerfile
-Datei, damit von Elastic Beanstalk ein benutzerdefiniertes Image erstellt und ausgeführt werden kann. -
Erstellen Sie eine
Dockerrun.aws.json
-Datei, um ein Docker-Image aus einem gehosteten Repository für Elastic Beanstalk bereitzustellen. -
Erstellen Sie eine
.zip
-Datei mit Ihren Anwendungsdateien, sämtlichen Abhängigkeiten der Anwendungsdatei, derDockerfile
und derDockerrun.aws.json
-Datei. Wenn Sie die EB CLI verwenden, um Ihre Anwendung bereitzustellen, wird automatisch eine.zip
-Datei erstellt.Wenn Sie nur eine
Dockerfile
oder nur eineDockerrun.aws.json
-Datei verwenden, um Ihre Anwendung bereitzustellen, müssen Sie keine.zip
-Datei erstellen.
Dieses Thema ist eine Syntaxreferenz. Ausführliche Verfahren zum Starten von Docker-Umgebungen finden Sie unter Verwenden des Docker-Plattformzweigs.
Abschnitte
Eine Dockerrun.aws.json
-Datei beschreibt, wie ein Remote-Docker-Image als Elastic Beanstalk-Anwendung bereitgestellt wird. Diese JSON-Datei ist spezifisch für Elastic Beanstalk. Wenn Ihre Anwendung auf einem Bild ausgeführt, das in einem gehosteten Repository verfügbar ist, können Sie das Image in einer Dockerrun.aws.json v1
-Datei angeben und die Dockerfile
auslassen.
Zu den gültigen Schlüsseln und Werten für die Dockerrun.aws.json v1
-Datei zählen unter anderem folgende Vorgänge:
- AWSEBDockerrunVersion
-
(Erforderlich) Gibt die Versionsnummer als Wert
1
für Single-Container-Docker-Umgebungen an. - Authentifizierung
-
(Nur erforderlich für private Repositorys) Gibt das Amazon S3-Objekt an, in dem die
.dockercfg
-Datei gespeichert ist. - Image
-
Gibt das Docker-Basis-Image auf einem vorhandenen Docker-Repository an, aus dem Sie einen Docker-Container erstellt haben. Geben Sie den Wert des Name-Schlüssels im Format
<organization>/<image name>
für Images auf Docker-Hub oder<site>/<organization name>/<image name>
für andere Websites an.Wenn Sie ein Image in der
Dockerrun.aws.json
-Datei angeben, wirddocker pull
von jeder Instance Ihrer Elastic Beanstalk-Umgebung ausgeführt, um das Image auszuführen. Sie können optional den Update-Schlüssel einschließen. Der Standardwert isttrue
. Er weist Elastic Beanstalk an, das Repository zu prüfen, Updates auf das Image abzurufen und alle zwischengespeicherten Images zu überschreiben.Geben Sie, wenn Sie eine
Dockerfile
verwenden, den Image-Schlüssel in derDockerrun.aws.json
-Datei nicht an. Elastic Beanstalk erstellt und verwendet immer das Image, das inDockerfile
Beschrieben ist, wenn eines vorhanden ist. - Ports
-
(Erforderlich, wenn Sie den Image-Schlüssel angeben) Listet die Ports auf, die auf dem Docker-Container bereitgestellt werden sollen. Elastic Beanstalk verwendet den ContainerPort-Wert für die Verbindung des Docker-Containers mit dem Reverse-Proxy, der auf dem Host ausgeführt wird.
Sie können mehrere Container-Ports angeben, von Elastic Beanstalk wird aber nur der erste Port verwendet. Dieser Port wird verwendet, um Ihren Container mit dem Reverse-Proxy des Hosts zu verbinden und Anforderungen aus dem öffentlichen Internet weiterzuleiten. Wenn Sie eine
Dockerfile
verwenden, sollte der erste ContainerPort-Wert mit dem ersten Eintrag in der EXPOSE-Liste derDockerfile
übereinstimmen.Optional können Sie eine Liste der Ports in HostPort angeben. HostPort-Einträge geben die Host-Ports an, denen ContainerPort-Werte zugeordnet sind. Wenn Sie keinen HostPort-Wert angeben, wird standardmäßig der ContainerPort-Wert verwendet.
{ "Image": { "Name": "
image-name
" }, "Ports": [ { "ContainerPort":8080
, "HostPort":8000
} ] } - Datenträger
-
Ordnen Sie Volumes von einer EC2-Instance Ihrem Docker-Container zu. Geben Sie ein oder mehrere Volume-Arrays für die Zuordnung an.
{ "Volumes": [ { "HostDirectory": "
/path/inside/host
", "ContainerDirectory": "/path/inside/container
" } ] ... - Protokollierung
-
Geben Sie das Verzeichnis im Container an, in das Ihre Anwendung Protokolle schreibt. Elastic Beanstalk lädt alle Protokolle in dieses Verzeichnis in Amazon S3 hoch, wenn Sie Protokollfragmente oder Bundle-Protokolle anfordern. Wenn Sie Protokolle zu einem Ordner mit dem Namen
rotated
in diesem Verzeichnis rotieren, können Sie auch Elastic Beanstalk so konfigurieren, dass rotierte Protokolle für eine dauerhafte Speicherung in Amazon S3 hochgeladen werden. Weitere Informationen finden Sie unter Protokolle von Amazon EC2-Instances in Ihrer Elastic Beanstalk Umgebung anzeigen. - Befehl
-
Geben Sie einen Befehl an, der im Container ausgeführt werden soll. Wenn Sie einen Entrypoint (Eintrittspunkt) angeben, dann wird Command (Befehl) als Argument für Entrypoint (Eintrittspunkt) hinzugefügt. Weitere Informationen finden Sie unter CMD
in der Docker-Dokumentation. - Eintrittspunkt
-
Geben Sie einen Standard-Befehl an, der ausgeführt werden soll, wenn der Container gestartet wird. Weitere Informationen finden Sie unter EINTRITTSPUNKT
in der Docker-Dokumentation.
Der folgende Codeausschnitt ist ein Beispiel, das die Syntax der Dockerrun.aws.json
-Datei für einen einzelnen Container.
{
"AWSEBDockerrunVersion": "1",
"Image": {
"Name": "janedoe/image",
"Update": "true"
},
"Ports": [
{
"ContainerPort": "1234"
}
],
"Volumes": [
{
"HostDirectory": "/var/app/mydb",
"ContainerDirectory": "/etc/mysql"
}
],
"Logging": "/var/log/nginx",
"Entrypoint": "/app/bin/myapp",
"Command": "--argument"
}
Sie können Elastic Beanstalk nur mit der Dockerrun.aws.json
-Datei oder mit einem .zip
-Archiv bereitstellen, das sowohl die Dockerrun.aws.json
-Datei als auch die Dockerfile
-Datei enthält. Wenn Sie beide Dateien bereitstellen, beschreibt die Dockerfile
das Docker-Image und die Datei Dockerrun.aws.json
bietet zusätzliche Informationen für die Bereitstellung. Einzelheiten dazu finden Sie weiter unten in diesem Abschnitt.
Anmerkung
Die beiden Dateien müssen sich im Stammverzeichnis oder im oberste Level des .zip
-Archivs befinden. Erstellen Sie kein Archiv aus einem Verzeichnis, das die Dateien enthält. Navigieren Sie stattdessen zu dem Verzeichnis und erstellen Sie das Archiv dort.
Wenn Sie die beide Dateien bereitstellen, geben Sie kein Image in der Datei Dockerrun.aws.json
an. Elastic Beanstalk erstellt und verwendet das Image, das in Dockerfile
beschrieben wird, und ignoriert das in der Datei Dockerrun.aws.json
angegebene Image.
Fügen Sie die Informationen über den Amazon S3-Bucket hinzu, der die Authentifizierungsdatei im Authentication
-Parameter der Dockerrun.aws.json
v1
-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 AWS-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.
Weitere Informationen zum Generieren und Hochladen der Authentifizierungsdatei finden Sie unter Verwenden von Images aus einem privaten Repository.
Das folgende Beispiel zeigt die Verwendung einer Authentifizierungsdatei mit dem Namen mydockercfg
in einem Bucket namens
, um ein privates Image in einem Drittanbieter-Registry zu verwenden.DOC-EXAMPLE-BUCKET
{
"AWSEBDockerrunVersion": "1",
"Authentication": {
"Bucket": "DOC-EXAMPLE-BUCKET
",
"Key": "mydockercfg
"
},
"Image": {
"Name": "quay.io/johndoe/private-image",
"Update": "true"
},
"Ports": [
{
"ContainerPort": "1234"
}
],
"Volumes": [
{
"HostDirectory": "/var/app/mydb",
"ContainerDirectory": "/etc/mysql"
}
],
"Logging": "/var/log/nginx"
}