Preparazione dell'immagine Docker per la distribuzione su Elastic Beanstalk - AWS Elastic Beanstalk

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Preparazione dell'immagine Docker per la distribuzione su Elastic Beanstalk

Questa sezione descrive come preparare l'immagine Docker per la distribuzione su Elastic Beanstalk con uno dei rami della piattaforma Docker in esecuzione o 023. AL2 AL2 I file di configurazione necessari dipendono dal fatto che le immagini siano locali, remote e se utilizzi Docker Compose.

Nota

Per un esempio di procedura che avvia un ambiente Docker, consulta l'argomento. QuickStart per Docker

Gestione delle immagini con Docker Compose in Elastic Beanstalk

Puoi scegliere di utilizzare Docker Compose per gestire vari servizi in un unico file. YAML Per saperne di più su Docker Compose, consulta Perché usare Compose? sul sito Web di Docker.

  • Creare un docker-compose.yml. Questo file è necessario se utilizzi Docker Compose per gestire la tua applicazione con Elastic Beanstalk. Se tutte le distribuzioni provengono da immagini in archivi pubblici, non sono necessari altri file di configurazione. Se le immagini di origine della distribuzione si trovano in un repository privato, sarà necessario eseguire alcune configurazioni aggiuntive. Per ulteriori informazioni, consulta Utilizzo di immagini da un repository privato. Per ulteriori informazioni sul filedocker-compose.yml , consulta le informazioni di riferimento sul file Compose sul sito Web Docker.

  • DockerfileÈ facoltativo. Creane una se hai bisogno di Elastic Beanstalk per creare ed eseguire un'immagine personalizzata locale. Per ulteriori informazioni sul file Dockerfile, consulta le informazioni di riferimento su Dockerfile sul sito Web Docker.

  • Potrebbe essere necessario creare un file. .zip Se si utilizza solo un Dockerfile file per distribuire l'applicazione, non è necessario crearne uno. Se si utilizzano file di configurazione aggiuntivi, il file.zip deve includere ilDockerfile, il file, i docker-compose.yml file dell'applicazione e tutte le dipendenze tra i file dell'applicazione. L'Dockerfilee docker-compose.yml deve trovarsi alla radice, o al livello superiore, dell'archivio.zip. Se si utilizza l'EB CLI per distribuire l'applicazione, viene creato automaticamente un file.zip.

Per ulteriori informazioni su Docker Compose e su come installarlo, vedere la sezione Panoramica dei siti Docker Compose e Installazione di Docker Compose.

Gestione delle immagini senza Docker Compose in Elastic Beanstalk

Se non utilizzi Docker Compose per gestire le immagini Docker, dovrai configurare un file, uno o entrambi. Dockerfile Dockerrun.aws.json

  • Crea un file Dockerfile per far creare a Elastic Beanstalk ed eseguire un'immagine personalizzata localmente.

  • Crea un file Dockerrun.aws.json v1 per distribuire un'immagine Docker su Elastic Beanstalk da un repository in hosting.

  • Potrebbe essere necessario creare un file. .zip Se si utilizza solo uno dei due file, il Dockerfile o ilDockerrun.aws.json, non è necessario creare un file.zip. Se si utilizzano entrambi i file, è necessario un file.zip. Il file.zip deve includere sia il cheDockerrun.aws.json, oltre al file contenente i file dell'applicazione Dockerfile e tutte le dipendenze dei file dell'applicazione. Se utilizzate l'EB CLI per distribuire l'applicazione, questo crea automaticamente un .zip file.

Dockerrun.aws.jsonfile di configurazione v1

Un file Dockerrun.aws.json descrive come distribuire un'immagine Docker in remoto come applicazione Elastic Beanstalk. Questo JSON file è specifico di Elastic Beanstalk. Se la tua applicazione viene eseguita su un'immagine disponibile in un repository in hosting, puoi specificare l'immagine in un file Dockerrun.aws.json v1 e omettere il Dockerfile.

Versioni Dockerrun.aws.json

Il parametro AWSEBDockerrunVersion indica la versione del file Dockerrun.aws.json.

  • Le piattaforme Docker AL2 e AL2 023 utilizzano le seguenti versioni del file.

    • Dockerrun.aws.json v3— ambienti che utilizzano Docker Compose.

    • Dockerrun.aws.json v1— ambienti che non utilizzano Docker Compose.

  • ECSin esecuzione su Amazon Linux 2 e ECSin esecuzione su AL2 023 utilizza il Dockerrun.aws.json v2 file. La piattaforma ritirata ECS-Anche il Multicontainer Docker Amazon AMI Linux AL1 () utilizzava la stessa versione.

Chiavi e valori validi per il file Dockerrun.aws.json v1 includono le seguenti operazioni:

AWSEBDockerrunVersion

(Obbligatorio) Specificate il numero di versione 1 se non utilizzate Docker Compose per gestire l'immagine.

Autenticazione

(Obbligatorio solo per i repository privati) Specifica l'oggetto Amazon S3 in cui è archiviato il file .dockercfg.

