12. Hola Mundo en Docker.
docker --version
Hola Mundo en Docker para Principiantes
📚 Conceptos Básicos
¿Qué es Docker?
Imagina que Docker es como una máquina de empaquetado y envío para aplicaciones. Así como las compañías navieras usan contenedores estándar para transportar cualquier mercancía (muebles, electrónicos, alimentos), Docker crea "contenedores" estandarizados para cualquier aplicación.
¿Qué es una imagen Docker?
Una imagen es como una receta de cocina completa:
📋 Lista de ingredientes (dependencias)
🍳 Instrucciones de preparación (configuraciones)
⚙️ Utensilios necesarios (binarios, librerías)
Todo empacado y listo para usar
¿Qué es un contenedor?
Un contenedor es como cocinar usando esa receta:
🍽️ Tomas la receta (imagen)
🔥 Usas tu cocina (sistema operativo)
🧑🍳 Preparas el platillo (ejecutas la aplicación)
Cada vez que cocinas, es una instancia independiente
🚀 Tu Primer Hola Mundo en Docker
Paso 1: Descargar tu primera imagen
docker pull hello-world¿Qué sucede aquí?
[Usuario] → [Docker CLI] → [Docker Hub] → [Imagen hello-world] → [Tu computadora]Salida esperada:
Using default tag: latest
latest: Pulling from library/hello-world
2db29710123e: Pull complete
Digest: sha256:aa0cc8055b82dc2509bed2e19b275c8f463506616377219d9642221ab53cf9fe
Status: Downloaded newer image for hello-world:latest
docker.io/library/hello-world:latestPaso 2: Ejecutar la imagen
docker container run hello-worldVisualización ASCII del proceso:
┌─────────────────────────────────────────────┐
│ TU COMPUTADORA │
│ ┌──────────────────────────────────────┐ │
│ │ DOCKER ENGINE │ │
│ │ ┌──────────────────────────────┐ │ │
│ │ │ CONTENEDOR AISLADO │ │ │
│ │ │ ┌────────────────────────┐ │ │ │
│ │ │ │ APLICACIÓN: │ │ │ │
│ │ │ │ • Hola Mundo │ │ │ │
│ │ │ │ • Dependencias │ │ │ │
│ │ │ │ • Configuraciones │ │ │ │
│ │ │ └────────────────────────┘ │ │ │
│ │ └──────────────────────────────┘ │ │
│ └──────────────────────────────────────┘ │
└─────────────────────────────────────────────┘Salida esperada:
Hello from Docker!
This message shows that your installation appears to be working correctly.Paso 3: Ver qué pasó
Verifica que la imagen está descargada:
docker imagesVerifica los contenedores (incluyendo los que ya terminaron):
docker ps -a🔍 Explicación Detallada
¿Qué son las etiquetas (tags)?
Las etiquetas son como versiones de libros:
latest= Última edición disponiblev1.0= Primera ediciónv2.1= Segunda edición, primera revisión
Importante: latest no siempre significa "el más nuevo", es solo una etiqueta con ese nombre.
Arquitectura de capas
Las imágenes Docker tienen estructura de capas como una cámara de ropa:
┌─────────────────────────┐ ← Capa 4: Tu aplicación (MB)
├─────────────────────────┤ ← Capa 3: Dependencias (100MB)
├─────────────────────────┤ ← Capa 2: Librerías sistema (50MB)
└─────────────────────────┘ ← Capa 1: Sistema base (5MB)Ventaja: Si descargas otra imagen que use la misma base, solo descargas las capas diferentes.
🧹 Mantenimiento Básico
Limpiar contenedores terminados
# Ver todos los contenedores
docker ps -a
# Eliminar contenedores terminados
docker container prune
# Eliminar un contenedor específico
docker rm [nombre-contenedor]Limpiar imágenes no usadas
# Ver todas las imágenes
docker images
# Eliminar una imagen específica
docker rmi [nombre-imagen]
# Eliminar imágenes sin usar
docker image pruneSITE-SOTELO@DESKTOP-B0OM931 MINGW64 ~
$ docker rmi hello-world:latest
Error response from daemon: conflict: unable to delete hello-world:latest (must be forced) - container d7cfc1e7199c is using its referenced image 05813aedc15f
. Verifica qué contenedores están usando la imagen:
docker ps -a --filter "ancestor=hello-world:latest"
O para ver todos los contenedores:
docker ps -a
2. Elimina el contenedor mencionado en el error:
docker rm d7cfce7199c
Si el contenedor está en ejecución, primero detenlo:
docker stop d7cfce7199c docker rm d7cfce7199c
3. Alternativa: Fuerza la eliminación del contenedor (si no lo necesitas):
docker rm -f d7cfce7199c
4. Luego elimina la imagen:
docker rmi hello-world:latestSi prefieres una solución rápida con un solo comando:
docker rm -f d7cfce7199c && docker rmi hello-world:latest
Para prevenir esto en el futuro:
Cuando ejecutes contenedores temporales (como hello-world), usa el flag --rm para que se eliminen automáticamente al detenerse:
docker run --rm hello-world
Esto te permitirá eliminar la imagen sin problemas después.
🎯 Flujo Completo Visual
┌─────────────────────────────────────────────────────────┐ │ FLUJO HOLA MUNDO │ ├──────────────────────────────────────────────┤ │ 1. docker pull hello-world ← Descarga imagen │ │ ↓ │ │ 2. docker run hello-world ← Crea contenedor │ │ ↓ │ │ 3. Contenedor ejecuta "Hola Mundo" │ │ ↓ │ │ 4. Contenedor termina (exited) │ │ ↓ │ │ 5. Contenedor queda en historial │ └─────────────────────────────────────────────────────────┘
📝 Cuestionario
Pregunta 1
¿Qué comando usarías para descargar la imagen "nginx" de Docker Hub?
a) docker download nginx
b) docker get nginx
c) docker pull nginx
d) docker fetch nginx
Pregunta 2
Cuando ejecutas docker run hello-world por segunda vez (sin cambios), ¿qué sucede?
a) Descarga la imagen nuevamente
b) Verifica la firma y usa la imagen local
c) Da error porque ya existe
d) Crea un contenedor pero no lo ejecuta
Pregunta 3
¿Qué representa mejor una imagen Docker?
a) Un programa ejecutándose
b) Una receta con todo lo necesario
c) Un sistema operativo completo
d) Un archivo de configuración
Pregunta 4
¿Cómo ves todos los contenedores, incluidos los terminados?
a) docker ps
b) docker containers
c) docker ps -a
d) docker show all
Pregunta 5
¿Qué significa la etiqueta "latest" en una imagen Docker?
a) Siempre es la versión más nueva
b) Es una etiqueta llamada "latest", no necesariamente la más nueva
c) Es la versión estable más reciente
d) Es la versión de prueba
✅ Respuestas
c)
docker pull nginx-pulles el comando estándar para descargar imágenesb) Verifica la firma y usa la imagen local - Docker verifica que la firma coincida con la remota y usa la local si es idéntica
b) Una receta con todo lo necesario - Incluye dependencias, configuraciones, y archivos necesarios
c)
docker ps -a- La opción-amuestra todos los contenedores (activos e inactivos)b) Es una etiqueta llamada "latest", no necesariamente la más nueva - "latest" es solo un nombre de etiqueta, especialmente en imágenes no oficiales
Tutorial Mejorado: Hola Mundo en Docker
🎯 Objetivo del Tutorial
Aprenderás a ejecutar tu primera aplicación en Docker, entendiendo los conceptos fundamentales mediante ejemplos prácticos.
✨ ¿Por qué empezar con "Hola Mundo"?
El "Hola Mundo" en Docker es equivalente a aprender a andar en bicicleta con rueditas de entrenamiento:
Es simple y seguro
Te muestra el proceso completo
No requiere conocimientos previos
Te da confianza para continuar
📦 Los 3 Componentes Esenciales
1. Docker Hub (La Tienda)
[ DOCKER HUB ]
└── 📦 Biblioteca de imágenes públicas
└── 📦 hello-world (imagen oficial)2. Imagen (El Paquete Sellado)
IMAGEN = Software + Dependencias + Configuración
(Todo en un paquete autocontenido)3. Contenedor (El Paquete Abierto y Ejecutándose)
CONTENEDOR = Imagen en ejecución + Ambiente aislado🚀 Guía Paso a Paso
Paso 1: Descarga la Imagen
Abre tu terminal y escribe:
docker pull hello-world¿Qué está pasando?
Docker busca la imagen en tu computadora → No la encuentra
Se conecta a Docker Hub (el repositorio público)
Descarga la imagen
hello-worldcon etiquetalatestLa almacena localmente para uso futuro
Analogía: Es como descargar una app en tu teléfono desde la tienda de aplicaciones.
Paso 2: Ejecuta la Imagen
docker run hello-worldLo que sucede detrás de escenas:
✅ Docker crea un contenedor (ambiente aislado)
✅ Monta la imagen
hello-worlddentro✅ Ejecuta el programa definido en la imagen
✅ Muestra el mensaje "Hello from Docker!"
✅ El contenedor termina su trabajo y se detiene
Visualización del ciclo de vida:
[INICIO] → pull → [IMAGEN] → run → [CONTENEDOR ACTIVO] → ejecuta → [CONTENEDOR TERMINADO]Paso 3: Verifica lo que Ocurrió
Lista las imágenes descargadas:
docker imagesVerás algo como:
REPOSITORY TAG IMAGE ID SIZE
hello-world latest feb5d9fea6a5 13.3kBLista todos los contenedores:
docker ps -aVerás contenedores con estado "Exited" (terminados).
🔄 Comportamiento en Ejecuciones Repetidas
Primera ejecución:
Usuario → docker run hello-world
↓
Docker: "No tengo la imagen localmente"
↓
Descarga de Internet → Ejecuta → TerminaSegunda ejecución (inmediatamente después):
Usuario → docker run hello-world
↓
Docker: "Ya tengo la imagen localmente"
↓
Verifica firma digital → Ejecuta → TerminaBeneficio: La verificación por firma asegura que estás ejecutando exactamente lo mismo que descargaste originalmente.
🏗️ Estructura de Capas (Explicación Simple)
Piensa en una imagen Docker como una muñeca rusa:
Capa exterior: Tu aplicación específica
Capa media: Librerías y dependencias
Capa interior: Sistema base mínimo
Ventaja práctica: Si otra imagen usa la misma capa base, ¡no necesitas descargarla dos veces!
🧹 Buenas Prácticas desde el Día 1
1. Navega en Docker Hub
Visita hub.docker.com y busca "hello-world". Verás:
✅ Imagen oficial (certificada por Docker)
📊 Estadísticas de descargas
📖 Documentación
🏷️ Versiones disponibles
2. Limpia regularmente
# Elimina contenedores terminados
docker container prune
# Elimina imágenes no usadas
docker image prune3. Entiende los estados
Estados de un contenedor:
● Created → Recién creado
● Running → En ejecución
● Paused → Pausado
● Exited → Terminó correctamente
● Dead → Terminó con error🎯 Ejercicio Práctico
Objetivo: Ejecutar hello-world 3 veces y observar los resultados
Ejecuta por primera vez:
docker run hello-worldVerifica cuántos contenedores hay:
docker ps -a | grep hello-worldEjecuta dos veces más y observa cómo aumenta el número de contenedores
Limpia todos los contenedores terminados:
docker container prune
❓ Preguntas Frecuentes
¿La imagen hello-world ocupa mucho espacio?
No, solo ocupa 13.3kB. Es una imagen mínima diseñada para demostraciones.
¿Puedo ejecutarla sin internet?
Sí, una vez descargada, puedes ejecutarla offline.
¿Cada docker run crea un contenedor nuevo?
Sí, cada ejecución crea un contenedor nuevo. Por eso se acumulan en el historial.
¿Cómo sé si Docker está instalado correctamente?
El mensaje "Hello from Docker!" confirma que todo funciona correctamente.
📈 Siguientes Pasos
Ahora que completaste el Hola Mundo, estás listo para:
Ejecutar aplicaciones más complejas (nginx, MySQL)
Crear tus propias imágenes Docker
Conectar múltiples contenedores
Aprender sobre volúmenes y redes Docker
Comentarios
Publicar un comentario