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

Mantieni gestibili le tue immagini Docker con Docker Image Prune

Le cose possono diventare disordinate abbastanza facilmente mentre ti concentri sulla distribuzione dei tuoi progetti e sui test nei contenitori Docker. Di tanto in tanto ti ritroverai a dover ripulire il tuo spazio di lavoro. Allora perché non mantenere l'ambiente Docker privo di ingombri con lo sfoltimento dell'immagine della finestra mobile e altri pratici comandi?

Questo tutorial ti insegnerà i molti modi per mantenere pulito e gestibile il tuo ambiente Docker, oltre ad alcune best practice per domare potenziali complessità.

Iniziamo!

Prerequisiti

Per seguire questo tutorial, devi avere a disposizione quanto segue:

  • Un PC Windows 10:questo tutorial utilizza Windows 10 e avvierà i comandi Docker in PowerShell, ma qualsiasi sistema operativo che eseguirà Docker va bene.
  • Docker:questo tutorial utilizza Docker Desktop v3.6.0 per l'host del contenitore.
  • Un container Docker esistente da ripulire

Rimozione delle immagini Docker

Un ambiente Docker è costituito da molti componenti diversi da immagini, contenitori, rete e così via. Troverai molti componenti diversi da ripulire. Iniziamo questo processo di pulizia eliminando prima tutte le vecchie immagini che non ti servono più. Ma non preoccuparti, se rimuovi le immagini e hai creato un Dockerfile che necessita di quelle immagini eliminate, Docker le scaricherà di nuovo automaticamente.

Se devi rimuovere le immagini non necessarie che hai scaricato in passato, rm il comando è tuo amico. Questo comando rimuove le immagini e contenitori, ma il tutorial si concentrerà prima sulle immagini.

Se hai uno o più contenitori che utilizzano attualmente l'immagine che desideri rimuovere, devi prima interrompere i contenitori che utilizzano quell'immagine con il docker stop comando. Per ulteriori informazioni, consulta l'articolo ATA Usa i contenitori Docker Stop senza rovinare le cose!.

Tieni presente che non puoi rimuovere le immagini Docker a meno che non interrompi i contenitori che stanno utilizzando l'immagine.

Per rimuovere un'immagine con docker rm , devi prima trovare l'ID immagine. Per farlo, esegui docker image ls comando. L'docker image ls il comando legge Docker e restituisce tutte le immagini che hai attualmente, incluso l'ID di ciascuna immagine.

Puoi anche eseguire le docker images comando per elencare le immagini create più di recente.

docker image ls

Di seguito, puoi vedere il risultato di docker image ls comando in un elenco di tabelle con colonne REPOSITORY , TAG , ID IMMAGINE , CREATO e TAGLIA .

Una volta che conosci l'ID immagine, fornisci quell'ID immagine a docker image rm comando, come mostrato di seguito. Dopo averlo fatto, Docker rimuoverà l'immagine con l'ID specificato.

# Remove only the images with the specified image ID
docker image rm image_id

Rimozione delle immagini Docker "pendenti"

Quando inizi a creare più contenitori e a scaricare più immagini, è probabile che avrai varie immagini che non hanno alcun contenitore associato. Queste immagini sono chiamate immagini "pendenti" o "vaganti" e non sono attualmente utilizzate da Docker.

Per risparmiare spazio su disco e mantenere le cose in ordine, puliamo tutte queste immagini penzolanti. Per farlo, esegui docker image prune . Questo comando poterà o rimuovi le immagini per le quali non è stato creato un contenitore.

docker image prune

Se desideri rimuovere TUTTE le immagini con un contenitore associato o meno, non è necessario trovare un ID immagine particolare; esegui docker image prune -a andare al nucleare e rimuoverli tutti.

Rimozione dei contenitori Docker

Dopo aver ripulito le immagini Docker, è il momento di passare ai contenitori. Fortunatamente, vedrai che l'operazione di rimozione dei contenitori è simile alla rimozione di immagini utilizzando il rm comando.

