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

Come eliminare le risorse Docker inutilizzate

Docker ti consente di impacchettare rapidamente le tue applicazioni come contenitori, rendendo possibile eseguirle ovunque dal tuo laptop a un cloud pubblico. Dopo aver utilizzato Docker per un po', puoi accumulare un gran numero di contenitori, immagini e altre risorse ridondanti. Ecco come metterli in ordine.

Docker di solito non elimina nulla a meno che tu non lo dica. Ciò significa che le immagini che hai estratto e i contenitori che hai creato probabilmente sono ancora in giro sul tuo sistema, anche se non vengono più utilizzati.

Avere troppe risorse ridondanti può portare rapidamente a un utilizzo eccessivo del disco. Si traduce anche in un output molto più lungo quando si elencano le risorse sulla riga di comando, rendendo più difficile trovare le informazioni che stai cercando.

Potatura delle risorse penzolanti

Una risorsa "pendente" è qualsiasi oggetto Docker non attualmente associato a un contenitore. Ciò include immagini Docker, reti e volumi, nonché contenitori interrotti. Nel caso delle immagini, un'immagine è "pendente" se è priva di tag e non ha riferimenti.

Docker fornisce un unico comando di pulizia per consentirti di eliminare tutte le risorse penzolanti e i contenitori fermi. A meno che una risorsa non sia utilizzata da un in esecuzione contenitore, verrà eliminato.

docker system prune

L'esecuzione del comando visualizza una richiesta di conferma che elenca i tipi di risorse da eliminare. Digita y e premere Invio per continuare con l'eliminazione. Puoi disabilitare la conferma passando il -f o --force bandiera.

I volumi non vengono rimossi per impostazione predefinita. L'eliminazione dei volumi rischia la perdita di dati persistenti che potresti voler conservare. Se vuoi rimuovere i volumi che non sono associati a un container, passa il --volumes flag per includerli nell'operazione.

Puoi eliminare ancora più dati di immagine passando il -a (o --all ) bandiera. Ciò farà sì che Docker elimini tutti gli non utilizzati immagini, non solo penzolanti senza riferimenti. Ogni immagine sul tuo sistema verrà eliminata, a meno che non sia presente almeno un container in esecuzione che lo richiede.

Utilizzo dei filtri durante lo sfoltimento

I filtri possono essere utilizzati con prune comando. Il filtraggio ti dà un maggiore controllo su ciò che viene eliminato. Attualmente sono supportati due filtri, until e timestamp .

  • until – Il until filter impedisce la cancellazione di contenitori, immagini e reti create prima di un dato momento. Puoi specificare l'ora in diversi formati, ad esempio un timestamp Unix in secondi (ad es. 1614890000 ) o una stringa timestamp formattata per data (ad es. 2021-03-04T20:30:00 ).
  • label – L'label filter limita l'eliminazione in modo che vengano eliminate solo le risorse con una determinata etichetta. Le etichette possono essere utilizzate con contenitori, immagini, reti e volumi. Specifica le etichette come label=key=value (chiave uguale a valore), label!=key=value (chiave diversa da valore), label=key (ha l'etichetta data) o label!=key (non ha l'etichetta indicata).

Per utilizzare un filtro, passalo a --filter bandiera:

docker system prune --filter until=2021-03-04T20:30:00 --filter label=foo=bar

Questo comando eliminerebbe le risorse con il foo=bar etichetta creata prima delle 20:30 del 4 marzo. Eventuali risorse che non corrispondono a questi criteri rimarrebbero intatte.

Eliminazione dei singoli tipi di risorse

Non sarà sempre necessario utilizzare docker system prune . Docker fornisce anche comandi di sfoltimento più granulari. Questi possono essere utilizzati quando desideri rimuovere solo un tipo di risorsa.

Il --force e --filter flag supportati da docker system prune si applicano anche ai singoli comandi di sfoltimento elencati di seguito.

Contenitori per potatura

I comandi giornalieri di Docker possono causare rapidamente un numero elevato di contenitori fermi. Il problema è esasperato se docker build immagini senza il --rm flag, poiché ciò fa sì che i livelli di build intermedi vengano mantenuti.

