Construcción de un contenedor personalizado

Una vez que has creado un contenedor en formato sandbox, puedes personalizarlo instalando aplicaciones, configurando entornos de trabajo, y dejando todo listo para la ejecución de tus análisis bioinformáticos.

🧬 Crear un contenedor Apptainer de MrBayes con soporte para MPI

En esta sección aprenderás a instalar MrBayes con soporte para paralelización mediante MPI (Message Passing Interface), permitiendo ejecutar análisis bayesianos para inferencia filogenética en múltiples núcleos.

📥 1. Descargar imagen base de Ubuntu

apptainer pull docker://ubuntu:22.04

Esto generará el archivo:

ubuntu_22.04.sif

📦 2. Crear un sandbox editable desde la imagen

apptainer build --sandbox mrbayes_mpi ubuntu_22.04.sif

🧑 🔧 3. Entrar al contenedor en modo escritura y root simulado

apptainer shell --writable --fakeroot --pwd / mrbayes_mpi

Con --writable, puedes: instalar paquetes, modificar archivos de configuración, compilar software y crear nuevos directorios o eliminar archivos.

Con --fakeroot, puedes:

  • Simula privilegios de administrador solo dentro del contenedor.

  • Te permite usar comandos como apt install, make install, etc.

  • No afecta al sistema anfitrión y no requiere permisos reales de root.

Con --pwd, puedes colocarte directamente en / dentro del contenedor, aunque tu $HOME siga estando montado en /root.

⚠️ Puede aparecer esta advertencia:

WARNING: Skipping mount /etc/localtime [binds]: /etc/localtime doesn't exist in container

Si aparece el warning Skipping mount /etc/localtime, lo corregiremos más adelante.

🌐 4. Configurar idioma y zona horaria

A) Configurar localización (locale)

apt update
apt install -y locales
locale-gen en_US.UTF-8
update-locale LANG=en_US.UTF-8
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8

B) Corregir warning de /etc/localtime

apt install -y tzdata
ln -sf /usr/share/zoneinfo/Etc/UTC /etc/localtime

⚙️ 5. Instalar dependencias del sistema

apt install -y build-essential make pkg-config git wget curl \
latexmk texlive-latex-base texlive-fonts-recommended \
texlive-fonts-extra texlive-latex-extra \
openmpi-bin openmpi-common openmpi-doc libopenmpi-dev

🔬 6. Descargar y compilar MrBayes con soporte MPI

cd /opt
git clone https://github.com/NBISweden/MrBayes.git
cd MrBayes
./configure --with-mpi
make -j$(nproc)
make install

🚪 7. Salir del contenedor

exit

📦 8. Empaquetar el sandbox como archivo .sif (opcional)

Una vez que has terminado de configurar y personalizar tu contenedor en formato sandbox, puedes empaquetarlo como un archivo .sif para facilitar su distribución y ejecución.

⚠️ Para construir un archivo .sif es necesario tener privilegios de administrador (sudo), ya que el proceso de empaquetado requiere montar ciertos recursos del sistema.

sudo apptainer build mrbayes_mpi.sif mrbayes_mpi

🚀 9. Ejecutar MrBayes con MPI desde el contenedor .sif

Supongamos que ya lograste generar el archivo mrbayes_mpi.sif y tienes tu archivo de análisis analysis.nex ubicado en:

/home/usuario/analisis/data/analysis.nex

Antes de correr MrBayes, puedes inspeccionar el contenido interno del contenedor con:

apptainer exec mrbayes_mpi.sif ls

Esto te mostrará el contenido del contenedor, generalmente ubicado bajo la ruta /root/, que es el equivalente al $HOMEde tu usuario.

📁 Acceder a tus archivos de datos externos

Como tus datos (analysis.nex) están fuera del contenedor, debes decirle a Apptainer que los “mapee” (monte) al interior del contenedor.

Para ejecutar MrBayes usando 8 núcleos y especificar la ruta al archivo .nex dentro del contenedor, utiliza:

apptainer exec mrbayes_mpi.sif mpirun -np 8 mb analisis/data/analysis.nex

💡 Puedes ajustar el número de núcleos (-np 8) según los recursos disponibles.

💻 10. Ejecutar MrBayes en segundo plano

Para ejecutar MrBayes con MPI dentro del contenedor .sif y dejarlo trabajando en segundo plano, usa el siguiente comando con redirección.

apptainer exec mrbayes_mpi.sif mpirun -np 8 mb analisis/data/analysis.nex > mrbayes.log 2>&1 &

✅ Explicación:

  • > redirige la salida estándar a un archivo (mrbayes.log).

  • 2>&1 redirige también los errores al mismo archivo.

  • & al final del comando envía el proceso al background.

📋 Verificar si sigue corriendo

ps aux | grep mb

🧼 Detenerlo si es necesario

Si conoces el número de proceso (PID):

kill PID

✅ Para ver el archivo .log en tiempo real mientras se está ejecutando el análisis, puedes usar:

tail -f mrbayes.log

Cuando hayas terminado de monitorear, puedes salir de tail con:

Ctrl + C