Innanzitutto, trova l'ID del contenitore con docker container ls comando per rimuovere i contenitori, come mostrato di seguito. Questo comando restituisce tutti i contenitori, incluso l'ID CONTAINER . Il -al il parametro è facoltativo per mostrare tutti i contenitori (in esecuzione o meno) e solo l'ultima versione di ciascun contenitore.

docker container ls -al # List all Docker containers

Una volta che conosci l'ID del contenitore, esegui docker rm e passagli l'ID contenitore che desideri rimuovere.

# Remove only the containers with the specified container ID
docker rm container_id

Puoi anche specificare più di un ID contenitore separando ciascun ID con uno spazio, come mostrato di seguito. Questo comando rimuove (rm ) i container tutorial Alpine e Docker 101 con ID container f8ec07177218 e 6fac840d9382 .

docker rm f8ec07177218 6fac840d9382

Rimozione di tutti i contenitori Docker fermi

Forse hai molti contenitori fermi che stanno solo occupando spazio. Come le immagini penzolanti, i contenitori fermi non servono a nessuno scopo al momento.

Per rimuovere tutti i contenitori fermi:

1. Esegui la docker comando seguente per elencare tutto (ls --all ) Contenitori Docker. Nota tutti i contenitori con uno STATO di Uscita (X) Y ore fa . Tutti questi contenitori sono attualmente in fase di arresto.

docker container ls --all

2. Ora esegui la docker container prune comando per rimuovere tutti i contenitori interrotti. Quando questo comando viene eseguito, vedrai quali ID contenitore il comando ha rimosso.

docker container prune

3. Infine, esegui docker container ls -a di nuovo per vedere che ogni contenitore fermato è stato rimosso.

Se preferisci non specificare manualmente uno o più ID contenitore, puoi anche nidificare i comandi Docker utilizzando $() per elencare entrambi i contenitori e rimuoverli in una riga con docker container rm $(docker container ls -aq) . Il docker container il comando usa il q passare a non restituire i contenitori alla console. Una volta che Docker ha raccolto tutti i contenitori, esegue docker container rm contro ciascuno.

Rimozione dei contenitori Docker tramite regole di filtraggio

Forse hai molti contenitori diversi e rimuoverli ciascuno per ID sarebbe una seccatura. Se hanno tutte alcune caratteristiche comuni, puoi creare un filtro per rimuovere solo i contenitori che corrispondono a una query specifica.

Per rimuovere più contenitori che corrispondono a una query specifica, utilizza il filter parametro o flag di filtro sulla docker container prune comando. Questo parametro consente di specificare un until attributo per filtrare i contenitori creati prima di una data o di un'label argomento per abbinare i contenitori con/senza un'etichetta specifica.

Ad esempio, puoi rimuovere tutti i contenitori interrotti che sono stati creati per più di 10h fa eseguendo il comando seguente.

docker container prune --filter "until=10h"

Inserisci Y per confermare la rimozione del contenitore Docker, come mostrato di seguito. Una volta completata la rimozione, vedrai quali contenitori sono stati rimossi e lo spazio totale recuperato.

Pulizia dei contenitori annidando i comandi Docker

Tutti i comandi precedenti trattati richiedevano di arrestare preventivamente ogni contenitore. Ma cosa succede se i container sono in esecuzione? Invece di arrestare ogni container singolarmente, puoi invece annidare i comandi Docker in un comando di rimozione per fermare tutti i container e rimuoverli contemporaneamente.

Adotta ulteriori precauzioni quando rimuovi i container in esecuzione. La rimozione potrebbe influire su alcune applicazioni o processi che dipendono da quel contenitore Docker.

