Qué es Docker y para qué sirve

que-es-docker
que-es-docker

Docker es una plataforma para crear, empaquetar y ejecutar aplicaciones en contenedores. En la práctica, permite mover una aplicación con sus dependencias entre tu equipo, un servidor y un pipeline de CI/CD de forma más predecible.

Si te preguntas qué es Docker, la respuesta útil no es solo “contenedores”: es una forma de reducir diferencias entre entornos, evitar instalaciones frágiles en el host y trabajar con servicios de manera más reproducible.

En esta lección vas a entender para qué sirve, qué problema resuelve, qué piezas básicas lo forman y cuándo conviene pasar a posts más concretos del curso.

👉 Y recuerda, si quieres aprender más de Linux, pincha en este curso de Linux gratis.

🐳 Si quieres aprender más de Docker, pincha en este curso de Docker gratis.

Qué problema resuelve esta plataforma

Problema: una aplicación rara vez depende solo de su código. También necesita una versión concreta de Node, Python, Java, librerías del sistema, variables de entorno, puertos, permisos y servicios auxiliares como PostgreSQL o Redis.

Cuando cada persona instala esas piezas manualmente, aparecen diferencias entre el portátil, el servidor, staging y producción. De ahí sale el clásico “en mi máquina funciona”.

Qué aporta: empaqueta la aplicación y su entorno en una imagen. Esa imagen se ejecuta como contenedor y permite trabajar con una base mucho más consistente entre máquinas.

ProblemaSin contenedoresCon contenedoresDónde profundizar
Dependencias distintasCada máquina instala versiones a mano.La app se ejecuta desde una imagen versionada.imágenes
Entornos inconsistentesDesarrollo, CI y servidor pueden diferir.Se reutiliza el mismo artefacto o una construcción equivalente.guía completa
Servicios auxiliaresInstalas bases de datos o colas en el host.Levantas servicios aislados y declarados.Compose
Datos y estadoLos datos quedan mezclados con el sistema.Separar contenedor y persistencia obliga a pensar en volúmenes.volúmenes

No es una máquina virtual

Un contenedor no arranca un sistema operativo completo como una máquina virtual tradicional. Esta diferencia es clave para explicar qué es Docker con precisión: en Linux, normalmente es un proceso aislado mediante namespaces y cgroups que comparte el kernel del host.

Por eso los contenedores suelen iniciar rápido y consumir menos recursos que una VM completa. Aun así, su aislamiento no debe tratarse como una sandbox perfecta.

Piezas básicas

Para entender qué es Docker sin mezclar conceptos, conviene separar estas piezas:

  • Imagen: plantilla inmutable con el sistema base, dependencias y archivos necesarios para ejecutar una app. Tienes una guía específica sobre imágenes.
  • Contenedor: una ejecución de una imagen. Si la imagen es la receta, el contenedor es el proceso corriendo. Puedes profundizar en contenedores.
  • Motor: crea imágenes, ejecuta contenedores y coordina redes, volúmenes y recursos. Está explicado en Engine.
  • Dockerfile: archivo con instrucciones para construir una imagen. No lo mezclamos todo aquí porque ya tienes la guía de Dockerfile.
  • Compose: herramienta para definir varios servicios en un archivo y levantarlos juntos. La guía dedicada está en Compose.

Un ejemplo mínimo para verlo en acción

El ejemplo más pequeño para comprobar que la herramienta puede descargar una imagen, crear un contenedor y ejecutarlo es:

docker run --rm hello-world

Ese comando ejecuta un contenedor temporal basado en la imagen hello-world. Lo importante es entender el flujo: busca la imagen, la descarga si no existe localmente, crea el contenedor, lo ejecuta y lo elimina al terminar.

Un ejemplo un poco más realista es levantar Nginx en segundo plano y publicar el puerto 80 del contenedor como 8080 en el host:

docker run -d --name web-demo -p 8080:80 nginx:alpine
docker ps
docker stop web-demo
docker rm web-demo

La parte importante es la publicación de puertos. Publicar un puerto es lo que permite acceder desde el host. EXPOSE en un Dockerfile solo documenta un puerto; no lo publica por sí solo.

Dónde encaja Dockerfile

Problema: si solo ejecutas imágenes públicas, te sirve para practicar. Pero en un proyecto real normalmente necesitas construir tu propia imagen con tu aplicación.

Qué aporta Dockerfile: deja por escrito cómo se construye esa imagen. Por ejemplo, una app Node podría partir de una imagen oficial, copiar dependencias, instalarlas y definir el comando de arranque.

FROM node:22-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --omit=dev
COPY . .
CMD ["node", "server.js"]

Este bloque es solo una introducción. La lección completa sobre instrucciones, capas, caché y buenas prácticas está en Dockerfile. Fíjate también en que se usa npm ci –omit=dev, una forma actual de instalar dependencias sin las de desarrollo.

Cuándo usarlo y cuándo no

Encaja muy bien cuando necesitas reproducibilidad, onboarding rápido, pruebas con servicios auxiliares, CI/CD consistente o despliegues basados en imágenes. Si ya tienes claro qué es Docker, este criterio te ayuda a decidir cuándo merece la pena usarlo.

No siempre es la primera herramienta que deberías meter en un proyecto pequeño. Si solo estás ejecutando un script local sin dependencias especiales, puede añadir complejidad innecesaria. También debes tener cuidado con seguridad, permisos, almacenamiento y rendimiento en macOS/Windows.

Errores comunes al empezar

  • Confundir imagen y contenedor: la imagen es la plantilla; el contenedor es una ejecución de esa imagen.
  • Creer que es una VM completa: en Linux comparte el kernel del host y su modelo de aislamiento es diferente.
  • Creer que EXPOSE publica puertos: para acceder desde el host necesitas publicar el puerto con la opción -p o con ports en Compose.
  • Guardar datos importantes dentro del contenedor: para persistencia usa volúmenes o bind mounts.
  • Usar latest sin control: en producción conviene fijar versiones o tags trazables.

Lecciones relacionadas del curso Docker

Si estás siguiendo el itinerario, usa este post como definición base y continúa con piezas más concretas del curso:

Recursos oficiales para seguir contrastando conceptos:

Esta plataforma sirve para ejecutar aplicaciones en contenedores, pero su valor real está en la consistencia: mismas dependencias, entornos más reproducibles y despliegues más controlados.

Quédate con esta idea: una imagen define el entorno, un contenedor ejecuta esa imagen, el motor coordina la ejecución y herramientas como Dockerfile o Compose te ayudan a construir y declarar proyectos más reales. Con esto ya tienes una base clara de qué es Docker y por qué aparece tan pronto en cualquier flujo moderno de desarrollo, sistemas o DevOps.

Comentarios

No hay comentarios aún. ¿Por qué no comienzas el debate?

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *