Ho la sensazione che docker potrebbe migliorare notevolmente il mio flusso di lavoro webdev, ma non sono riuscito a capire come affrontare un progetto aggiungendo docker allo stack.
Lo stack del software di base sarebbe simile a questo:
Software
Immagini Docker che forniscono stack LAMP personalizzato
- Apache con diversi moduli
- MYSQL
- PHP
- Alcuni CMS, ad esempio Silverstripe
IDIOTA
Flusso di lavoro
Potrei immaginare che il flusso di lavoro assomigli in qualche modo al seguente:
Sviluppo
- Scrivi un
Dockerfile
che definisce un contenitore LAMP che soddisfa i requisiti sopra indicati- REQ: La macchina dovrebbe avviare apache / mysql subito dopo l'avvio
- Costruisci l'immagine docker
- Copiare i file richiesti per eseguire il CMS ad es
~/dev/cmsdir
- Metti
~/dev/cmsdir/
sotto controllo della versione
- Metti
- Eseguire il contenitore finestra mobile, e in qualche modo montare
~/dev/cmsdir
a/var/www/
sul contenitore - Popolare il database
- Lavora
/dev/cmsdir/
- Eseguire il commit e l'arresto del container docker
Distribuzione
- Configura host remoto (ad es. Con ansible)
- Invia l'immagine del contenitore all'host remoto
- Recupera
cmsdir
-project tramite git - Esegui il container docker, inserisci il database e monta
cmsdir
in/var/www
Ora, sembra tutto abbastanza carino sulla carta, MA non sono del tutto sicuro se questo sarebbe l'approccio giusto.
Domande:
Durante lo sviluppo in locale, come faccio a mantenere il database tra i riavvii dell'istanza del contenitore? O dovrei eseguire sql-dump ogni volta prima di eseguire lo spin down del contenitore?
Devo avere istanze di container separate per il db e il server Apache? O sarebbe sufficiente avere un unico contenitore per il caso d'uso sopra?
Se si utilizzano contenitori separati per database e server, come è possibile automatizzare la rotazione su e giù allo stesso tempo?
Come potrei effettivamente montare
/dev/cmsdir/
nella/var/www/
directory dei contenitori ? Dovrei utilizzare i volumi di dati per questo?Mi sono perso qualche trappola? Qualcosa che potrebbe essere semplificato?