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 ~/.bashrcPara comprobar que la instalación funcionó, puedes ejecutar:
micromamba --versionComandos básicos de Micromamba
Crear un ambiente vacío
micromamba create -n bioinfoCrear un ambiente e instalar paquetes desde el inicio
micromamba create -n fastqc-0.12.1 -c conda-forge -c bioconda fastqc=0.12.1create
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.1Instalar un paquete en un ambiente ya creado
micromamba install -n fastqc-0.12.1 -c conda-forge -c bioconda trimmomatic=0.40Listar los ambientes instalados
micromamba env listListar los paquetes del ambiente activo
micromamba listSi quieres ver los paquetes de un ambiente específico sin activarlo, puedes usar:
micromamba list -n fastqc-0.12.1Desactivar el ambiente actual
micromamba deactivateBorrar un ambiente
micromamba remove -n fastqc-0.12.1 --allOpció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.gzCrear 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.525En este ejemplo:
nameindica el nombre del ambientechannelsdefine los repositorios donde se buscarán los paquetesdependenciescontiene 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.ymlEsto 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 bioinfoBuenas prácticas
Usar un nombre de ambiente claro y corto
Poner primero
conda-forgey despuésbiocondaIncluir 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.mdEjercicio:
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:
mafftiqtreejmodeltestmodeltest-ng
Instrucciones
Parte 1. Verificar Micromamba
Escribe un script en Bash que haga lo siguiente:
- revise si el comando
micromambaestá disponible en el sistema; - 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:
mafftiqtreejmodeltestmodeltest-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.ymlml_phylo.ymlanalisis_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.