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à.
Configurazione di Docker
In questa sezione viene descritto come preparare l'immagine e il container Docker per la loro distribuzione in Elastic Beanstalk.
Ambiente Docker con Docker Compose
In questa sezione viene descritto come preparare l'immagine e il container Docker per la loro distribuzione in Elastic Beanstalk. Qualsiasi applicazione Web distribuita su Elastic Beanstalk in un ambiente Docker deve includere un file docker-compose.yml
se si utilizza anche lo strumento Docker Compose. È possibile distribuire l'applicazione Web come servizio containerizzato a Elastic Beanstalk eseguendo una delle operazioni seguenti:
-
Crea un file
docker-compose.yml
per distribuire un'immagine Docker su Elastic Beanstalk da un repository in hosting. Non sono necessari altri file se tutte le distribuzioni provengono da immagini presenti nei repository pubblici. (Se l'implementazione deve originare un'immagine da un repository privato, è necessario includere file di configurazione aggiuntivi per l'autenticazione. Per maggiori informazioni, consulta Utilizzo di immagini da un repository privato). Per ulteriori informazioni sul filedocker-compose.yml
, consulta le informazioni di riferimento sul file Composesul sito Web Docker. -
Crea un file
Dockerfile
affinché Elastic Beanstalk crei ed esegua un'immagine personalizzata. Questo file è facoltativo, a seconda dei requisiti di distribuzione. Per ulteriori informazioni sul fileDockerfile
, consulta le informazioni di riferimento su Dockerfilesul sito Web Docker. -
Crea un file
.zip
contenente i file di applicazione, eventuali dipendenze dei file di applicazione, ilDockerfile
e il filedocker-compose.yml
. Se si utilizza la CLI EB per distribuire l'applicazione, crea un.zip
file per te. I due file devono essere al livello principale, o al livello superiore, dell'archivio.zip
.Se utilizzi un solo file
docker-compose.yml
per distribuire l'applicazione, non devi creare un file.zip
.
Questo argomento è un riferimento sulla sintassi. Per procedure dettagliate sull'avvio di ambienti Docker utilizzando Elastic Beanstalk, consulta Utilizzo della versione della piattaforma Docker.
Per ulteriori informazioni su Docker Compose e su come installarlo, vedere la sezione Panoramica dei siti Docker Compose
Nota
Se non usi Docker Compose per configurare gli ambienti Docker, non dovresti usare nemmeno il file docker-compose.yml
. Usare invece il file Dockerrun.aws.json
, Dockerfile
o entrambi.
Per ulteriori informazioni, consulta Configurazione per piattaforme Docker (senza Docker Compose) .
Utilizzo di immagini da un repository privato
Elastic Beanstalk deve autenticarsi con il registro online che ospita il repository privato prima che possa estrarre e distribuire le immagini da un repository privato. Forniamo esempi per due opzioni per archiviare e recuperare le credenziali per l'ambiente Elastic Beanstalk per l'autenticazione in un repository.
-
La AWS Secrets Manager
-
Il file
Dockerrun.aws.json v3
È possibile configurare Elastic Beanstalk per l'accesso al repository privato prima che inizi il processo di distribuzione. Ciò consente a Elastic Beanstalk di accedere alle immagini dal repository e distribuirle nell'ambiente Elastic Beanstalk in uso.
Questa configurazione avvia gli eventi nella fase di precompilazione del processo di distribuzione di Elastic Beanstalk. È possibile impostarlo nella directory di configurazione .ebextentions . La configurazione utilizza gli script di hook della piattaforma che chiamano docker login per autenticarsi nel Registro di sistema in linea che ospita il repository privato. Segue una descrizione dettagliata di questi passaggi di configurazione.
Per configurare Elastic Beanstalk per l'autenticazione nel repository privato con AWS Secrets Manager
Nota
È necessario concedere autorizzazioni specifiche per completare questi passaggi. Per ulteriori informazioni, consulta i seguenti riferimenti:
-
Nel passaggio 2 avrai bisogno delle autorizzazioni per creare un segreto. Per ulteriori informazioni, consulta la pagina Esempio: Autorizzazione per creare segreti nella Guida per l'utente di AWS Secrets Manager .
-
Nella fase 3 sono necessarie le autorizzazioni per recuperare i segreti utilizzando riferimenti
secretsmanager
dinamici. Per ulteriori informazioni, consulta la pagina Esempio: Autorizzazione per recuperare valori segreti nella Guida per l'utente di AWS Secrets Manager .
-
Creare la struttura di directory
.ebextensions
come segue.├── .ebextensions │ └── env.config ├── .platform │ ├── confighooks │ │ └── prebuild │ │ └── 01login.sh │ └── hooks │ └── prebuild │ └── 01login.sh ├── docker-compose.yml
-
Utilizzalo AWS Secrets Manager per salvare le credenziali del tuo repository privato in modo che Elastic Beanstalk possa recuperarle quando richiesto. Per questo, esegui il comando create-secret AWS CLI di Secrets Manager.
aws secretsmanager create-secret \ --name
MyTestSecret
\ --description "My image repo credentials created with the CLI.
" \ --secret-string "{\"USER\
":\"EXAMPLE-USERNAME\
",\"PASSWD\
":\"EXAMPLE-PASSWORD\
"}" -
Creare il file
env.config
seguente e posizionarlo nella directory.ebextensions
, come mostrato nella struttura di directory precedente. Questa configurazione utilizza lo spazio dei nomi aws:elasticbeanstalk:application:environment per inizializzare le variabili di ambiente di Elastic BeanstalkUSER
ePASSWD
utilizzando riferimenti dinamici a AWS Secrets Manager. Per ulteriori informazioni sui riferimentisecretsmanager
dinamici, consulta Recupera un AWS Secrets Manager segreto in una AWS CloudFormation risorsa nella Guida per l'AWS Secrets Manager utente.Nota
USER
ePASSWD
nello script devono corrispondere alle stesse stringhe utilizzate nei comandisecretsmanager
create-secret precedenti.option_settings: aws:elasticbeanstalk:application:environment: USER: '{{resolve:secretsmanager:MyTestSecret:SecretString:USER}}' PASSWD: '{{resolve:secretsmanager:MyTestSecret:SecretString:PASSWD}}'
-
Creare il seguente file di script
01login.sh
e inserirlo nelle seguenti directory (mostrate anche nella struttura di directory precedente):-
.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
Lo script
01login.sh
chiama lo script della piattaforma get-config per recuperare le credenziali del repository e registrarle nel repository. Memorizza il nome utente nella variabile dello scriptUSER
. Nella riga successiva, recupera la password. Invece di memorizzare la password in una variabile dello script, questo reindirizza la password direttamente al comando docker login nel flusso di inputstdin
. L'opzione--password-stdin
utilizza il flusso di input, quindi non è necessario memorizzare la password in una variabile. Per ulteriori informazioni sull'autenticazione con l'interfaccia a riga di comando Docker, consulta Accesso a Dockersul sito Web della documentazione Docker. Note
-
Tutti i file di script devono disporre del permesso di esecuzione. Utilizzare chmod +x per impostare l'autorizzazione di esecuzione sui file hook. Per tutte le versioni delle piattaforme basate su Amazon Linux 2 rilasciate il 29 aprile 2022, Elastic Beanstalk concede automaticamente le autorizzazioni di esecuzione a tutti gli script di hook della piattaforma. In questo caso non è necessario concedere manualmente le autorizzazioni di esecuzione. Per un elenco di queste versioni di piattaforma, fare riferimento alle note di rilascio del 29 aprile 2022 - piattaforma Linux nellaAWS Elastic Beanstalk Guida alle note di rilascio.
-
I file hook possono essere file binari oppure file di script che iniziano con una riga #! contenente il percorso dell'interprete, ad esempio #!/bin/bash.
-
Per maggiori informazioni, vedere Hook della piattaforma in Estensione di Elastic Beanstalk alle piattaforme Linux.
-
Quando Elastic Beanstalk esegue l'autenticazione con il registro online che ospita il repository privato, puoi distribuire ed estrarre le immagini.
In questa sezione viene descritto un altro approccio per l'autenticazione di Elastic Beanstalk in un repository privato. Con questo approccio, si genera un file di autenticazione con il comando Docker e quindi si carica il file di autenticazione in un bucket Amazon S3. È inoltre necessario includere le informazioni relative al bucket nel file Dockerrun.aws.json v3
.
Per generare e fornire un file di autenticazione per Elastic Beanstalk
-
Genera un file di autenticazione con il comando docker login. Per repository su Docker Hub, esegui docker login:
$
docker login
Per gli altri registri, includi l'URL del server di registro:
$
docker login
registry-server-url
Nota
Se l'ambiente Elastic Beanstalk utilizza la versione della piattaforma Docker su AMI Amazon Linux (precedente ad Amazon Linux 2), leggi le informazioni pertinenti in Configurazione Docker su AMI Amazon Linux (precedente ad Amazon Linux 2).
Per ulteriori informazioni sul file di autenticazione, vedi Memorizzare le immagini in Docker Hub
e login docker sul sito Web Docker. -
Carica una copia del file di autenticazione denominato
.dockercfg
in un bucket Amazon S3 protetto.-
Il bucket Amazon S3 deve essere ospitato nello Regione AWS stesso ambiente che lo utilizza. Elastic Beanstalk non può scaricare file da un bucket Amazon S3 ospitato in altre regioni.
-
Concedi le autorizzazioni per l'operazione
s3:GetObject
al ruolo IAM nel profilo dell'istanza. Per ulteriori informazioni, consulta Gestione dei profili dell'istanza Elastic Beanstalk.
-
-
Includi le informazioni sul bucket Amazon S3 nel parametro
Authentication
nel fileDockerrun.aws.json v3
.Di seguito è riportato un esempio di file
Dockerrun.aws.json v3
.{ "AWSEBDockerrunVersion": "3", "Authentication": { "bucket": "DOC-EXAMPLE-BUCKET", "key": "
mydockercfg
" } }Nota
Il parametro
AWSEBDockerrunVersion
indica la versione del fileDockerrun.aws.json
.-
La piattaforma Docker su Amazon Linux 2 utilizza il file
Dockerrun.aws.json v3
per gli ambienti che utilizzano Docker Compose. Utilizza il fileDockerrun.aws.json v1
per gli ambienti che non utilizzano Docker Compone. -
La piattaforma Multicontainer Docker su AMI Amazon Linux utilizza il file
Dockerrun.aws.json v2
.
-
Quando Elastic Beanstalk sarà in grado di eseguire l'autenticazione con il registro online che ospita il repository privato, le immagini potranno essere distribuite ed estratte.
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 Utilizzo della versione della piattaforma 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
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
Configurazione per piattaforme Docker (senza Docker Compose)
Se l'ambiente Docker Elastic Beanstalk non utilizza Docker Compose, leggere le informazioni aggiuntive nelle sezioni seguenti.
Qualsiasi applicazione Web distribuita su Elastic Beanstalk in un ambiente Docker deve includere un file Dockerfile
o Dockerrun.aws.json
. Puoi distribuire l'applicazione Web da un container Docker in Elastic Beanstalk eseguendo una delle seguenti operazioni:
-
Crea un file
Dockerfile
affinché Elastic Beanstalk crei ed esegua un'immagine personalizzata. -
Crea un file
Dockerrun.aws.json
per distribuire un'immagine Docker su Elastic Beanstalk da un repository in hosting. -
Crea un file
.zip
contenente i file di applicazione, eventuali dipendenze dei file di applicazione, ilDockerfile
e il fileDockerrun.aws.json
. Se si utilizza la CLI EB per distribuire l'applicazione, crea un.zip
file per te.Se utilizzi un solo file
Dockerfile
oDockerrun.aws.json
per distribuire l'applicazione, non devi creare un file.zip
.
Questo argomento è un riferimento sulla sintassi. Per le procedure dettagliate sull'avvio di ambienti Docker, consulta Utilizzo della versione della piattaforma Docker.
Sezioni
Un file Dockerrun.aws.json
descrive come distribuire un'immagine Docker in remoto come applicazione Elastic Beanstalk. Questo file JSON è specifico per 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
.
Chiavi e valori validi per il file Dockerrun.aws.json v1
includono le seguenti operazioni:
- AWSEBDockerrunVersion
-
(Obbligatorio) Specifica il numero di versione come il valore
1
per gli ambienti Docker a container singolo. - Autenticazione
-
(Obbligatorio solo per i repository privati) Specifica l'oggetto Amazon S3 in cui è archiviato il file
.dockercfg
.Per informazioni, consulta Utilizzo di immagini da un repository privato.
- Immagine
-
Specifica l'immagine di base Docker su un repository Docker esistente da cui crei un container Docker. Specifica il valore della chiave Name nel formato
<organizzazione>/<nome immagine>
per immagini su Docker Hub oppure<sito>/<nome organizzazione>/<nome immagine>
per altri siti.Quando nel file
Dockerrun.aws.json
si specifica un'immagine, ogni istanza nell'ambiente Elastic Beanstalk eseguedocker 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 fileDockerrun.aws.json
. Elastic Beanstalk crea e utilizza sempre l'immagine descritta nel fileDockerfile
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 utilizzi un
Dockerfile
, il primo ContainerPortvalore deve corrispondere alla prima voce dell'elenco EXPOSE.Dockerfile
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 volumi da un'istanza EC2 al tuo container 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 istanze Amazon EC2 nell'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 CMD
nella documentazione Docker. - Entrypoint
-
Specificare un comando predefinito da eseguire all'avvio del container. Per ulteriori informazioni, consulta la sezione relativa a ENTRYPOINT
nella documentazione 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
.
Aggiungi le informazioni sul bucket Amazon S3 che contiene il file di autenticazione al parametro Authentication
del file Dockerrun.aws.json
v1
. Assicurati che il parametro Authentication
contenga una chiave e un bucket Amazon S3 validi. Il bucket Amazon S3 deve essere ospitato nella stessa Regione AWS dell'ambiente che lo sta utilizzando. Elastic Beanstalk non scarica file dai bucket Amazon S3 ospitati in altre regioni.
Per informazioni sulla generazione e sul caricamento del file di autenticazione, vedi Utilizzo di immagini da un repository privato.
Il seguente esempio mostra l'uso di un file di autenticazione denominato mydockercfg
in un bucket denominato DOC-EXAMPLE-BUCKET
per l'utilizzo di un'immagine privata in un registro di terze parti.
{
"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"
}