Administrando tu ambiente de Docker

Clase 27 de 33Curso de Docker

Contenido del curso

Resumen

Cuando trabajamos intensamente con Docker, cada contenedor creado, cada imagen construida y cada red configurada deja una huella en nuestra máquina. Entender cómo administrar esos recursos es fundamental para mantener un entorno de desarrollo eficiente y evitar quedarnos sin espacio o con procesos compitiendo por memoria y CPU.

¿Cómo limpiar contenedores, imágenes y redes que ya no usamos?

A lo largo del trabajo con Docker, se acumulan contenedores apagados, imágenes obsoletas y redes sin uso. El primer paso es visualizar el estado actual con docker ps -a [01:40], que muestra todos los contenedores creados, tanto activos como detenidos.

Para eliminar rápidamente los contenedores que ya no están funcionando, existe el comando docker container prune [02:12]. Al ejecutarlo, Docker pregunta si queremos borrar todos los contenedores frenados y, al confirmar, los elimina de una vez.

Sin embargo, este comando solo afecta contenedores detenidos. Si hay contenedores corriendo que también queremos eliminar, podemos usar un truco muy práctico [02:50]:

bash docker rm -f $(docker ps -a -q)

El flag -q muestra únicamente los IDs de los contenedores. Al combinarlo con docker rm -f, se itera sobre todos los contenedores y se borran a la fuerza, estén corriendo o no.

¿Qué son las imágenes dangling y por qué ocupan tanto espacio?

Al revisar docker image ls [04:22], es común encontrar imágenes marcadas como none. Estas son las llamadas imágenes dangling: versiones anteriores que quedaron sin etiqueta porque un nuevo build las reemplazó. Aunque las capas compartidas optimizan el almacenamiento, cuando tenemos muchas imágenes distintas con código pesado, cada build genera capas únicas que suman espacio considerable.

¿Qué hace docker system prune y cuándo usarlo?

El comando docker system prune [04:55] es la herramienta más completa para limpiar el ambiente de una sola vez. Al ejecutarlo, Docker ofrece eliminar:

  • Contenedores que están parados.
  • Redes que ningún contenedor está usando.
  • Imágenes dangling sin etiquetar.
  • Cualquier otro recurso que pueda limpiar de forma segura.

Después de ejecutarlo, al revisar docker image ls solo quedan las imágenes apropiadamente tagueadas [05:20]. Para redes y volúmenes por separado, también existen docker network prune y docker volume prune.

¿Cómo limitar la memoria RAM de un contenedor con Docker?

Más allá de la limpieza, existe otro aspecto clave: los recursos a los que acceden los contenedores mientras corren. Docker permite establecer límites de memoria y procesamiento de forma muy sencilla.

Para correr un contenedor con un límite de memoria específico, se usa el flag --memory [06:30]:

bash docker run -d --name app --memory 1g nombre_imagen

Este contenedor creerá que corre en una máquina con solo un gigabyte de RAM, aunque el sistema tenga cuatro disponibles. Es una capacidad muy útil para ejecutar múltiples contenedores sin que compitan agresivamente por los mismos recursos.

¿Qué es docker stats y cómo monitorear el consumo?

El comando docker stats [07:00] ofrece una visualización en tiempo real del consumo de cada contenedor: porcentaje de CPU, memoria utilizada y límite asignado. En el ejemplo, la aplicación usaba apenas catorce megabytes de un gigabyte disponible, lo que indica que el límite podría reducirse significativamente.

¿Qué pasa cuando un contenedor no tiene suficiente memoria?

Un experimento revelador es asignar el mínimo permitido por Docker: cuatro megabytes [08:05].

bash docker run -d --name app --memory 4m nombre_imagen

Al hacer docker ps, el contenedor aparece detenido. Al inspeccionar con docker inspect app [08:28], el campo OOMKilled (Out of Memory Killed) aparece en verdadero. Esto significa que el proceso dentro del contenedor necesitaba más RAM de la que el contenedor podía ofrecer.

Este comportamiento es valioso porque permite replicar escenarios de baja memoria con un solo comando, algo que sin Docker requeriría configuraciones avanzadas del sistema operativo.

¿Por qué importa la economía de recursos en Docker?

Mantener el ambiente ordenado no es solo una buena práctica local. En servidores productivos, las imágenes se acumulan y es necesario ejecutar procesos periódicos de limpieza. Muchas plataformas modernas de despliegue de contenedores a escala ya integran estas funciones, pero conocer estos comandos es esencial para cualquier persona que trabaje profesionalmente con Docker.

  • Por defecto, un contenedor usa toda la memoria disponible del sistema.
  • Limitar recursos previene que contenedores compitan entre sí.
  • Probar límites de memoria ayuda a entender el comportamiento de nuestras aplicaciones bajo presión.

Cuanto más intensivo sea el uso de Docker, más relevante se vuelve gestionar estos recursos con criterio. ¿Ya probaste ejecutar docker system prune en tu máquina para ver cuánto espacio recuperas?

      Administrando tu ambiente de Docker