¿Qué es Docker?
Docker es una software que nos permite empaquetar y ejecutar aplicaciones dentro de lo que llamamos contenedores.
Estos contenedores incluyen todo lo necesario para que nuestra aplicación funcione de la misma forma en cualquier máquina: librerías, dependencias y configuraciones.
Algunas características interesantes de Docker son:
• Open Source
• Ligero y rápido comparado con máquinas virtuales
• Gran comunidad y ecosistema de imágenes listas para usar
• Compatible con la mayoría de servicios cloud
Ejemplo práctico
Imaginad que tenemos una aplicación web desarrollada en Python y queremos desplegarla en diferentes entornos (nuestro portátil, un servidor en la nube o incluso en un clúster de Kubernetes).
Si lo hacemos a mano, probablemente tengamos que instalar Python, dependencias específicas, asegurarnos de las versiones, configurar variables de entorno… y todo esto multiplicado por cada servidor. Suena tedioso, ¿verdad? y aparte también podemos encontrar muchos problemas típicos de instalación en los servidores, incompatibilidades de versiones, configuraciones erróneas…
Con Docker lo que haremos será desplegar un servicio como nginx para servir nuestra web valiéndonos de la imagen oficial
docker run --rm -d -p 80:80 --name web -v ~/site-content:/usr/share/nginx/html nginx
¿Qué hace este comando?
docker run
Dice: “Crea y ejecuta un nuevo contenedor”.--rm
Cuando pares el contenedor, se borrará solo. 👉 Evita que se acumulen contenedores “muertos” en tu máquina.-d
Ejecuta el contenedor en segundo plano (detached). 👉 Es como decir: “No me muestres todo el log en pantalla, arráncalo y déjalo corriendo por detrás”.-p 80:80
-
80
= puerto interno de nginx dentro del contenedor. 80
= puerto de tu ordenador que usaremos para acceder. 👉 Traducido: si entras ahttp://localhost:80
en tu navegador → verás la web que sirve nginx.
-
--name web
Le pone un nombre al contenedor: web. 👉 Así no tienes que referirte a él por un ID largo, puedes usardocker stop web
odocker logs web
.-v ~/site-content:/usr/share/nginx/html
-
~/site-content
→ carpeta de tu ordenador /usr/share/nginx/html
→ carpeta dentro del contenedor donde nginx busca los archivos que debe servir. 👉 Es como decir: “Coge mi carpeta local con el contenido de la web y úsala dentro del contenedor para que nginx la sirva”.
-
nginx
Es la imagen que usaremos: nginx oficial de Docker Hub.
¿En que se diferencia Docker de una VM entonces?
Profundizando en una VM, podemos ver que podemos lanzar múltiples VMs sobre un servidor físico, sin embargo cada S.O es completamente diferente y necesita todas y cada una de las librerías, dependencias, etc para funcionar.

Como podemos ver en el ejemplo de abajo , podemos correr múltiples contenedores sobre un mismo servidor (físico o virtual), sin embargo una de las maravillas de docker al trabajar por «layers» o capas, es que podemos partir de múltiples contenedores cuya base sea la misma y ahorraremos tanto espacio como recursos, además el tiempo de despliegue de cada aplicativo será de segundos al no necesitar configurar cada parte del servicio y no de minutos (e incluso horas) en el caso de una VM.


Documentación de referencia: https://docs.frikiteam.es/doc/docker/docker_base/