Contenido del curso
0:00/8:49
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
play_circleViendo ahora¿Qué es Docker in Docker y por qué es importante?
Docker es una herramienta ideal para desarrollar, probar y desplegar aplicaciones de manera uniforme. Sin embargo, existe una práctica menos común, pero extremadamente poderosa, que es utilizar Docker desde dentro de otros contenedores, una práctica conocida como Docker in Docker. ¿Por qué esto podría ser útil? Imagina que necesitas trabajar con scripts o aplicaciones que requieren levantar contenedores o interactuar con otros ya existentes. Esta capacidad es crucial para sistemas más complejos, especialmente en flujos de trabajo automatizados como CI/CD (Integración y Despliegue Continuo).
¿Cómo se logra Docker in Docker?
En un sistema Linux, donde todo es un archivo, aprovechamos el acceso al Docker daemon a través de un socket. Este socket es un archivo que se puede montar en un contenedor, permitiendo que el cliente de Docker del contenedor se comunique directamente con el Docker daemon del host.
Aquí te mostramos cómo montar un socket Docker dentro de un contenedor:
docker run -it --rm \ -v /var/run/docker.sock:/var/run/docker.sock \ docker:19.0.3.12
docker:19.0.3.12 es la imagen oficial de Docker que contiene el cliente de Docker./var/run/docker.sock es el socket del Docker daemon montado en el contenedor.¿Qué se puede hacer desde un contenedor con Docker in Docker?
Desde dentro de un contenedor con acceso al Docker daemon puedes:
docker ps.docker run -d --name app <nombre_imagen>
Un ejemplo avanzado es el uso de Dive, una herramienta para explorar el contenido de las imágenes Docker sin necesidad de instalarlas en el sistema operativo nativo. Aquí mostramos cómo hacerlo desde un contenedor:
docker run --rm -it \ -v /var/run/docker.sock:/var/run/docker.sock \ -v $(which docker):/usr/bin/docker \ wagoodman/dive:latest <nombre_imagen>
¿Cuáles son los riesgos de Docker in Docker?
A pesar de sus beneficios, Docker in Docker no es seguro si se utiliza sin precauciones. Montar el socket del Docker daemon en un contenedor significa otorgarle un poder considerable sobre tu sistema Docker:
Docker in Docker es una herramienta poderosa, pero como todo superpoder, conlleva una gran responsabilidad. Utilízalo con precaución y asegúrate de comprender completamente sus implicaciones en términos de seguridad y control del sistema. ¡Así podrás aprovechar al máximo sus capacidades sin comprometer la seguridad de tus despliegues y aplicaciones!