Cómo limpiar contenedores, imágenes y volúmenes de Docker con PowerShell
Docker es una herramienta increíble para ejecutar contenedores, pero con el tiempo, contenedores, imágenes y volúmenes acumulados pueden ocupar mucho espacio en tu sistema. Este tutorial te mostrará cómo limpiar Docker de manera segura y controlada usando PowerShell, con opciones automáticas y manuales.
Paso 1: Crear el script de limpieza
Primero, crea un archivo llamado DockerCleanup.ps1 y copia el siguiente contenido:
function Write-Color($Text, $Color="White") {
$OldColor = $Host.UI.RawUI.ForegroundColor
$Host.UI.RawUI.ForegroundColor = $Color
Write-Host $Text
$Host.UI.RawUI.ForegroundColor = $OldColor
}
function Confirm-Action($Message) {
$resp = Read-Host "$Message (s/n)"
if ($resp -match "^[sS]$") { return $true } else { Write-Color "Operación cancelada" "Red"; return $false }
}
function Show-DockerUsage {
Write-Color "=== Uso actual de Docker ===" "Cyan"
docker system df
}
function Convert-Size($sizeStr) {
if ([string]::IsNullOrWhiteSpace($sizeStr)) { return "0 MB" }
$sizeStr = $sizeStr.Trim()
if ($sizeStr -match "^([\d\.]+)(B|kB|MB|GB)$") {
$num = $matches[1]
$unit = $matches[2]
switch ($unit) {
"B" { return "0 MB" }
"kB" { return "0 MB" }
"MB" { return "$num MB" }
"GB" { return ([math]::Round([double]$num * 1024,2)) + " MB" }
default { return "0 MB" }
}
} else {
return "0 MB"
}
}
function Estimate-DockerCleanup {
$dockerDf = docker system df --format "{{.Type}} {{.Size}}" 2>$null
$containersMatch = $dockerDf | Where-Object { $_ -match "Containers" }
$containers = if ($containersMatch) { Convert-Size (($containersMatch -split "\s+")[1]) } else { "0 MB" }
$imagesMatch = $dockerDf | Where-Object { $_ -match "Images" }
$images = if ($imagesMatch) { Convert-Size (($imagesMatch -split "\s+")[1]) } else { "0 MB" }
$volumesMatch = $dockerDf | Where-Object { $_ -match "LocalVolumes|Local Volumes" }
$volumes = if ($volumesMatch) { Convert-Size (($volumesMatch -split "\s+")[2]) } else { "0 MB" }
function Size-To-MB($s) {
if ($s -match "MB$") { return [double]($s.TrimEnd(" MB")) }
else { return 0 }
}
$totalMB = Size-To-MB($containers) + Size-To-MB($images) + Size-To-MB($volumes)
$totalGB = [math]::Round($totalMB/1024,2)
return @{Containers=$containers; Images=$images; Volumes=$volumes; TotalMB=$totalMB; TotalGB=$totalGB}
}
# --- Inicio ---
Show-DockerUsage
$cleanup = Estimate-DockerCleanup
Write-Color "`nEspacio que se podría liberar aprox:" "Cyan"
Write-Color "Contenedores: $($cleanup.Containers)" "Yellow"
Write-Color "Imágenes: $($cleanup.Images)" "Yellow"
Write-Color "Volúmenes: $($cleanup.Volumes)" "Yellow"
Write-Color "Total aprox: $($cleanup.TotalGB) GB" "Green"
# Limpieza automática recomendada
if ($cleanup.TotalMB -gt 0) {
Write-Color "`n⚡ Se recomienda limpieza total segura (prune)." "Cyan"
if (Confirm-Action "¿Deseas realizar la limpieza total automática?") {
docker system prune -a --volumes -f
Write-Color "`n✅ Limpieza completada automáticamente." "Green"
Show-DockerUsage
} else {
Write-Color "`nPuedes usar el menú manual para elegir qué limpiar." "Yellow"
}
} else {
Write-Color "`nNo hay espacio que liberar. Todo limpio!" "Green"
}
# --- Menú manual ---
Write-Host "`nOpciones manuales (si quieres elegir individualmente):"
Write-Host "1) Eliminar contenedores detenidos"
Write-Host "2) Eliminar todos los contenedores"
Write-Host "3) Eliminar imágenes no usadas"
Write-Host "4) Eliminar todas las imágenes"
Write-Host "5) Eliminar volúmenes no usados"
Write-Host "6) Eliminar todos los volúmenes"
Write-Host "7) Limpieza total segura (prune)"
Write-Host "8) Limpieza total forzada (contenedores, imágenes y volúmenes)"
$opcion = Read-Host "Selecciona una opción [1-8] (o Enter para saltar)"
if ($opcion) {
switch ($opcion) {
"1" { if (Confirm-Action "Eliminar contenedores detenidos?") { docker container prune -f } }
"2" { if (Confirm-Action "Eliminar TODOS los contenedores?") { docker rm -f $(docker ps -aq) } }
"3" { if (Confirm-Action "Eliminar imágenes no usadas?") { docker image prune -a -f } }
"4" { if (Confirm-Action "Eliminar TODAS las imágenes?") { docker rmi -f $(docker images -aq) } }
"5" { if (Confirm-Action "Eliminar volúmenes no usados?") { docker volume prune -f } }
"6" { if (Confirm-Action "Eliminar TODOS los volúmenes?") { docker volume rm -f $(docker volume ls -q) } }
"7" { if (Confirm-Action "Realizar limpieza total segura?") { docker system prune -a --volumes -f } }
"8" {
Write-Color "¡Se eliminarán TODOS los contenedores, imágenes y volúmenes!" "Red"
if (Confirm-Action "Continuar con limpieza total forzada?") {
docker rm -f $(docker ps -aq)
docker rmi -f $(docker images -aq)
docker volume rm -f $(docker volume ls -q)
docker system prune -a --volumes -f
}
}
default { Write-Color "Opción no válida" "Red" }
}
}
Write-Color "`n✅ Proceso terminado." "Green"
Show-DockerUsage
Paso 2: Ejecutar el script
1. Abre PowerShell con permisos de administrador.
2. Navega a la carpeta donde guardaste el script:
cd C:\Ruta\Del\Script
3. Ejecuta el script:
.\DockerCleanup.ps1
Paso 3: Ver uso actual de Docker
=== Uso actual de Docker ===
TYPE TOTAL ACTIVE SIZE
Containers 5 2 200MB
Images 10 7 1.2GB
Local Volumes 4 300MB
Paso 4: Estimación de espacio a liberar
Espacio que se podría liberar aprox:
Contenedores: 120 MB
Imágenes: 800 MB
Volúmenes: 300 MB
Total aprox: 1.22 GB
Paso 5: Limpieza automática segura
⚡ Se recomienda limpieza total segura (prune).
¿Deseas realizar la limpieza total automática? (s/n)
Paso 6: Menú manual de limpieza
Si decides no usar la limpieza automática, puedes elegir manualmente:
| Opción | Acción |
|---|---|
| 1 | Eliminar contenedores detenidos |
| 2 | Eliminar todos los contenedores |
| 3 | Eliminar imágenes no usadas |
| 4 | Eliminar todas las imágenes |
| 5 | Eliminar volúmenes no usados |
| 6 | Eliminar todos los volúmenes |
| 7 | Limpieza total segura |
| 8 | Limpieza total forzada |
Paso 7: Resultado final
✅ Proceso terminado.
=== Uso actual de Docker ===
TYPE TOTAL ACTIVE SIZE
Containers 2 1 50MB
Images 6 4 400MB
Local Volumes 2 100MB
Consejos finales
- La opción automática es segura para liberar espacio de contenedores, imágenes y volúmenes que no se están usando.
- La opción manual te permite decidir qué borrar y evitar errores.
- La opción forzada elimina todo, úsala solo si estás seguro.
💡 Con este script, tu Docker siempre estará limpio y optimizado, y tendrás control total sobre lo que se elimina.
Desarrollador web • Desarrollador de software· • Amante del diseño gráfico, diseño 2D/3D
🐙 Creando nuevo tema Wordpress en GitHub
🧪 Experimentos y pruebas varias en Serna Studio Lab