Uso la finestra mobile sia nello sviluppo che nella produzione e una cosa che mi infastidisce è la semplicità della cache della docker. Ho un'applicazione ruby che richiede bundle install
per installare le dipendenze, quindi inizio con il seguente file Docker: ADD Gemfile Gemfile ADD Gemfile.lock Gemfile.lock RUN bundle install --path /root/bundle
Tutte le dipendenze sono memorizzate nella cache e funzionano perfettamente finché non aggiungo una nuova gemma. Anche se la gem che ho aggiunto è di soli 0,5 MB, occorrono ancora 10-15 minuti per installare da zero tutte le gemme dell'applicazione. E poi altri 10 minuti per la distribuzione a causa della dimensione della cartella delle dipendenze (circa 300 MB).Docker bundle installa problemi di cache durante l'aggiornamento delle gemme
Ho riscontrato esattamente lo stesso problema con node_modules e npm. Mi stavo chiedendo, qualcuno ha trovato una soluzione per questo problema?
I miei risultati della ricerca finora:
Source to image - cache file arbitrari attraverso incrementale costruisce. Sfortunatamente, a causa del suo funzionamento, è necessario spingere l'intero 300MB in un registro anche quando le gemme non vengono cambiate. Build più veloce -> implementazione più lenta anche quando le gemme non vengono aggiornate.
Gemfile.tip - dividere Gemfile in due file diversi e aggiungere solo gemme a uno di essi. Soluzione molto specifica per il bundler e non sono convinto che verrà scalata oltre l'aggiunta di 1-2 gemme.
Harpoon - sarebbe una buona misura se non il fatto che costringono l'ammaraggio di Dockerfile e passino al loro formato. Il che significa maggiore sofferenza per tutti i nuovi sviluppatori in una squadra poiché questo set di strumenti richiede tempo per imparare separatamente dalla finestra mobile.
Memorizza temporaneamente la cache. Questa è solo un'idea che non ero sicuro sia possibile. In qualche modo portare la cache del gestore pacchetti (non la cartella delle dipendenze) alla macchina prima di installare i pacchetti e quindi rimuoverla. Basato sul mio hack, velocizza in modo significativo l'installazione del pacchetto per bundler e npm senza sovraccaricare la macchina con file cache inutili.
Dovrebbe essere possibile copiare la directory gem dall'immagine costruita in un file tar. Quindi puoi aggiungere un layer appena prima del tuo Gemfile Gemfile ADD che ripristina la directory gem nell'immagine. A quel punto, solo le modifiche dovrebbero essere ricostruite. Sto sperimentando con quella tecnica ora. Se riesco a farlo funzionare, invierò una risposta. –
@ScottJacobsen ha avuto fortuna finora? – jQwierdy
@jQwierdy - ha pubblicato la mia soluzione. –