GNU/Linux >> Linux Esercitazione >  >> Panels >> Docker

Come mantenere in funzione i contenitori Docker quando il demone si ferma

Al termine di Docker, 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 container durante un'interruzione del demone.

Perché è importante?

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

In un altro scenario, il gestore di pacchetti del 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. Come solo il demone gestisce contenitori, implementando comandi come docker run e docker rm , non vi è alcuna necessità intrinseca che rimanga nel periodo intermedio nel ciclo di vita di un container.

Ripristino in tempo reale del contenitore

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

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

sudo dockerd --live-restore

Per abilitare permanentemente il ripristino live, aggiungilo al 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
}

Successivamente è necessario indicare a Docker di ricaricare la sua configurazione. Un ricaricamento non influirà sui tuoi container, a differenza di un riavvio completo del demone.

sudo systemctl reload docker

Il ripristino dal vivo ora dovrebbe essere attivato. Puoi provarlo arrestando il demone Docker.

sudo systemctl stop docker

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

Docker rileverà automaticamente i contenitori esistenti al riavvio. Potrai continuare da dove eri rimasto, senza dover subire tempi di inattività.

Gestire la corsa sostenuta senza daemon

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

I container Docker convogliano i loro log 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 docker logs .

La dimensione del buffer predefinita è solo 64K, quindi può essere esaurita se il demone non sta leggendo attivamente il suo contenuto. Quando il buffer si riempie, non è più possibile gestire i log fino a quando il demone non completa uno svuotamento del buffer. Puoi aumentare la dimensione del buffer modificando il valore di /proc/sys/fs/pipe-max-size .

Avvertenze sul ripristino dal vivo

Live Restore dovrebbe coprire la maggior parte degli scenari in cui il daemon Docker viene arrestato e successivamente ripristinato. Ciò include gli aggiornamenti Docker, ma solo tra versioni di patch minori. Se installi una nuova versione principale di Docker (come 19.03 a 20.10 ), Live Restore non verrà utilizzato e il demone Docker verrà sempre riavviato.

Dovresti stare attento a 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 container al riavvio del demone. In questo caso, dovrai arrestare manualmente tutti i contenitori interessati e sostituirli con quelli 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 systemctl reload docker per ricaricare i file di configurazione senza riavviare completamente il demone.

Non esiste ancora Live Restore per i contenitori basati su Windows. puoi usa Live Restore attivo Windows con contenitori basati su Linux. È integrato in Docker Desktop ed è abilitato tramite Preferenze> Demone> Avanzate.

Conclusione

Live Restore ti consente di ridurre al minimo i tempi di inattività dirompenti mantenendo i container in esecuzione in assenza del daemon Docker. Se è necessario installare un aggiornamento Docker urgente o si verifica un arresto anomalo a sorpresa, i carichi di lavoro dovrebbero rimanere operativi mentre il demone si riavvia.

L'attivazione di Live Restore è una procedura consigliata durante l'esecuzione di Docker in produzione. Gli strumenti di analisi della configurazione possono contrassegnare le installazioni che non lo hanno abilitato.

Oltre a utilizzare Live Restore, dovresti assicurarti che anche i tuoi contenitori dispongano di politiche di riavvio appropriate. Usando restart: always eseguirà il backup dei singoli contenitori dopo il riavvio del sistema operativo o qualsiasi altro lancio di daemon in cui non è stato possibile utilizzare Live Restore.


Docker
  1. Come aggiornare automaticamente i contenitori Docker in esecuzione

  2. Come usare Docker Compose

  3. Come collegare i contenitori Docker

  4. Come passare le variabili d'ambiente ai container Docker

  5. Come elencare i contenitori Docker

Come aggiornare automaticamente i contenitori Docker durante l'aggiornamento di app Web Dockerizzate

Come eseguire i contenitori Docker

Come rimuovere i contenitori Docker

Come fermare i container Docker

Come rinominare o rinominare i contenitori Docker

Come configurare gli spazi dei nomi di rete nei contenitori Docker