DEV Community

Cover image for Docker para Jrs #1: Introducción 🔥
Leonel Gareis
Leonel Gareis

Posted on

Docker para Jrs #1: Introducción 🔥

📦 Docker en pocas palabras

Docker es "una" herramienta que permite a los desarrolladores empaquetar sus aplicaciones y todas sus dependencias en un "contenedor". Este contenedor puede ejecutarse en cualquier entorno, garantizando que la aplicación funcione de la misma manera sin importar dónde se ejecute.

¿Por qué Docker es lo recomendado?
En el mundo del desarrollo, es común escuchar la frase "funciona en mi máquina, pero no en la tuya". Docker resuelve este problema al garantizar que tu aplicación y sus dependencias siempre se ejecuten de la misma manera. ¿Cómo lo hace? Empaquetando todo y ejecutandolo en un contenedor, que incluye:

  • El código de tu aplicación.
  • Las bibliotecas y dependencias necesarias.
  • Configuraciones del sistema.

Contenedores vs. Máquinas Virtuales 🖥️

Para entender mejor Docker, es útil compararlo con las máquinas virtuales (VMs).

Máquinas Virtuales

  • Simulan hardware completo: Cada VM incluye un sistema operativo completo.
  • Recursos: Cada VM necesita su propia cantidad de memoria y CPU asignada. Estos recursos son reservados se usen o no.
  • Aislamiento completo: Cada VM opera de manera totalmente independiente, lo que puede ser necesario para ciertos entornos de seguridad o aplicaciones que requieren un nivel alto de aislamiento.

Contenedores

  • Ligereza: Los contenedores comparten el kernel del sistema operativo anfitrión, lo que los hace mucho más ligeros.
  • Arranque rápido: Iniciar un contenedor toma segundos.
  • Eficiencia: Pueden ejecutarse múltiples contenedores en la misma máquina sin una sobrecarga significativa.
  • Aislamiento: Aunque los contenedores comparten el mismo kernel, siguen proporcionando un buen nivel de aislamiento para la mayoría de las aplicaciones.

Beneficios de Docker ⭐

  • Portabilidad: Los contenedores pueden ejecutarse en cualquier entorno que tenga Docker instalado.
  • Eficiencia: Al compartir el kernel del sistema operativo, los contenedores utilizan menos recursos que las máquinas virtuales.
  • Consistencia: El mismo contenedor se puede ejecutar en desarrollo, pruebas y producción, eliminando problemas de configuración entre entornos.
  • Aislamiento: Cada contenedor opera de manera independiente, lo que facilita la gestión de múltiples aplicaciones y sus dependencias.

¿Esto significa que los contenedores son mejores que las máquinas virtuales? No. Son herramientas desarrolladas con propósitos distintos. Habrá casos en los que las máquinas virtuales, sean una mejor solución que un contenedor.

Ejemplo práctico

En la documentación oficial de Docker podes encontrar los pasos para instalar la herramienta según el Sistema Operativo que estés usando.

Dicho esto, para ilustrar lo fácil que es comenzar con Docker, vamos a correr un contenedor simple que muestra un mensaje de "Hola Mundo".

  1. Abris la terminal
  2. Corres el comando docker run hello-world

Y así, sin vueltas, tenés tu primer contenedor corriendo con Docker. ¿Viste qué fácil?
Ahora seguramente la pregunta que se te viene es, ¿cómo hizo Docker esto?

En el medio pasaron algunas cosas que, para no enredarte, decidí graficar:

Image description

De esta imagen podemos desprender tres conceptos nuevos que me gustaría que te lleves:

  1. Docker client: se trata de la interfaz que usamos para comunicarnos con docker. Esta puede ser una interfaz grafica (como Docker Desktop si estas usando Windows/MacOS) o una herramienta de CLI (terminal). Lo importante es que esa herramienta es la encargada de tomar nuestro pedido y enviárselo al "Docker Daemon"
  2. Docker Daemon: el "demonio" de Docker es el cerebro detrás de todo. Expone una API que le permite recibir instrucciones del cliente. Este proceso se ejecuta en segundo plano y se encarga de cosas como: gestión de contenedores, gestión de imágenes, gestión de volúmenes, etc.
  3. Registry: en la imagen vemos a Docker Hub como el lugar donde conseguimos las imágenes. Este sitio es un Registry pero no es el único que existe. Lo importante es que se trata de un lugar remoto donde almacenamos las imágenes de contenedores.

Conclusión 🎯

En esta primera parte del post, hemos explorado qué es Docker y por qué se ha convertido en una herramienta esencial para el desarrollo moderno. Hemos visto que Docker permite empaquetar aplicaciones en contenedores ligeros y portátiles, resolviendo problemas comunes de consistencia y portabilidad en el desarrollo de software.

También hemos comparado contenedores con máquinas virtuales, destacando sus diferencias clave en cuanto a ligereza, eficiencia, y uso de recursos. Los contenedores ofrecen una forma más ágil y eficiente de ejecutar aplicaciones, especialmente en entornos de desarrollo y producción donde la consistencia y la rapidez son cruciales.

Además, hemos desglosado los componentes principales de Docker: el Cliente, el Daemon, y los Registros. Cada uno de estos elementos desempeña un papel fundamental en el ecosistema de Docker, permitiendo a los desarrolladores crear, gestionar y desplegar aplicaciones de manera sencilla y efectiva.

En la próxima parte, vamos a sumergirnos en los conceptos básicos de Docker, como la creación y ejecución de contenedores, y cómo empezar a trabajar con imágenes de Docker. Prepárate para poner manos a la obra y empezar a contenerizar tus aplicaciones.

¡Nos vemos en la próxima! 👋

Top comments (0)