Vedi Utilizzo di immagini da un archivio privato in Elastic Beanstalk Usare immagini da un archivio privato più avanti in questo capitolo.

Immagine

Specifica l'immagine di base Docker su un repository Docker esistente da cui crei un container Docker. Specificate il valore della chiave Name nel formato <organization>/<image name> per le immagini su Docker Hub, oppure <site>/<organization name>/<image name> per altri siti.

Quando nel file Dockerrun.aws.json si specifica un'immagine, ogni istanza nell'ambiente Elastic Beanstalk esegue docker pull per eseguire l'immagine. Opzionalmente, è possibile includere la chiave Update. Il valore predefinito è true e indica a Elastic Beanstalk di controllare il repository, estrarre gli aggiornamenti per l'immagine e sovrascrivere le immagini memorizzate nella cache.

Quando usi un file Dockerfile, non specificare la chiave Image nel file Dockerrun.aws.json. Elastic Beanstalk crea e utilizza sempre l'immagine descritta nel file Dockerfile quando presente.

Porte

(Obbligatorio quando specifichi la chiave Image) Elenca le porte da esporre sul container Docker. Elastic Beanstalk ContainerPortutilizza il valore per connettere il contenitore Docker al reverse proxy in esecuzione sull'host.

È possibile specificare più porte del container, ma Elastic Beanstalk utilizza solo la prima porta. Utilizza questa porta per connettere il container al proxy inverso dell'host e instradare le richieste da Internet pubblico. Se stai usando unDockerfile, il primo ContainerPortvalore deve corrispondere alla prima voce nell'elenco. Dockerfile EXPOSE

Facoltativamente, puoi specificare un elenco di porte in HostPort. HostPortle voci specificano le porte host a cui sono mappati ContainerPorti valori. Se non si specifica un HostPortvalore, il valore predefinito è il valore. ContainerPort

{ "Image": { "Name": "image-name" }, "Ports": [ { "ContainerPort": 8080, "HostPort": 8000 } ] }
Volumi

Mappa i volumi da un'EC2istanza al tuo contenitore Docker. Specifica uno o più array di volumi da mappare.

{ "Volumes": [ { "HostDirectory": "/path/inside/host", "ContainerDirectory": "/path/inside/container" } ] ...
Registrazione di log

Specificare la directory all'interno del container in cui l'applicazione scrive i log. Elastic Beanstalk carica gli eventuali log presenti in questa directory in Amazon S3 quando richiedi la parte finale del log o log in bundle. Se esegui l'accesso a una cartella denominata rotated all'interno di questa directory, puoi anche configurare Elastic Beanstalk per il caricamento di log ruotati in Amazon S3 per lo storage permanente. Per ulteriori informazioni, consulta Visualizzazione dei log delle EC2 istanze Amazon nel tuo ambiente Elastic Beanstalk.

Comando

Specificare un comando da eseguire nel container. Se specifichi un Entrypoint, Command viene aggiunto come argomento in Entrypoint. Per ulteriori informazioni, consulta la documentazione CMDdi Docker.

Entrypoint

Specificare un comando predefinito da eseguire all'avvio del container. Per ulteriori informazioni, consulta la documentazione ENTRYPOINTdi Docker.

Il seguente frammento è un esempio che illustra la sintassi del file Dockerrun.aws.json per un singolo 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" }>

Puoi fornire a Elastic Beanstalk solo il file Dockerrun.aws.json o un archivio .zip contenente i file Dockerrun.aws.json e Dockerfile. Quando fornisci entrambi i file, il Dockerfile descrive l'immagine Docker e il file Dockerrun.aws.json fornisce informazioni aggiuntive per la distribuzione, come descritto di seguito in questa sezione.

Nota

I due file devono essere al livello principale, o al livello superiore, dell'archivio .zip. Non creare l'archivio da una directory contenente i file. Passa invece a tale directory e crea lì l'archivio.

Quando fornisci entrambi i file, non specificare un'immagine nel file Dockerrun.aws.json. Elastic Beanstalk crea e utilizza l'immagine descritta nel file Dockerfile e ignora l'immagine specificata nel file Dockerrun.aws.json.

Creazione di immagini personalizzate con un Dockerfile

Occorre creare un Dockerfile se non si dispone già di un'immagine ospitata in un repository.

Il seguente frammento è un esempio del Dockerfile. Quando segui le istruzioni in QuickStart per Docker, puoi caricare questo Dockerfile come indicato. Elastic Beanstalk esegue il gioco 2048 quando utilizzi questo Dockerfile.

Per ulteriori informazioni sulle istruzioni che puoi includere nel Dockerfile, consulta la documentazione di riferimento del Dockerfile sul sito Web Docker.

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"]
Nota

È possibile eseguire build multi-fase da un singolo Dockerfile per produrre immagini di dimensioni più piccole con una significativa riduzione della complessità. Per ulteriori informazioni, consultare Utilizzo di build multi-fase sul sito Web della documentazione Docker.