Come mantenere in esecuzione i container Docker quando il demone si ferma

0
159

Quando Docker termina, tutti i contenitori vengono arrestati. L'installazione predefinita non consente l'esecuzione dei contenitori a meno che anche il demone non sia attivo. Ecco come ridurre al minimo i tempi di inattività del carico di lavoro mantenendo attivi i contenitori durante un'interruzione del demone.

Perché è importante?

Docker ha dimostrato di essere un sistema affidabile in grado di supportare soluzioni in produzione. Questo non vuol dire che sia infallibile. Potresti comunque riscontrare un arresto anomalo che mette fuori gioco il demone, portando i tuoi contenitori offline.

In un altro scenario, il gestore di pacchetti del tuo sistema operativo potrebbe aggiornare automaticamente Docker, causando un riavvio del demone e un breve periodo di inattività. Idealmente, queste situazioni potrebbero essere risolte senza alcun impatto sui carichi di lavoro. Poiché il demone gestisce solo i contenitori, implementando comandi come docker run e docker rm, non è necessario che rimanga attivo per tutto il periodo intermedio del ciclo di vita di un contenitore.

Ripristino in tempo reale del contenitore

Docker supporta un sistema chiamato “ripristino live” che lo rende possibile. Invece di terminare i contenitori durante l'arresto del demone, Docker li manterrà in esecuzione. Riprenderà da dove si era interrotto una volta riavviato.

Il ripristino live deve essere abilitato manualmente. Puoi usarlo una tantum eseguendo dockerd con il flag –live-restore:

sudo dockerd –live-restore Advertisement

Per abilitare permanentemente il ripristino live, aggiungilo al tuo File di configurazione del demone Docker. Di solito si trova in /etc/docker/daemon.json. Dovrai creare il file se non esiste già.

{ "live-restore": true }

Quindi devi indicare a Docker di ricaricare la sua configurazione. Una ricarica non avrà alcun impatto sui tuoi contenitori, a differenza di un riavvio completo del demone.

sudo systemctl reload docker

Il ripristino live dovrebbe ora essere attivato. Puoi testarlo arrestando il demone Docker.

sudo systemctl stop docker

Tutti i contenitori in esecuzione dovrebbero rimanere attivi, anche se il demone è spento. Non sarai in grado di utilizzare i comandi docker, poiché la connessione al demone sarà interrotta, ma i contenitori continueranno a funzionare e manterranno le loro connessioni di rete.

Docker rileverà automaticamente i contenitori esistenti al riavvio. Sarai in grado di continuare da dove avevi interrotto, senza dover subire tempi di inattività.

Gestione della corsa sostenuta senza demoni

L'esecuzione di contenitori senza una connessione daemon attiva non dovrebbe avere conseguenze gravi, anche per un periodo di tempo prolungato. Tuttavia, i registri iniziano a perdersi durante un'interruzione prolungata del demone.

Pubblicità

I contenitori Docker convogliano i loro registri in un buffer FIFO (first-in first-out). Il demone Docker legge il contenuto del buffer per creare i file di registro persistenti che visualizzi con i registri docker.

La dimensione del buffer predefinita è solo 64K quindi può esaurirsi se il demone non legge attivamente il suo contenuto . Quando il buffer si riempie, non è possibile gestire più log finché il demone non completa lo svuotamento del buffer. Puoi aumentare la dimensione del buffer modificando il valore di /proc/sys/fs/pipe-max-size.

Avvertenze per il ripristino in tempo reale

< p>Live Restore dovrebbe coprire la maggior parte degli scenari in cui il daemon Docker si spegne e si ripristina successivamente. Ciò include gli aggiornamenti di Docker, ma solo tra le versioni di patch minori. Se installi una nuova versione principale di Docker (ad esempio dalla 19.03 alla 20.10), Live Restore non verrà utilizzato e il demone Docker verrà sempre riavviato.

Dovresti essere cauto nell'usare Live Restore come un modo per modificare le impostazioni del demone Docker al volo. La modifica di alcune opzioni, come gli indirizzi IP del bridge, impedirà il corretto ripristino dei contenitori al riavvio del demone. In tal caso, dovrai arrestare manualmente tutti i contenitori interessati e sostituirli con altri nuovi. Questa situazione potrebbe verificarsi anche se il tuo sistema operativo assegna una configurazione di rete diversa dopo un riavvio.

Live Restore è destinato all'uso durante gli aggiornamenti Docker e le interruzioni non pianificate del demone. Se devi modificare le impostazioni del demone, prova invece a pianificare i tempi di inattività. Puoi anche utilizzare la finestra mobile di ricarica systemctl per ricaricare i file di configurazione senza riavviare completamente il demone.

Non esiste ancora Live Restore per contenitori basati su Windows. È possibile utilizzare Live Restore su Windows con contenitori basati su Linux. È integrato in Docker Desktop ed è abilitato tramite Preferenze > Demone > Avanzato.

Conclusione

Il ripristino in tempo reale consente di ridurre al minimo i tempi di fermo mantenendo i contenitori in esecuzione in assenza del demone Docker. Se è necessario installare un aggiornamento Docker urgente o si verifica un arresto anomalo imprevisto, i carichi di lavoro dovrebbero rimanere operativi durante il riavvio del demone.

Annuncio

L'attivazione di Live Restore è una procedura consigliata quando si esegue Docker in produzione. Gli strumenti di analisi della configurazione possono contrassegnare le installazioni che non sono abilitate.

Oltre all'utilizzo di Live Restore, dovresti assicurarti che i tuoi contenitori dispongano anche di criteri di riavvio appropriati. Utilizzando il riavvio: sempre i singoli contenitori verranno ripristinati dopo un riavvio del sistema operativo o qualsiasi altro avvio di demone in cui non è stato possibile utilizzare Live Restore.