# Podar objetos de Docker no utilizados


Docker adopta un enfoque conservador para la limpieza de objetos no utilizados (a menudo denominado "recolección de basura"), como imágenes, contenedores, volúmenes y redes. Por lo general, estos objetos no se eliminan a menos que solicites explícitamente a Docker que lo haga. Esto puede hacer que Docker consuma espacio en disco adicional. Para cada tipo de objeto, Docker proporciona un comando `prune` (podar). Además, puedes utilizar `docker system prune` para limpiar varios tipos de objetos a la vez. Este tema muestra cómo utilizar estos comandos `prune`.

## Podar imágenes

El comando `docker image prune` te permite limpiar las imágenes no utilizadas. De forma predeterminada, `docker image prune` solo limpia las imágenes *huérfanas* (dangling). Una imagen huérfana es aquella que no tiene etiqueta y a la que ningún contenedor hace referencia. Para eliminar imágenes huérfanas:

```console
$ docker image prune

WARNING! This will remove all dangling images.
Are you sure you want to continue? [y/N] y
```

Para eliminar todas las imágenes que no estén siendo utilizadas por contenedores existentes, utiliza el flag `-a`:

```console
$ docker image prune -a

WARNING! This will remove all images without at least one container associated to them.
Are you sure you want to continue? [y/N] y
```

De forma predeterminada, se te pedirá confirmación para continuar. Para omitir la solicitud, utiliza el flag `-f` o `--force`.

Puedes limitar qué imágenes se podan utilizando expresiones de filtrado con el flag `--filter`. Por ejemplo, para considerar únicamente las imágenes creadas hace más de 24 horas:

```console
$ docker image prune -a --filter "until=24h"
```

Existen otras expresiones de filtrado disponibles. Consulta la [referencia de `docker image prune`](/reference/cli/docker/image/prune/) para obtener más ejemplos.

## Podar contenedores

Al detener un contenedor, este no se elimina automáticamente a menos que lo hayas iniciado con el flag `--rm`. Para ver todos los contenedores en el host de Docker, incluidos los contenedores detenidos, utiliza `docker ps -a`. ¡Te sorprenderá la cantidad de contenedores que existen, especialmente en un sistema de desarrollo! Las capas de escritura de un contenedor detenido siguen ocupando espacio en disco. Para limpiar esto, puedes utilizar el comando `docker container prune`.

```console
$ docker container prune

WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N] y
```

De forma predeterminada, se te pedirá confirmación para continuar. Para omitir la solicitud, utiliza el flag `-f` o `--force`.

De forma predeterminada, se eliminan todos los contenedores detenidos. Puedes limitar el alcance utilizando el flag `--filter`. Por ejemplo, el siguiente comando solo elimina los contenedores detenidos de más de 24 horas de antigüedad:

```console
$ docker container prune --filter "until=24h"
```

Existen otras expresiones de filtrado disponibles. Consulta la [referencia de `docker container prune`](/reference/cli/docker/container/prune/) para obtener más ejemplos.

## Podar volúmenes

Los volúmenes pueden ser utilizados por uno o más contenedores y ocupan espacio en el host de Docker. Los volúmenes nunca se eliminan automáticamente, ya que hacerlo podría destruir datos.

```console
$ docker volume prune

WARNING! This will remove all volumes not used by at least one container.
Are you sure you want to continue? [y/N] y
```

De forma predeterminada, se te pedirá confirmación para continuar. Para omitir la solicitud, utiliza el flag `-f` o `--force`.

De forma predeterminada, se eliminan todos los volúmenes no utilizados. Puedes limitar el alcance utilizando el flag `--filter`. Por ejemplo, el siguiente comando solo elimina los volúmenes que no están etiquetados con la etiqueta `keep`:

```console
$ docker volume prune --filter "label!=keep"
```

Existen otras expresiones de filtrado disponibles. Consulta la [referencia de `docker volume prune`](/reference/cli/docker/volume/prune/) para obtener más ejemplos.

## Podar redes

Las redes de Docker no ocupan mucho espacio en disco, pero sí crean reglas de `iptables`, dispositivos de red bridge y entradas en la tabla de enrutamiento. Para limpiar estos elementos, puedes utilizar `docker network prune` para eliminar las redes que no estén siendo utilizadas por ningún contenedor.

```console
$ docker network prune

WARNING! This will remove all networks not used by at least one container.
Are you sure you want to continue? [y/N] y
```

De forma predeterminada, se te pedirá confirmación para continuar. Para omitir la solicitud, utiliza el flag `-f` o `--force`.

De forma predeterminada, se eliminan todas las redes no utilizadas. Puedes limitar el alcance utilizando el flag `--filter`. Por ejemplo, el siguiente comando solo elimina las redes de más de 24 horas de antigüedad:

```console
$ docker network prune --filter "until=24h"
```

Existen otras expresiones de filtrado disponibles. Consulta la [referencia de `docker network prune`](/reference/cli/docker/network/prune/) para obtener más ejemplos.

## Podar la caché de construcción

`docker buildx prune` elimina la caché de construcción para el constructor seleccionado actualmente. Si utilizas varios constructores, cada constructor mantiene su propia caché; utiliza el flag `--builder` para apuntar a una instancia de constructor específica.

```console
$ docker buildx prune

WARNING! This will remove all dangling build cache.
Are you sure you want to continue? [y/N] y
```

De forma predeterminada, se te pedirá confirmación para continuar. Para omitir la solicitud, utiliza el flag `-f` o `--force`.

Consulta la [referencia de `docker buildx prune`](/reference/cli/docker/buildx/prune/) para ver todas las opciones, incluyendo `--all` para eliminar también las imágenes internas y de frontend.

## Podar todo

El comando `docker system prune` es un acceso directo que poda imágenes, contenedores y redes. Los volúmenes no se podan de forma predeterminada; debes especificar el flag `--volumes` para que `docker system prune` pode los volúmenes.

```console
$ docker system prune

WARNING! This will remove:
        - all stopped containers
        - all networks not used by at least one container
        - all dangling images
        - unused build cache

Are you sure you want to continue? [y/N] y
```

Para podar también los volúmenes, añade el flag `--volumes`:

```console
$ docker system prune --volumes

WARNING! This will remove:
        - all stopped containers
        - all networks not used by at least one container
        - all volumes not used by at least one container
        - all dangling images
        - all build cache

Are you sure you want to continue? [y/N] y
```

De forma predeterminada, se te pedirá confirmación para continuar. Para omitir la solicitud, utiliza el flag `-f` o `--force`.

De forma predeterminada, se eliminan todos los contenedores, redes e imágenes no utilizados. Puedes limitar el alcance utilizando el flag `--filter`. Por ejemplo, el siguiente comando elimina los elementos de más de 24 horas de antigüedad:

```console
$ docker system prune --filter "until=24h"
```

Existen otras expresiones de filtrado disponibles. Consulta la [referencia de `docker system prune`](/reference/cli/docker/system/prune/) para obtener más ejemplos.

