---
titulo: "Práctica P5b: Taller de contenerización con Docker y Singularity/Apptainer para HPC"
modulo: M5
ec: EC5
contenido: "5.2"
semanas: "14"
horas: 4
tipo: "Taller en laboratorio"
asignatura: "Sistemas Paralelos"
sigla: TEL-420
docente: "Ing. Elias Cassal Baldiviezo"
institucion: "Universidad Autónoma Juan Misael Saracho — Facultad de Ciencias Integradas de Yacuiba / F.I.R.N.T."
---

# P5b · Taller de contenerización con Docker y Singularity/Apptainer para HPC

**Contenido del programa:** §20.5 · contenido 5.2  
**Horas de laboratorio:** 4 · **Modalidad:** individual o parejas  

---

## 1. Propósito

Empaquetar aplicaciones científicas paralelas y sus dependencias complejas en contenedores portables y reproducibles, comparando **Docker** (entorno estándar de desarrollo) con **Singularity / Apptainer** (estándar de supercómputo seguro sin privilegios de root e integración nativa con MPI y GPUs).

---

## 2. Fundamentación técnica

En entornos tradicionales de servidores compartidos, Docker presenta serias objeciones de seguridad en HPC porque su demonio se ejecuta con privilegios de administrador (`root`), permitiendo potencial escalada de privilegios.  
**Apptainer (Singularity)** resuelve esto ejecutando el contenedor con los mismos privilegios del usuario del sistema operativo y mapeando directamente los recursos de red InfiniBand/Ethernet y dispositivos GPU de forma nativa.

---

## 3. Actividades guiadas

### Ejercicio 1: Construcción de imagen Docker reproducible para OpenMPI
Elaborar un `Dockerfile` optimizado:

```dockerfile
FROM ubuntu:22.04
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update && apt-get install -y \
    build-essential \
    openmpi-bin \
    libopenmpi-dev \
    openssh-server \
    && rm -rf /var/lib/apt/lists/*
WORKDIR /app
COPY . /app
RUN mpicc -O3 montecarlo_mpi.c -o montecarlo_mpi -lm
CMD ["mpirun", "--allow-run-as-root", "-np", "4", "./montecarlo_mpi", "50000000"]
```

Construir la imagen con `docker build -t hpc-mpi:v1 .` y ejecutar la prueba verificando el aislamiento del entorno.

### Ejercicio 2: Conversión a formato Singularity/Apptainer (.sif)
1. Convertir la imagen Docker a imagen SIF (*Singularity Image Format*):
   ```bash
   apptainer build mpi_app.sif docker-daemon://hpc-mpi:v1
   ```
2. Ejecutar directamente sobre el host sin root:
   ```bash
   apptainer exec mpi_app.sif ./montecarlo_mpi 50000000
   ```
3. Lanzar mediante `mpirun` externo del host orquestando múltiples contenedores:
   ```bash
   mpirun -np 4 apptainer exec mpi_app.sif ./montecarlo_mpi 50000000
   ```

---

## 4. Entregables
1. Archivo `Dockerfile` y receta de Apptainer comentados.
2. Documento técnico que justifique la selección entre Docker y Apptainer según la [Rúbrica de Documentación de Despliegue](file:///home/eliasdev/sistemas_paralelos/10-modulos/M5-orquestacion-cloud/rubrica-documentacion-despliegue.md).
