Diferencia entre revisiones de «Tutorial-docker»
(Página creada con «= Ejercicio 1: Empezamos desde cero — creando la estructura base de Docker = El objetivo es eliminar toda la configuración previa y crear desde cero la estructura de ca...») |
(Sin diferencias)
|
Revisión del 20:10 11 oct 2025
Ejercicio 1: Empezamos desde cero — creando la estructura base de Docker
El objetivo es eliminar toda la configuración previa y crear desde cero la estructura de carpetas que contendrá nuestros futuros archivos Docker.
1. Eliminar la configuración existente
Antes de comenzar, asegúrate de borrar cualquier carpeta Docker existente en el proyecto. En este caso, le haremos una copia de seguridad para poder volver a ella.
mv docker docker.bk
⚠️ Este paso es importante: partimos completamente desde cero para entender cada parte del sistema.
2. Crear un Dockerfile mínimo
Ahora crea nuevamente la carpeta base donde almacenaremos los archivos relacionados con Docker:
mkdir -p docker/images
Vamos a explicar los distintos apartados:
FROM
FROM python:3.12-slim
Indica la imagen base sobre la que se construirá la tuya. En este caso, parte de una imagen ligera que ya tiene Python 3.12 instalado.
WORKDIR
WORKDIR /app
Esta línea define el directorio de trabajo dentro del contenedor. A partir de aquí, todos los comandos que aparezcan después (COPY, RUN, CMD, etc.) se ejecutarán dentro de /app.
Ojo: /app no es la carpeta app/ de tu proyecto local. Son cosas distintas.
En tu máquina puede existir algo como:
uvlhub
app
core
requirements.txt
Pero dentro del contenedor la estructura será distinta:
/ app/ app/ ← aquí dentro se habrá copiado tu carpeta local "app"
Cuando más adelante uses:
COPY . .
Docker copiará todos los archivos de tu proyecto dentro de la carpeta /app del contenedor. Por eso el código quedará en /app/app/.
COPY
COPY . .
Copia todos los archivos del proyecto (del host) dentro del contenedor, en /app. El primer punto es el origen; el segundo, el destino.
RUN
RUN pip install --no-cache-dir -r requirements.txt
Ejecuta comandos durante la construcción de la imagen. Aquí instalamos las dependencias necesarias desde requirements.txt. El resultado de este paso quedará guardado en la imagen.
EXPOSE
EXPOSE 5000
Documenta el puerto que la aplicación usa dentro del contenedor. Esto no lo abre al exterior; simplemente indica que la app escucha en el 5000.
CMD
CMD ["flask", "run", "--host=0.0.0.0", "--port=5000", "--reload", "--debug"]
Define el comando que se ejecutará cuando el contenedor se inicie. En este caso, ejecutará la aplicación Flask.
9. Dockerfile completo
FROM python:3.12-slim
WORKDIR /app
COPY . .
RUN pip install --no-cache-dir -r requirements.txt
EXPOSE 5000
CMD ["flask", "run", "--host=0.0.0.0", "--port=5000", "--reload", "--debug"]
10. Construir la imagen
Desde la raíz del proyecto (no dentro de docker/images):
docker build -t uvlhub:dev -f docker/images/Dockerfile.dev .
11. Ejecutar el contenedor
docker run -p 5000:5000 uvlhub:dev
Abre el navegador en http://localhost:5000. ¿Qué es lo que observas?