Unidad 8: Ambientes virtuales y contenedores

¿Por qué necesitamos aislar software?

En bioinformática es común trabajar con programas que requieren versiones específicas de librerías, intérpretes y dependencias. Esto puede generar conflictos entre herramientas, dificultar la reproducibilidad y complicar la colaboración entre usuarios o laboratorios.

Algunos problemas comunes son:

  • Un programa funciona en una computadora, pero no en otra.
  • Dos herramientas requieren versiones distintas de la misma librería.
  • Un análisis no puede reproducirse meses después por cambios en el sistema.
  • En un servidor multiusuario no es deseable instalar todo de forma global.

Para resolver este tipo de problemas existen dos estrategias muy utilizadas:

  • Ambientes virtuales
  • Contenedores

¿Qué es un ambiente virtual?

Un ambiente virtual es un espacio aislado dentro del sistema operativo donde se instalan versiones específicas de programas, librerías y dependencias sin afectar al resto del sistema.

Esto permite que distintos proyectos utilicen configuraciones diferentes en la misma máquina.

Ventajas de los ambientes virtuales

  • Permiten instalar software sin modificar todo el sistema.
  • Facilitan el manejo de dependencias por proyecto.
  • Son relativamente sencillos de crear y usar.
  • Son muy útiles para enseñanza, pruebas rápidas y desarrollo.

Desventajas de los ambientes virtuales

  • Dependen más del sistema anfitrión.
  • No siempre garantizan reproducibilidad total entre distintas máquinas.
  • Pueden surgir conflictos entre canales o paquetes.
  • En proyectos complejos pueden volverse difíciles de mantener.

Herramientas para manejar ambientes

Conda

Conda es un sistema de gestión de paquetes y ambientes muy usado en bioinformática. Permite instalar herramientas y dependencias en ambientes separados.

Mamba

Mamba es una alternativa compatible con Conda, pero mucho más rápida al resolver dependencias. Es especialmente útil en servidores y proyectos con muchas instalaciones.

Pixi

Pixi es una herramienta más reciente orientada al manejo reproducible de ambientes por proyecto. Utiliza archivos de configuración y bloqueo para facilitar la portabilidad y reproducibilidad.

¿Qué es un contenedor?

Un contenedor es una forma de empaquetar una aplicación junto con sus programas, librerías y dependencias, de modo que pueda ejecutarse de manera más consistente en diferentes entornos.

A diferencia de un ambiente virtual, un contenedor ofrece un mayor nivel de aislamiento y portabilidad.

Ventajas de los contenedores

  • Mejoran la reproducibilidad.
  • Facilitan compartir software y pipelines completos.
  • Permiten mover análisis entre computadoras con menos conflictos.
  • Son muy útiles en flujos de trabajo científicos y de alto rendimiento.

Desventajas de los contenedores

  • Tienen una curva de aprendizaje mayor.
  • Requieren entender conceptos adicionales como imágenes, volúmenes y montaje de directorios.
  • Algunas herramientas no son igual de adecuadas para sistemas multiusuario compartidos.

Herramientas de contenedores

Docker

Docker es una de las plataformas de contenedores más conocidas. Es excelente para desarrollo local, distribución de software y construcción de imágenes.

Podman

Podman es similar a Docker, pero con una arquitectura sin daemon. Puede ser una buena alternativa en sistemas Linux y entornos institucionales.

Apptainer

Apptainer es una herramienta especialmente útil en ambientes HPC. Permite ejecutar contenedores de manera más compatible con clústeres y sistemas multiusuario.

Ambientes virtuales vs contenedores

Ambientes virtuales

Convienen cuando:

  • Se quiere instalar software rápidamente.
  • Se trabaja en desarrollo o enseñanza.
  • Se necesita flexibilidad para modificar paquetes.
  • El proyecto no requiere encapsular todo el entorno.

Contenedores

Convienen cuando:

  • Se necesita máxima reproducibilidad.
  • Se quiere compartir un pipeline completo.
  • El análisis se ejecutará en varias máquinas o servidores.
  • Se trabaja en HPC o cómputo científico con flujos bien definidos.
Aspecto Ambiente virtual Contenedor
Aislamiento Paquetes y dependencias Aplicación, librerías y entorno de usuario
Reproducibilidad Media Alta
Facilidad de uso Alta Media
Portabilidad Media Alta
Ideal para Desarrollo, enseñanza, pruebas Pipelines, despliegue, HPC
Ejemplos Conda, Mamba, Pixi Docker, Podman, Apptainer

¿Por qué veremos Micromamba y Apptainer?

Veremos Micromamba y Apptainer porque juntos cubren dos necesidades clave en bioinformática: instalar software fácilmente y ejecutarlo de forma reproducible en HPC.

Micromamba

Instalación de Micromamba sin permisos de administrador

"${SHELL}" <(curl -L micro.mamba.pm/install.sh)

Este comando instala Micromamba en la cuenta del usuario, por lo que resulta especialmente útil en servidores compartidos y ambientes de HPC donde no se cuenta con acceso sudo.

Después de la instalación, conviene cerrar y abrir la terminal, o recargar el archivo de configuración del shell para que el comando micromamba quede disponible.

source ~/.bashrc

Para comprobar que la instalación funcionó, puedes ejecutar:

micromamba --version

Comandos básicos de Micromamba