Esegui docker container prune per ripulire i contenitori fermi. I contenitori interrotti non vengono visualizzati quando esegui docker ps; per vederli, dovrai usare docker ps -a per mostrare tutti i contenitori sul tuo sistema.

Se desideri rimuovere un singolo contenitore, utilizza il docker rm comando che passa l'ID del contenitore. Puoi ottenerlo eseguendo docker ps . Se il container è in esecuzione, dovrai utilizzare il --force flag per eliminarlo.

Immagini di potatura

Usa docker image prune per rimuovere tutte le immagini penzolanti. Come docker system prune , ciò influirà sulle immagini senza tag o non referenziate da alcun contenitore.

Aggiungi il -a flag per eliminare invece tutte le immagini non utilizzate. Questo eliminerà ogni immagine sul tuo sistema che non è richiesta da almeno un contenitore. Verranno incluse anche le immagini contrassegnate, consentendoti di ripulire rapidamente i vecchi pull da Docker Hub.

Puoi rimuovere un'immagine specifica con la docker rmi comando:

docker rmi wordpress:latest

Quando un'immagine ha più tag, docker rmi rimuoverà il tag specificato senza eliminare effettivamente l'immagine. Verrà eliminato una volta rimosso l'ultimo tag.

Reti di potatura

Le reti Docker non vengono pulite automaticamente. Nel tempo, puoi finire con un gran numero di loro. Ciò ingombra il tuo sistema con dispositivi bridge virtuali ridondanti e voci della tabella di routing. Esegui docker network prune per distruggere le reti inutilizzate e ripristinare le modifiche alla configurazione del tuo host.

Puoi eliminare singole reti eseguendo docker rm my-network .

Volumi di potatura

Docker non cancellerà mai un volume. Memorizzano i dati persistenti creati dai tuoi contenitori, quindi la rimozione involontaria potrebbe avere conseguenze devastanti. I volumi possono anche essere condivisi da più contenitori o lasciati inattivi pronti per essere collegati a un altro contenitore in futuro.

Se desideri eliminare i volumi inutilizzati, devi eseguire docker volume prune . Questo eliminerà tutti i volumi che non sono utilizzati da almeno un container. I singoli volumi possono essere rimossi utilizzando docker volume rm my-volume .

Prevenire l'accumulo futuro

Puoi ridurre al minimo il rischio che risorse ridondanti si accumulino in futuro facendo attenzione a passare il --rm contrassegnare su docker build e docker run comandi.

Se utilizzato con build , causerà l'eliminazione dei livelli di build intermedi (contrassegnati come <none>:<none> in docker images ) produzione. Ciò può rappresentare una significativa riduzione dell'utilizzo del disco. Normalmente viene creato un nuovo livello intermedio per ogni istruzione nel tuo Dockerfile . Di solito puoi rimuoverli a meno che tu non intenda utilizzarli in seguito come punto di partenza per una nuova immagine.

Usando --rm con docker run rimuoverà il contenitore non appena il suo comando esce. Questo è l'ideale quando si esegue un file binario in un contenitore monouso. Non superare --rm ai container che intendi eseguire perennemente o che potresti voler avviare e interrompere su richiesta. Gli esempi includono server Web e database che eseguono un servizio anziché un comando fornito dall'utente.

Conclusione

L'eliminazione delle risorse Docker può liberare spazio su disco e aiutarti a lavorare con Docker CLI. L'eliminazione di contenitori e immagini ridondanti semplifica l'identificazione delle risorse che stai cercando.

Docker non cancellerà nulla a meno che tu non lo dica. Vale la pena eseguire docker system prune periodicamente per mantenere pulito il sistema. Puoi creare un'attività cron che la esegua mensilmente, usando until filtro per creare un periodo di conservazione per le risorse aggiunte di recente.


Docker
  1. Come rimuovere tutte le immagini Docker, i contenitori, i volumi, le reti e le risorse inutilizzate

  2. Come esportare e importare contenitori Docker

  3. Come usare Docker Compose

  4. Come collegare i contenitori Docker

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

Come eseguire i contenitori Docker

Come rimuovere i contenitori Docker

Come fermare i container Docker

Come rinominare o rinominare i contenitori Docker

Come gestire i container Docker

Come configurare gli spazi dei nomi di rete nei contenitori Docker