Sono artificiali docker quando si esegue un contenitore memorizzato in fs host o in memory?

Context

Scrivo le applicazioni dei binari, facendo la cache di frammenti di pagina sulla produzione (memorizzando il risultato html di un frammento specifico per evitare di ricomprimerlo).

Il modo consueto di farlo è quello di memorizzare il frammento in memcache o redis. L'opzione predefinita di memorizzazione della cache nelle rotaie consiste nell'utilizzare la cache FS (memorizzando il frammento come file), perché ha il vantaggio di non avere dependencies (non è necessario configurare memcache o redis). È un'opzione less popolare, però, perché è più lenta della memorizzazione nella memory e devi pulire manualmente la cache, mentre è ansible contare su chiavi precedenti per essere eliminati automaticamente utilizzando memcache o un redis adeguatamente configurato.

Domanda

Dopo aver usato il docker per un po ', mi rendo conto che la cancellazione dei file di cache precedenti non è più un problema: in fase di distribuzione, viene eseguito un nuovo contenitore, eliminando automaticamente tutti i file di cache precedenti. Probabilmente questo è probabilmente più lento rispetto all'utilizzo della memorizzazione di memory, ma questo ha il vantaggio di non richiedere alcuna configuration, che è abbastanza freddo quando avvii i progetti laterali veloci.

Ma poi mi chiedo: sta scrivendo in un contenitore fs che scrive veramente in fs, o sta scrivendo nella RAM invece? Questa è una preoccupazione, perché questo significherebbe che basandosi su questo potrebbe saturare rapidamente la RAM, specialmente con molti progetti sullo stesso server.

Il caso qui è che Docker sta facendo ciò che il process sta facendo. Docker è solo un modo elegante per eseguire un process, non un tradizionale VM. Probabilmente lo sapete, ma sto solo ripetendo per impostare la base della mia risposta. Docker obbedisce a ciò che il tuo process vuole fare. Se si specifica che si desidera che il process utilizzi una cache del filesystem sul disco e che il process scrive nella cache, Docker non memorizzerà tale risultato nella memory. Scriverà alla cache sul disco. È corretto che i contenitori effimeri abbiano dei vantaggi come si fa a menzionare qui, con la cache dei file che viene pulita quando si crea un nuovo contenitore.

Quando il process scrive su disco, Docker sta scrivendo al suo speciale UnionFS (che può utilizzare uno dei pochi backend di archiviazione differenti, come aufs o btrfs, ci sono diverse scelte). Docker utilizza questo file system "speciale" per due ragioni: per evitare la duplicazione di file dalla stessa image di base e per isolare le modifiche del filesystem specifiche del process dai livelli condivisi dell'image base. Il termine specifico per il meccanismo è copy-on-write . Il punto è che quando Docker dice che sta scrivendo al filesystem, questo è quello che Docker sta facendo. Non scrive roba in memory e agisce come la roba è scritta nel filesystem: in realtà sta scrivendo la roba al disco. L'argomento dei driver di storage è profondo e complesso, ma la documentazione di questa roba è ben scritta e accurata, come avviene per la documentazione generale di Docker. Rimanete certi che non esiste una magia in esecuzione del process. Puoi tranquillamente supporre che Docker sta facendo quello che dice sta facendo.