2015-12-12 17 views
7

Ho un'applicazione node.js impacchettata in un'immagine docker ospitata in un repository pubblico.L'aggiornamento automatico dell'immagine della finestra mobile AWS Beanstalk non funziona

Ho implementato correttamente quell'immagine in un'applicazione docker AWS Beanstalk. Il problema è che mi aspettavo che l'applicazione Beanstalk venisse aggiornata automaticamente quando aggiorno l'immagine nel repository pubblico, come suggerito dalla seguente configurazione.

Dockerrun.aws.json:

{ 
    "AWSEBDockerrunVersion": "1", 
    "Image": { 
    "Name": "peveuve/dynamio-payment-service", 
    "Update": "true" 
    }, 
    "Ports": [ 
    { 
     "ContainerPort": "8000" 
    } 
    ], 
    "Logging": "/var/log/dynamio" 
} 

Il Dockerfile è molto semplice:

FROM node:4.2.1-onbuild 
# Environment variables 
ENV NODE_ENV test 
ENV PORT 8000 
# expose application port outside 
EXPOSE $PORT 

La documentazione Amazon è abbastanza chiaro su questo:

includono Facoltativamente la chiave di aggiornamento . Il valore predefinito è "true" e ordina a Elastic Beanstalk di controllare il repository, di inserire eventuali aggiornamenti nell'immagine e di sovrascrivere qualsiasi immagine memorizzata nella cache.

Ma devo aggiornare manualmente l'applicazione Beanstalk caricando una nuova versione del descrittore Dockerrun.aws.json. Ho dimenticato qualcosa? Dovrebbe funzionare così?

risposta

3

La documentazione deve essere più chiara. Quello che stanno dicendo è con update = true:

EBS farà un docker pull prima di fare un docker run quando l'applicazione viene avviata per la prima volta. Non interromperà continuamente l'hub di docker.

Al contrario, l'emissione di un docker run senza prima fare un docker pull sempre utilizzare la versione memorizzata localmente di quella macchina, che non può essere sempre l'ultima.

Per ottenere ciò che desideri, devi impostare un webhook on Docker Hub, che chiama un'applicazione che controlli, che ricostruisce l'app ELB.

+0

Penso che si sono fondamentalmente giusta. Non sono sicuro che sia sufficiente un riavvio, è necessaria una ricostruzione. Questo è quello che dovevo fare, e un altro ragazzo ha detto la stessa cosa nel suo blog. Upate il vostro anser se siete d'accordo e lo accetterò. – peveuve

+0

buona presa! Ho aggiornato la risposta Aggiornamento –

+2

: in realtà, non ricostruire la tua app, ci vuole molto tempo. Molto meglio caricare lo stesso Dockerrun.aws.json e aumentare il numero di versione. – peveuve

3

È possibile utilizzare lo strumento della riga di comando AWS per attivare l'aggiornamento:

aws elasticbeanstalk update-environment --application-name [your_app_name] --environment-name [your_environment_name] --version-label [your_version_label] 

Si specifica la versione che contiene il file Dockerrun.aws.json, in questo modo una nuova versione non verrà aggiunto all'applicazione. In questo caso il file Dockerrun funziona come "sorgente" per l'applicazione, ma dice solo a aws di tirare l'immagine della finestra mobile, quindi sarebbe ridondante creare nuove versioni per l'applicazione in Elastic Beanstalk (a meno che non si utilizzino immagini docker specificatamente etichettate) nel file Dockerrun)

vicini:

http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create_deploy_docker_image.html http://docs.aws.amazon.com/elasticbeanstalk/latest/api/API_UpdateEnvironment.htm

Problemi correlati