Crear un ambiente vacío

micromamba create -n bioinfo

Crear un ambiente e instalar paquetes desde el inicio

micromamba create -n fastqc-0.12.1 -c conda-forge -c bioconda fastqc=0.12.1

create
Le dice a micromamba que debe crear un ambiente nuevo.

-n fastqc-0.12.1
-n significa name. Le pone nombre al ambiente, en este caso fastqc-0.12.1.

-c conda-forge -c bioconda
-c significa channel. Un channel es el repositorio desde donde micromamba busca los paquetes.

fastqc
Son los paquetes que quieres instalar dentro del ambiente nuevo, =0.12.1 = versión específica que quieres instalar. Ejemplo de como se instala fastqc desde bioconda.

Activar un ambiente

micromamba activate fastqc-0.12.1

Instalar un paquete en un ambiente ya creado

micromamba install -n fastqc-0.12.1 -c conda-forge -c bioconda trimmomatic=0.40

Listar los ambientes instalados

micromamba env list

Listar los paquetes del ambiente activo

micromamba list

Si quieres ver los paquetes de un ambiente específico sin activarlo, puedes usar:

micromamba list -n fastqc-0.12.1

Desactivar el ambiente actual

micromamba deactivate

Borrar un ambiente

micromamba remove -n fastqc-0.12.1 --all

Opción recomendada para scripts

Ejecuta un comando dentro del ambiente sin depender de activate.

#!/bin/bash

micromamba run -n fastqc-0.12.1 fastqc datos/sample1.fastq.gz

Crear un ambiente a partir de un archivo YAML

Una forma muy útil de trabajar con Micromamba es definir el ambiente en un archivo de configuración en formato YAML. Esto permite guardar el nombre del ambiente, los canales y los paquetes necesarios en un solo archivo, lo que facilita la reproducibilidad y evita tener que escribir comandos largos cada vez.

Este archivo suele llamarse environment.yml o env.yml, porque son nombres muy comunes por convención. Sin embargo, no es obligatorio que se llame así. Puede tener otro nombre, siempre que se indique al crear el ambiente.

Estructura básica de un archivo YAML

Un archivo YAML para un ambiente de Micromamba puede verse así:

name: bioinfo
channels:
  - conda-forge
  - bioconda
dependencies:
  - fastqc=0.12.1
  - seqkit=2.8.2
  - mafft=7.525

En este ejemplo:

  • name indica el nombre del ambiente

  • channels define los repositorios donde se buscarán los paquetes

  • dependencies contiene la lista de programas que se instalarán

Crear el ambiente usando el archivo YAML

Una vez guardado el archivo como bioinfo.yml, el ambiente puede crearse con:

micromamba create -f bioinfo.yml

Esto instalará todos los paquetes definidos en el archivo y creará el ambiente con el nombre indicado en name.

Activar el ambiente

Después de crearlo, puede activarse con:

micromamba activate bioinfo

Buenas prácticas

  • Usar un nombre de ambiente claro y corto

  • Poner primero conda-forge y después bioconda

  • Incluir solo los paquetes realmente necesarios

  • Guardar el archivo YAML dentro del proyecto

Ejemplo de organización en un proyecto

proyecto/
├── datos/
├── resultados/
├── scripts/
├── envs/
   └── environment.yml
└── README.md

Ejercicio:

Automatizar la instalación de un ambiente con Micromamba

Contexto

Supongamos que deseas preparar un ambiente de trabajo para un pipeline rápido de inferencia filogenética por máxima verosimilitud. Para ello te interesa explorar la disponibilidad de los siguientes programas:

  • mafft
  • iqtree
  • jmodeltest
  • modeltest-ng

Instrucciones

Parte 1. Verificar Micromamba

Escribe un script en Bash que haga lo siguiente:

  1. revise si el comando micromamba está disponible en el sistema;
  2. si no está disponible, lo instale en el espacio personal del usuario, sin usar sudo.

Parte 2. Revisar disponibilidad de paquetes

Entra a Anaconda.org y busca los siguientes programas:

  • mafft
  • iqtree
  • jmodeltest
  • modeltest-ng

Para cada uno, registra:

  • si está disponible;
  • en qué canal aparece;
  • cuál es la versión más reciente que observas.

Nota: no todos los paquetes necesariamente estarán en el mismo canal.

Parte 3. Crear un archivo YAML

Con la información obtenida en Anaconda.org, crea un archivo YAML para un ambiente nuevo. El archivo debe incluir:

  • nombre del ambiente;
  • canales necesarios;
  • los programas anteriores con su versión más reciente.

Puedes nombrar el archivo como desees, por ejemplo:

  • phylo_env.yml
  • ml_phylo.yml
  • analisis_filogenia.yml

Parte 4. Crear el ambiente desde el YAML

Tu script debe usar el archivo YAML para crear el ambiente con Micromamba.

Parte 5. Verificar la instalación

Al final, el script debe imprimir en pantalla una comprobación de que los programas fueron instalados correctamente. Para cada programa, debe mostrarse al menos:

  • nombre del programa;
  • versión instalada.

Sugerencia

Antes de comenzar a escribir el script completo, prueba por separado:

  • cómo verificar si existe micromamba;
  • cómo crear un ambiente desde un archivo YAML;
  • cómo consultar los paquetes instalados en un ambiente.