Contenido del curso
0:00/12:54
Todo lo que aprenderás sobre Docker
02:12Antes de continuar aprendiendo...
Suscríbete para ver másLas tres áreas en el desarrollo de software profesional
Suscríbete para ver másVirtualización
Suscríbete para ver másPreparando tu entorno de trabajo
Suscríbete para ver más[Bonus] Play with Docker
Suscríbete para ver másQué es y cómo funciona Docker
Suscríbete para ver másPrimeros pasos: hola mundo
Suscríbete para ver másConceptos fundamentales de Docker: contenedores
Suscríbete para ver másComprendiendo el estado de Docker
Suscríbete para ver másEl modo interactivo
Suscríbete para ver másCiclo de vida de un contenedor
Suscríbete para ver másExponiendo contenedores
Suscríbete para ver másAdministrando tu ambiente de Docker
Suscríbete para ver másDeteniendo contenedores correctamente: SHELL vs. EXEC
Suscríbete para ver másContenedores ejecutables: ENTRYPOINT vs CMD
Suscríbete para ver másEl contexto de build
Suscríbete para ver másMulti-stage build
Suscríbete para ver másDocker-in-Docker
Suscríbete para ver más¿Cómo funciona el Layer Cache de Docker y cómo optimizarlo?
Docker es una herramienta poderosa que nos permite optimizar nuestro flujo de trabajo mediante el concepto de Layer Cache. El Layer Cache permite que Docker recuerde las capas (layers) que ha construido previamente, ahorrando tiempo al no reconstruirlas si no hay cambios. Imagina la eficiencia que puedes lograr al no tener que repetir tareas que ya has realizado.
¿Cuándo se invalida el Layer Cache?
Un cambio en la base de una imagen resulta en la invalidación del cache de todo lo que deriva de esta base. Por ejemplo, si decides cambiar la versión de Node en tu aplicación de la 12 a la 14, Docker tiene que reconstruir la imagen completa desde cero. Aunque Docker es consciente de las capas existentes y puede reutilizar las imágenes que ya tienes, modificar la base hace que todo deba ser re-evaluado.
¿Cómo estructurar un Dockerfile para aprovechar el cache?
En desarrollo, es común cambiar código con frecuencia para probar nuevas funcionalidades. La estructura de tu Dockerfile es clave para optimizar el uso del cache:
Copia solo lo necesario: Al copiar archivos en tu Dockerfile, comienza por aquellos esenciales, como package.json y package.lock.json. Estos archivos son suficientes para ejecutar npm install.
Minimiza cambios en capas esenciales: Coloca las instrucciones que cambian con más frecuencia, como copiar el resto de tu código, después de las instrucciones que generan costos significativos como npm install.
Este enfoque reduce el tiempo de reconstrucción, permitiendo que solo las capas afectadas se actualicen.
¿Cómo evitar rebuild tras cambiar el código?
El rebuild manual después de cada cambio puede ser tedioso. Aquí es donde BindMounts y herramientas como nodemon entran en juego:
BindMount: Permite compartir el código entre tu máquina local y el contenedor. Esto asegura que los cambios sean reflejados en tiempo real sin reconstruir toda la imagen de Docker.
Nodemon y nodo: Estas herramientas son perfectas para un entorno de desarrollo. Usar nodemon permite monitorizar tus archivos de código y reiniciar el servidor automáticamente al detectar cambios.
Docker Run se modifica de esta forma para implementar BindMount:
docker run --rm -p 3000:3000 -v $(pwd)/index.js:/app/index.js platzi_app
¿Qué problemas surgen al usar BindMount?
Un error común al usar BindMount es sobrescribir las dependencias del contenedor al montar todo el directorio local. Esto se resuelve montando solo los archivos necesarios, como el index.js, evitando conflictos de dependencias.
Montar archivos específicos en lugar de directorios enteros y solucionar problemas de dependencias con npm install son tareas cruciales previas para un entorno de desarrollo eficiente.
Una planificación cuidadosa y el uso de herramientas disponibles optimizan tu flujo de desarrollo considerablemente, permitiéndote centrarte en el código sin preocuparte por innecesarios tiempos de espera. ¡Adelante, sigue aprendiendo y mejorando tus habilidades en Docker!