2015-03-27 19 views
5

Sto migrando un'applicazione di binari esistente a docker e docker-compose. Ci sono alcuni script che devono essere eseguiti solo alla creazione dei contenitori, ad esempio uno script che copia il db prod in un volume e lo indicizza in Elasticsearch.Docker-Compose: Initialize vs Run

Da quel momento, quando avvierò i container localmente per lo sviluppo, voglio solo eseguire il server di sviluppo delle rotaie e non tutti gli script db init. Potrei creare due file di composizione docker (ad esempio init e run) uguali ad eccezione dell'opzione command: nel contenitore webapp.

C'è un modo migliore?

risposta

2

Il sistema di base Docker non ha un concetto "in esecuzione" per script personalizzati.

Che cosa si può fare è uno di questi approcci:

  • Aggiungi allo script di un controllo di se già lo ha fatto. Quindi non importa se lo ri-giri ancora e ancora.
  • Integrare il db nella finestra mobile e spedirlo come già fatto con i dati caricati.
  • Creare un sistema docker in 2 parti: il primo sarebbe la finestra mobile che si conosce ora con un possibile comando "ONBUILD" in modo che il secondo esegua lo script. Quindi la seconda finestra mobile è quella che eredita quella originale e che eseguirà lo script con o senza "ONBUILD" sopra. Nella finestra mobile-compose si avrebbe una build locale che attiverebbe l'importazione mentre si creava l'immagine della finestra mobile locale.

Solo un'idea

0

È possibile utilizzare extends nel comporre * file .yml.

Extend documentation and examples.

+0

"Quando si estende un servizio, i collegamenti e le opzioni di configurazione volumes_from non vengono ereditate -. Si dovrà definire coloro manualmente ogni volta che si estenderlo" È ancora meglio che creare un nuovo file di composizione di una nuova finestra mobile, ma non così asciutto come potrebbe essere. Voglio solo che una o due righe siano diverse tra i due file di composizione del docker, quindi l'estensione docker-compose dovrebbe essere lunga solo una o due righe. – cyniphile