Unidad 9: Herramientas para desarrollo y gestión de proyectos de software#

Contenido de la unidad#

Introducción a Docker#

Docker es una plataforma de código abierto que permite a los desarrolladores y a los administradores de sistemas construir, enviar y ejecutar aplicaciones en contenedores. Estos contenedores son unidades estándar de software que empaquetan el código y todas sus dependencias para que la aplicación se ejecute de manera rápida y confiable desde un entorno a otro.

¿Qué es la vitualización?#

La virtualización se refiere a la creación de versiones virtuales de recursos físicos, como servidores, dispositivos de almacenamiento, redes e incluso sistemas operativos. En lugar de interactuar con el hardware físico directamente, los sistemas y aplicaciones interactúan con representaciones virtuales de ese hardware. Esta abstracción permite una mayor flexibilidad, eficiencia y consolidación de recursos.

Deventajas de las máquinas virtuales#

  • Peso: El el orden de los GB. Repiten archivos en común. Inicio lento.

  • Costo de la administración: Necesita mantenimiento igual que otra computadora.

  • Múltiples formatos: VDI, VMDK, VHD, raw, etc.

¿Qué es un contenedor?#

Un contenedor es una unidad estándar de software que empaqueta el código y todas sus dependencias para que la aplicación se ejecute de manera rápida y confiable desde un entorno de desarrollo a un entorno de producción.

Ventajas de los contenedores#

  • Flexibles: No importa el tipo de aplicación que decidas meter en un contenedor, siempre funcionará igual.

  • Ligeros: Los contenedores comparten el mismo kernel del sistema operativo y solo ejecutan los procesos que necesitan, por lo que son mucho más ligeros que las máquinas virtuales.

  • Portables: Puedes construir localmente, desplegar en la nube y ejecutar en cualquier lugar.

  • Escalables: Puedes aumentar y distribuir automáticamente réplicas de contenedores en función de la demanda.

  • Seguros: Los contenedores aplican aislamiento de recursos y restricciones de acceso, al tiempo que aprovechan el kernel del host subyacente.

  • Bajo acoplamiento: Los contenedores están altamente acoplados con el código y las dependencias que contienen, pero están débilmente acoplados con otros contenedores y la infraestructura subyacente.

Contenedores vs máquinas virtuales(VM’s)#

A diferencia de las máquinas virtuales, que virtualizan todo el sistema operativo y el hardware subyacente, los contenedores virtualizan el sistema operativo, compartiendo el mismo núcleo del sistema operativo, pero funcionando en espacios de usuario separados.

Docker#

Docker es una de las plataformas de contenedores más populares y ha jugado un papel fundamental en la popularización de la tecnología de contenedores.

Instalación de Docker#

Comandos básicos de Docker#

  • docker version: Muestra la versión de docker.

  • docker info: Muestra información del sistema.

  • docker build: Construye una imagen.

  • docker run: Ejecuta un contenedor.

  • docker inspect: Muestra información detallada de un contenedor.

  • docker prune: Elimina contenedores, imágenes, volúmenes y redes no utilizados.

  • docker ps: Lista los contenedores que se están ejecutando.

  • docker ps -a: Lista todos los contenedores.

  • docker stop: Detiene un contenedor.

  • docker rm: Elimina un contenedor.

Vamos a creaer el contenedor de la aplicación de backend.#

Asegurate de tener instalado Git.#

Crear el archivo Dockerfile#

# Usa una imagen base de Python
FROM python:3.10-slim-buster

# Copia los archivos de tu proyecto al contenedor
COPY . /app

# Cambia al directorio de la aplicación
WORKDIR /app

# Instala las dependencias
RUN pip install --no-cache-dir -r requirements.txt

# Expone el puerto que utilizará FastAPI
EXPOSE 8000

# Comando para ejecutar la aplicación
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]

Crear el archivo .dockerignore#

__pycache__/
.dockerignore
Dockerfile
*.pyc
*.pyo
*.pyd
.Python
db.sqlite3
*.git
*.so
*.DS_Store

Construir la imagen del contenedor#

docker build -t backend .

Ejecutar el contenedor#

docker run -d --name backend -p <local_PORT>:<container_PORT> backend
docker run -d --name backend -p 8000:8000 backend

Verificar que el contenedor se está ejecutando#

docker ps

Vamos a subir a github el cambio de los archivos Dockerfile y .dockerignore#

git add .
git commit -am "Dockerfile and .dockerignore added"
git push

Ahora vamos a realizar el despliegue de nuestra aplicación apoyados del contenedor en un servidor.