JG

DevOps

Docker como un PRO: 5 tips para mejorar tu flujo de trabajo

27 de junio de 2025
DockerContenedoresDevOpsDesarrolloProductividad
Docker como un PRO: 5 tips para mejorar tu flujo de trabajo

Docker se ha convertido en una herramienta fundamental para los desarrolladores modernos. Es prácticamente indispensable para ti si eres programador. Pero aunque muchos lo usamos a diario, también es común seguir utilizando configuraciones anticuadas o incompletas que limitan su verdadero potencial.

Desde ya te digo, si eres programador y no estás usando Docker, te estás perdiendo de una herramienta increíble y te estás complicando la vida innecesariamente. Así que corre y aprende las bases para usarlo, te aseguro que después de una o dos horas de no entender nada, te vas a dar cuenta de lo útil que es y lo vas a amar.

Si estás usando Docker igual que hace 3 o 5 años, este artículo es para ti. Aquí te comparto 5 tips prácticos que te ayudarán a mejorar seguridad, rendimiento y experiencia de desarrollo. Pequeños cambios que hacen una gran diferencia. 💡

1. No uses root por defecto

Muchos contenedores corren como usuario root por defecto, lo cual representa un riesgo de seguridad, especialmente en entornos productivos. La mejor práctica es definir un usuario no privilegiado en tu Dockerfile:

Es como usar tu base de datos con un usuario administrador por defecto: es cómodo, pero extremadamente peligroso. En cambio, crea un usuario específico para tu aplicación:

# Crea un usuario sin privilegios
RUN useradd -m appuser
USER appuser

Esto limita el daño que un contenedor comprometido podría causar. Además, muchos entornos ahora bloquean contenedores root por políticas de seguridad.

2. Usa BuildKit y cachea inteligentemente

Docker BuildKit es la evolución del sistema de construcción de imágenes. Actívalo para mejorar el rendimiento y habilitar caché avanzada:

export DOCKER_BUILDKIT=1
docker build .

Y si quieres ir más allá, aprovecha la caché entre builds para acelerar tus flujos CI/CD:

--mount=type=cache,target=/root/.npm

Esto evita reinstalaciones innecesarias y mejora significativamente los tiempos de construcción.

También recuerda que tus archivos Dockerfile deben estar optimizados para aprovechar la caché, esto se logra ordenando las instrucciones de forma que los cambios más frecuentes no invaliden la caché de las capas anteriores. Esto de es los básicos de Docker, pero es sorprendente cuántos aún lo ignoran.

3. Agrega siempre un .dockerignore

El .dockerignore es como el .gitignore, pero para Docker. Evita que archivos innecesarios se copien al contexto de construcción. Esto reduce el tamaño de tus imágenes y acelera las builds.

Para los más despistados, docker puede incluso estar copiando archivos del los modulos de Node.js, archivos de configuración de Git, o incluso tus pruebas unitarias. Aquí un ejemplo básico de lo que deberías incluir en tu .dockerignore:

node_modules
.env
.git
tests

Si no usas .dockerignore, Docker puede estar copiando cientos de archivos que no necesitas. ¡Evita el desperdicio!

4. Define healthchecks

Un contenedor "corriendo" no siempre significa que está "funcionando". Con los HEALTHCHECK puedes definir condiciones para saber si un servicio está realmente disponible:

HEALTHCHECK CMD curl --fail http://localhost:3000 || exit 1

Esto permite que Docker y otras herramientas como Docker Compose o Kubernetes reaccionen ante fallos reales, no solo estados superficiales.

Esto te puede ahorrar un montón de problemas, dolores de cabeza tratando de depurar por qué tu aplicación no está funcinoando correctamente. Los healthchecks son una forma de asegurarte de que tu aplicación está realmente lista para recibir tráfico y no solo que el contenedor está corriendo.

5. Usa Dev Containers en modo Watch

Si trabajas en local y quieres máxima velocidad, configura tu entorno de desarrollo con Dev Containers y habilita el modo watch para hot reload automático.

Similar a como funcionan exponer puertos en desarrollo por ejemplo de base de datos, algo así podemos hacerlo pero exponiendo una carpeta de tu proyecto al contenedor, para que los cambios se reflejen inmediatamente sin necesidad de reconstruir la imagen o reiniciar el contenedor. Es como hacer que tu contenedor "vea" los cambios en tiempo real.

Esto te permite desarrollar con consistencia entre entornos, sin tener que reiniciar el contenedor cada vez que haces un cambio.

// Ejemplo con nodemon:
command: nodemon --watch src index.js

Es ideal para flujos modernos y colaborativos, especialmente en proyectos de equipo.


Estos cinco consejos pueden parecer simples, pero aplicarlos transforma por completo la forma en que trabajas con Docker. Más seguridad, builds más rápidos, entornos más limpios y servicios más confiables.

En siguientes artículos compartiré más trucos avanzados y mejores prácticas para sacarle el máximo provecho a nuestro querido Docker. ¡Espero que estos tips te sean útiles y te ayuden a mejorar tu flujo de trabajo! Hasta la próxima. 🚀