La finestra mobile nidificata ($(docker container ) il comando seguente elenca tutti i contenitori in modo silenzioso (-aq ) in memoria, compresi quelli attualmente in esecuzione. L'elenco dei contenitori viene quindi passato alla docker esterna comando da rimuovere (rm ) i contenitori nell'elenco.

Di seguito puoi vedere che l'esecuzione del comando annidato rimuove tutti i contenitori in una volta sola, come mostrato di seguito. Quindi, quando controlli l'elenco dei contenitori, non otterrai un output poiché l'elenco è vuoto.

Rimozione automatica dei contenitori con il --rm Segnala

I comandi precedenti vengono utilizzati per rimuovere i contenitori Docker solo dopo che l'elenco Docker è stato disordinato. Ma perché aspettare che l'elenco Docker sia ingombra? Se sei un tipo di lavoratore "pulito come vai", la misura di pulizia preventiva è a portata di mano con il --rm bandiera.

Il --rm flag in una docker run Il comando è utile se stai solo testando le cose sulla tua macchina per un breve periodo e non stai gestendo file critici o distribuzioni all'interno di quel contenitore.

La docker run la sintassi del comando seguente aggiunge un contenitore Docker con il nome di tua scelta (container_name ) e un'immagine Docker (organization/base_image ) dalla libreria Docker Hub. Ma poi il --rm flag rimuove automaticamente il contenitore.

docker run --rm --name container_name organization/base_image

Ripulire i volumi Docker

Docker non consiste solo di immagini e contenitori. L'ecosistema Docker comprende anche volumi di archiviazione. Utilizzando lo stesso metodo generale di ricerca degli ID e di sfoltimento degli elementi, puoi anche ripulire i volumi di archiviazione.

Come per i contenitori e le immagini, esegui docker volume ls per vedere tutti gli ID volume che hai nel sistema.

docker volume ls

Di seguito, puoi vedere che in questo tutorial sono elencati tre volumi.

Ora esegui la docker comando seguente per eliminare tutti i volumi inutilizzati (volume prune ).

Per rimuovere le reti Docker inutilizzate, esegui invece questo comando:docker network prune

docker volume prune

Di seguito, puoi vedere che il comando rimuove tutti i volumi locali poiché non erano in uso al momento dell'eliminazione. Quindi, quando elenchi tutti i volumi Docker, ottieni solo un elenco di tabelle vuoto.

Rimozione di tutti i componenti Docker inutilizzati contemporaneamente

Durante questo tutorial, hai selezionato e scelto quali componenti Docker rimuovere. Forse stai lavorando in un ambiente di test e vuoi solo ripulire tutto in una volta. Invece di pulire ogni componente singolarmente, pulisci tutto con docker system prune !

La docker system prune il comando rimuove i contenitori non in esecuzione, le reti inutilizzate, le immagini inutilizzate e la cache di compilazione per il motore Docker.

docker system prune

Aaggiungi il -f flag per forzare o sopprimere i messaggi di avviso e confermare l'eliminazione degli elementi del sistema Docker, in questo modo:docker system prune -f

Di seguito, puoi vedere un messaggio che ti chiede se desideri continuare a rimuovere gli elementi del sistema Docker o meno. Conferma inserendo Y per procedere.

Conclusione

In questo tutorial, hai esplorato i numerosi modi per ripulire le immagini Docker con docker image prune comando, rimuovendo i contenitori con docker container rm e altro ancora.

Con questa nuova conoscenza, perché non sviluppare i tuoi metodi preferiti per ripulire le tue immagini Docker? Forse creare un inventario di risorse Docker o un buon sistema di tagging che ti permetta di nominare correttamente i tuoi progetti ed evitare di eliminare immagini o contenitori critici?


Docker
  1. Come spostare le immagini Docker tra host

  2. Crea, tagga e carica la tua immagine Docker

  3. Come condividere le immagini Docker con altri

  4. Come modificare le immagini Docker

  5. Come installare Nextcloud con Docker sul tuo server Linux

Come aggiornare le immagini Docker all'ultima versione

Come copiare file con Docker cp nel tuo Docker Container

Come utilizzare Docker Commit per modificare le immagini del contenitore

Guida completa per la rimozione delle immagini Docker

Come creare un'immagine Docker personalizzata con Dockerfile

Condivisione di immagini Docker su Docker Hub