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

bash
docker pull hello-world

¿Qué sucede aquí?

text
[Usuario] → [Docker CLI] → [Docker Hub] → [Imagen hello-world] → [Tu computadora]

Salida esperada:

text
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:latest

Paso 2: Ejecutar la imagen

bash
docker container run hello-world

Visualización ASCII del proceso:

text
┌─────────────────────────────────────────────┐
│   TU COMPUTADORA                                                                               │
│  ┌──────────────────────────────────────┐            │
│  │  DOCKER ENGINE                                                                 │            │
│  │  ┌──────────────────────────────┐              │            │
│  │  │  CONTENEDOR AISLADO                                 │              │            │
│  │  │  ┌────────────────────────┐         │              │            │
│  │  │  │  APLICACIÓN:                                     │         │              │            │
│  │  │  │  • Hola Mundo                                      │         │              │            │
│  │  │  │  • Dependencias                                  │          │             │             │
│  │  │  │  • Configuraciones                               │          │             │             │
│  │  │  └────────────────────────┘         │              │            │
│  │  └──────────────────────────────┘              │            │
│  └──────────────────────────────────────┘            │
└─────────────────────────────────────────────┘

Salida esperada:

text
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:

bash
docker images

Verifica los contenedores (incluyendo los que ya terminaron):

bash
docker ps -a

🔍 Explicación Detallada

¿Qué son las etiquetas (tags)?

Las etiquetas son como versiones de libros:

  • latest = Última edición disponible

  • v1.0 = Primera edición

  • v2.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:

text
┌─────────────────────────┐ ← 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

bash
# 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

bash
# Ver todas las imágenes
docker images

# Eliminar una imagen específica
docker rmi [nombre-imagen]

# Eliminar imágenes sin usar
docker image prune

SITE-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:

bash
docker ps -a --filter "ancestor=hello-world:latest"

O para ver todos los contenedores:

bash
docker ps -a

2. Elimina el contenedor mencionado en el error:

bash
docker rm d7cfce7199c

Si el contenedor está en ejecución, primero detenlo:

bash
docker stop d7cfce7199c
docker rm d7cfce7199c

3. Alternativa: Fuerza la eliminación del contenedor (si no lo necesitas):

bash
docker rm -f d7cfce7199c

4. Luego elimina la imagen:

bash
docker rmi hello-world:latest

Si prefieres una solución rápida con un solo comando:

bash
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:

bash
docker run --rm hello-world

Esto te permitirá eliminar la imagen sin problemas después.

🎯 Flujo Completo Visual

text
┌─────────────────────────────────────────────────────────┐
│                    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

  1. c) docker pull nginx - pull es el comando estándar para descargar imágenes

  2. b) 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

  3. b) Una receta con todo lo necesario - Incluye dependencias, configuraciones, y archivos necesarios

  4. c) docker ps -a - La opción -a muestra todos los contenedores (activos e inactivos)

  5. 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)

text
[ DOCKER HUB ]
   └── 📦 Biblioteca de imágenes públicas
       └── 📦 hello-world (imagen oficial)

2. Imagen (El Paquete Sellado)

text
IMAGEN = Software + Dependencias + Configuración
        (Todo en un paquete autocontenido)

3. Contenedor (El Paquete Abierto y Ejecutándose)

text
CONTENEDOR = Imagen en ejecución + Ambiente aislado

🚀 Guía Paso a Paso

Paso 1: Descarga la Imagen

Abre tu terminal y escribe:

bash
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-world con etiqueta latest

  • La 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

bash
docker run hello-world

Lo que sucede detrás de escenas:

  1. ✅ Docker crea un contenedor (ambiente aislado)

  2. ✅ Monta la imagen hello-world dentro

  3. ✅ Ejecuta el programa definido en la imagen

  4. ✅ Muestra el mensaje "Hello from Docker!"

  5. ✅ El contenedor termina su trabajo y se detiene

Visualización del ciclo de vida:

text
[INICIO] → pull → [IMAGEN] → run → [CONTENEDOR ACTIVO] → ejecuta → [CONTENEDOR TERMINADO]

Paso 3: Verifica lo que Ocurrió

Lista las imágenes descargadas:

bash
docker images

Verás algo como:

text
REPOSITORY     TAG       IMAGE ID       SIZE
hello-world    latest    feb5d9fea6a5   13.3kB

Lista todos los contenedores:

bash
docker ps -a

Verás contenedores con estado "Exited" (terminados).

🔄 Comportamiento en Ejecuciones Repetidas

Primera ejecución:

text
Usuario → docker run hello-world
          ↓
Docker: "No tengo la imagen localmente"
          ↓
Descarga de Internet → Ejecuta → Termina

Segunda ejecución (inmediatamente después):

text
Usuario → docker run hello-world
          ↓
Docker: "Ya tengo la imagen localmente"
          ↓
Verifica firma digital → Ejecuta → Termina

Beneficio: 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

bash
# Elimina contenedores terminados
docker container prune

# Elimina imágenes no usadas
docker image prune

3. Entiende los estados

text
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

  1. Ejecuta por primera vez:

    bash
    docker run hello-world
  2. Verifica cuántos contenedores hay:

    bash
    docker ps -a | grep hello-world
  3. Ejecuta dos veces más y observa cómo aumenta el número de contenedores

  4. Limpia todos los contenedores terminados:

    bash
    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:

  1. Ejecutar aplicaciones más complejas (nginx, MySQL)

  2. Crear tus propias imágenes Docker

  3. Conectar múltiples contenedores

  4. Aprender sobre volúmenes y redes Docker

Comentarios

Entradas más populares de este blog

14. Publish and Detached modes

11¿Qué es Docker? y ¿Por qué debo saberlo?