Práctica – Juego de retos de Docker

Reto1

– Crear un contenedor docker de ubuntu.
– Instalar python, la libreria request y de mysql
– Crear una imgane personalizada con el contenedor

Reto 2

  • Crear un contenedor nuevo con la imagen personalizada  de docker
  • Este contenedor tendra un volumen con una ruta en el disco del anfitrión (Bind)

Reto 3

  • Crear un repositorio git en la carpeta del anfitrión y unirlo con un repositorio en Github

Reto 4

  • Crear un contenedor mysql.
  • Crear una base de datos, para almacenar Coches. Los campos seran id, marca, modelo, color, km y precio
  • añadir almenos 10 coches a modo de contenido de muestra.

Reto 5 

  • Crear en el repositorio Local un programa en python que se conecte a la base de datos y obtenga los registros de la mase de datos.
    – El programa debe listar los datos de los coches guardados en la base de datos de forma estetica.

ID    MARCA          MODELO         COLOR     KM        PRECIO    
————————————————————————
1     Toyota             Corolla              Blanco    20000     15000     
2     Honda              Civic                Rojo        30000     17000     
3     Ford                  Focus               Azul       25000     16000     

Reto 6

  • Almacenar los datos de conexion a la base de datos en un archivo JSON y que el programa Python los lea de dicho archivo. 
    * crear un nuevo archivo para la modificación.
    * Realiza un commit en cada paso
  • crear el .gitignore para que no suba el archivo con los datos de conexión.

Reto 7

Formatear la tabla para que quede mas estetica con la libreria 

+—-+——–+———+——-+————-+——–+
| ID | Marca  | Modelo  | Color | Kilometraje  | Precio |
+—-+——–+———+——-+————-+——–+
| 1  | Toyota | Corolla | Rojo  | 25000        | 15000  |
| 2  | Honda  | Civic   | Azul  | 30000        | 18000  |
| 3  | Ford   | Focus   | Blanco| 40000        | 17000  |
+—-+——–+———+——-+————-+——–+

Reto 8

Crear un conetenedor Mongo y conectarse desde la terminal y utilizando MongoDB
Crea la una bd e inserta en una colecci’on coches con el criterio de de campos del reto anterior
Crear un Script de Python  para leer los datos de colecciones de MongoDB y los imprima en una tabla.

Reto 9

Subir una imagen personaliza de nuestro contenedor mongodb al  hub de Docker.
En el Linux Parrot montar un contenedor con la imagen subida al hub.

Documento de ayuda y pistas para los retos


🚀 RETO 1 — Tu primer contenedor personalizado

Objetivo

Crear un contenedor Ubuntu con Python y librerías necesarias, y convertirlo en una imagen reutilizable.

Pistas

Según la guía visual del PDF (pág. 1), debes:

  • Ejecutar un contenedor Ubuntu
  • Instalar:
    • python3
    • pip
    • requests
    • cliente MySQL

Después crea una imagen personalizada con:

docker commit <contenedor> mi-imagen-personalizada

✅ Checkpoint

Debes poder ver tu imagen con:

docker images

🚀 RETO 2 — Persistencia con Bind Mount

Objetivo

Crear un nuevo contenedor usando la imagen anterior y asociarlo a una carpeta del host.

📌 En la página 2 del PDF se muestra cómo activar modo interactivo y configurar el volumen.

Ejemplo conceptual:

docker run -it -v /ruta/host:/ruta/contenedor mi-imagen

¿Por qué es importante?

Si borras el contenedor, los datos seguirán vivos.

Bienvenido al mundo real.

✅ Checkpoint

Crea un archivo dentro del contenedor y verifica que aparece en el host.


🚀 RETO 3 — Control de versiones

Objetivo

Versionar tu carpeta de trabajo y conectarla a GitHub.

Tal como aparece en la página 3 del PDF:

1️⃣ Inicializa Git
2️⃣ Crea un repositorio en GitHub
3️⃣ Ejecuta:

git add .
git commit -m "Inicio del laboratorio"
git remote add origin <repo>
git push -u origin main

✅ Checkpoint

Tu repositorio debe contener al menos:

  • scripts
  • documentación
  • archivos de configuración

🚀 RETO 4 — MySQL en contenedor

Objetivo

Levantar un contenedor MySQL y crear una base de datos de coches.

Campos:

  • id
  • marca
  • modelo
  • color
  • km
  • precio

Inserta mínimo 10 registros.

📌 La página 4 del PDF muestra la configuración del contenedor.

✅ Checkpoint

Debe funcionar:

SELECT * FROM coches;

🚀 RETO 5 — Python contra la base de datos

Objetivo

Crear un script que lea los coches desde MySQL.

Las páginas 5–7 del PDF enseñan:

  • conexión con mysql.connector
  • uso de cursor
  • fetchall()

Ejemplo conceptual:

cursor.execute("SELECT * FROM coches")
for coche in cursor.fetchall():
    print(coche)

⚠️ Problema común

En la página 9 se menciona un conflicto con el conector de MySQL en Ubuntu.

Solución alternativa:

pip install mysql-connector-python --break-system-packages

✅ Checkpoint

El script debe mostrar registros sin errores.


🚀 RETO 6 — Seguridad básica

Objetivo

Separar credenciales en un archivo JSON.

Después:

✔ Leer ese archivo desde Python
✔ Crear .gitignore
✔ Evitar subir credenciales

✅ Checkpoint

Tu repo NO debe contener:

config.json
.env
credenciales

🚀 RETO 7 — Salida profesional

Objetivo

Mostrar los datos en formato tabla.

En la página 10 se recomienda usar:

apt install python3-prettytable

Ejemplo:

from prettytable import PrettyTable

✅ Checkpoint

La salida debe parecer una tabla real, no texto desordenado.


🚀 RETO 8 — MongoDB entra en escena

Ahora pasamos a bases de datos NoSQL.

Según las páginas 12–16:

Debes:

  • Crear contenedor Mongo
  • Definir usuario y contraseña
  • Crear BD
  • Insertar coches
  • Consultar datos

Acceso desde terminal:

docker exec -it <contenedor> bash
mongosh -u usuario -p password --authenticationDatabase admin

✅ Checkpoint

Debe funcionar:

db.coches.find().pretty()

🚀 RETO 9 — Python + MongoDB

Instala pymongo (pág. 18):

apt install python3-pymongo

Conecta y recorre la colección.

Después muestra los datos en tabla (pág. 20).

✅ Checkpoint

Debes tener:

  • script funcional
  • salida formateada
  • conexión estable

🚀 RETO FINAL — Publica tu imagen

Sube tu imagen de Mongo personalizada a Docker Hub.

Después:

👉 descárgala desde otra máquina (por ejemplo Parrot)
👉 levanta el contenedor

Si funciona…

Acabas de reproducir un flujo profesional real.