Ho il codice di tutti i miei siti web sotto /srv
nei miei contenitori.Come modificare il codice in un contenitore Docker in fase di sviluppo?
My Dockerfile scarica il codice utilizzando git e lo rende parte dell'immagine per facilitare la distribuzione in produzione.
Ma come si modifica il codice in fase di sviluppo? Pensavo che usare i volumi fosse la soluzione, ad esempio: -v /docker/mycontainer/srv:/srv
. Ma sovrascrive la directory nel contenitore. Se è la prima volta che lo eseguo, si svuota perché non c'è niente nell'host. Quindi qualsiasi cosa abbia fatto nel Dockerfile è andata persa.
Ci sono anche directory e file all'interno di /srv/myapp
che voglio condividere tra le diverse versioni della mia app, ad esempio: /srv/myapp/user-uploads
. Questo è uno common practice nello sviluppo web professionale.
Allora, cosa posso fare per essere in grado di fare tutte queste cose ?: codice
- modificare in/srv nello sviluppo
- parti/srv/frontend/user-arrivi attraverso diverse versioni
- lasciare che Dockerfile scarichi il codice. Fare "git clone" o "git pull" al di fuori di Docker vanificherebbe lo scopo di Docker secondo me. Inoltre ci sono cose che non posso eseguire nell'host, come le migrazioni del database o altri script specifici dell'app.
C'è un modo per montare un volume inverso? Voglio dire rendere il contenitore sovrascrivere l'host, invece del contrario.
Penso che uno potrebbe essere quello di copiare/srv in /srv.deployment-copy prima di eseguire il daemon del contenitore. E poi quando eseguo il demone controlla se esiste /srv.deployment-copy e copia tutto in/srv. In questo modo posso usare/srv come volume ed essere ancora in grado di distribuire il codice con il Dockerfile. Sto già usando alias per tutti i comandi docker, quindi l'automazione di questo non sarà un problema. Cosa ne pensi?
Memorizzare i dati utente nella cartella dell'app Web non è affatto una pratica comune. Complifica tutto senza una buona ragione. – rightfold
Sì, fare git clone e git pull fuori da Docker è del tutto normale. È così che lo faccio. Il contenitore è solo un contenitore. Il codice dell'app cambia e viene tenuto in un repository separato. Le migrazioni e altri comandi specifici per app possono essere facilmente eseguiti utilizzando il comando exec che consente di eseguire comandi in un contenitore in esecuzione. – Kevin