# Container solutions
- Docker -> not-HPC friendly
- Singularity/Apptainer(?) -> better
- Conda -> might be a paid solution in the future
- python-based -> ok-ish
- venv
- [uv](https://github.com/astral-sh/uv) (in the trend, much faster)
- pixi -> personally have no experience...
more in:
https://www.nextflow.io/docs/latest/container.html#containers
# Existing schemas
| Schemas | link | Comments |
| -------- | --- | ------- |
| Biocontainers| https://biocontainers-edu.readthedocs.io/en/latest/what_is_biocontainers.html | widely used in scientific area; [Tutorial](https://github.com/BioContainers/specs?tab=readme-ov-file#242-add-a-container); [Specifications](https://github.com/BioContainers/specs/blob/master/container-specs.md) |
| Bilayer | https://bilayers.org/custom-algorithm/ | Deep-learning-oriented; New & Image-focused containerisation solution; [simple example](https://github.com/bilayer-containers/bilayers/tree/main/src/bilayers/algorithms/classical_segmentation) |
| nf-core | https://nf-co.re/docs/guidelines/pipelines/recommendations/custom_containers | Biocontainer-compatible; Largely adopted by sequencing community |
# FAIR Container Features(?)
| Features | Priority | comment |
| ------------ | ----- | --- |
| CLI runnable | Minimum requirement | CLI: command line interface |
| FAIR | Minimum requirement | _FAIR: findable, accessible, interoperable, reusable._ |
| Input-output declaration | Top | Enhance user-friendliness|
| Unified mounting dir | ? | Better standarisation (?) |
| Image visualisation | ? | |
| DL model pre-download | ? | flexibility vs. reproducibility|
| Unit-tested | Top | Otherwise hard to maintain |
# Bilayer uses a config.yaml file to create additional layers on top of docker image:
| parameter | description |
| -------- | -------- |
| docker_image | Defines the Docker image used for execution, including the organization, repository name, and tag |
| citations | References relevant research citation, doi, and license associated with the algorithm |
| algorithm_folder_name | Specifies the directory where the generated Gradio and Jupyter Notebook interface files are stored |
| exec_function | Defines the function that converts the config.yaml (i.e. spec file) into a Gradio or Jupyter Notebook interface. It also includes the base command (e.g., python -m cellpose) that serves as the entry point for execution and a special hidden_args section if applicable |
| inputs | Refers to the elements that are translated into command-line arguments for our supported interfaces. Additionally, they contribute to adapting the Bilayers specification for integration with workflow management tools such as Snakemake, Nextflow, or WDL |
| outputs | Primarily used for refining the Bilayers specification to be compatible with workflow management tools like Snakemake, Nextflow, or WDL. While they may or may not include a cli_tag, they are NOT involved in generating our interfaces |
| display_only | Contains fields that are displayed on the interface but do not affect CLI execution. These objects must not include a cli_tag |
# bilayer team discussions:
https://github.com/orgs/bilayer-containers/discussions