{"id":29664013,"url":"https://github.com/norlab-ulaval/dockerized-norlab-project","last_synced_at":"2026-04-25T01:04:50.041Z","repository":{"id":294685901,"uuid":"987302990","full_name":"norlab-ulaval/dockerized-norlab-project","owner":"norlab-ulaval","description":"The user side companion of Dockerized-NorLab. It provide a containerized workflow tailor-made for robotic research.","archived":false,"fork":false,"pushed_at":"2026-04-24T01:52:21.000Z","size":4389,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":5,"default_branch":"beta","last_synced_at":"2026-04-24T02:27:09.574Z","etag":null,"topics":["containerization","nvidia-docker","research","robotics"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/norlab-ulaval.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-05-20T22:02:47.000Z","updated_at":"2026-04-24T01:52:23.000Z","dependencies_parsed_at":"2025-05-21T15:52:07.045Z","dependency_job_id":"80a5c5ff-8b94-440b-86b5-c5e2ec9275ca","html_url":"https://github.com/norlab-ulaval/dockerized-norlab-project","commit_stats":null,"previous_names":["norlab-ulaval/dockerized-norlab-project"],"tags_count":46,"template":false,"template_full_name":"norlab-ulaval/template-norlab-project","purl":"pkg:github/norlab-ulaval/dockerized-norlab-project","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/norlab-ulaval%2Fdockerized-norlab-project","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/norlab-ulaval%2Fdockerized-norlab-project/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/norlab-ulaval%2Fdockerized-norlab-project/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/norlab-ulaval%2Fdockerized-norlab-project/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/norlab-ulaval","download_url":"https://codeload.github.com/norlab-ulaval/dockerized-norlab-project/tar.gz/refs/heads/beta","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/norlab-ulaval%2Fdockerized-norlab-project/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32246407,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-24T13:21:15.438Z","status":"ssl_error","status_checked_at":"2026-04-24T13:21:15.005Z","response_time":64,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["containerization","nvidia-docker","research","robotics"],"created_at":"2025-07-22T12:06:14.858Z","updated_at":"2026-04-25T01:04:50.014Z","avatar_url":"https://github.com/norlab-ulaval.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n[//]: # ( ==== Logo ================================================== ) \n\u003cbr\u003e\n\u003cbr\u003e\n\u003ca href=\"https://norlab.ulaval.ca\"\u003e\n    \u003cpicture\u003e\n      \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"/visual/norlab_logo_acronym_light.png\"\u003e\n      \u003csource media=\"(prefers-color-scheme: light)\" srcset=\"/visual/norlab_logo_acronym_dark.png\"\u003e\n      \u003cimg alt=\"Shows an the dark NorLab logo in light mode and light NorLab logo in dark mode.\" src=\"/visual/norlab_logo_acronym_dark.png\" width=\"175\"\u003e\n    \u003c/picture\u003e\n\u003c/a\u003e\n\u003cbr\u003e\n\u003cbr\u003e\n\n[//]: # ( ==== Title ================================================= ) \n# _Dockerized-NorLab project application (DNA)_\n\n[//]: # ( ==== Hyperlink ============================================= ) \n\u003csup\u003e\n    \u003ca href=\"http://132.203.26.125:8111\"\u003eNorLab TeamCity GUI\u003c/a\u003e\n    (VPN/intranet access) \u0026nbsp; • \u0026nbsp;\n    \u003ca href=\"https://hub.docker.com/repositories/norlabulaval\"\u003enorlabulaval\u003c/a\u003e\n    (Docker Hub) \u0026nbsp;\n\u003c/sup\u003e\n\u003cbr\u003e\n\u003cbr\u003e\n\n[//]: # ( ==== Description =========================================== ) \n**A containerized workflow tailor-made for robotic research.**\u003cbr\u003e\n\nDockerized-NorLab project application (DNA) manage Dockerized-NorLab (DN) container lifecycle\u003cbr\u003e\nproviding functionality for robotic software development, deployment, testing,\u003cbr\u003e\ncontinuous integration, slurm job experimentation, and release publishing.\u003cbr\u003e \u003cbr\u003e \nDNA is the user side companion of [Dockerized-NorLab (DN)](https://github.com/norlab-ulaval/dockerized-norlab/tree/main) image builder\u003cbr\u003e which produces multi‑arch, GPU‑enabled, ROS2‑ready base images consumed by DNA.\u003cbr\u003e\n\n\u003cbr\u003e\n\n[//]: # ( ==== Badges ================================================ ) \n[//]: # (Note on shield.io release badge: it works only for public repository)\n\n[![semantic-release: conventional commits](https://img.shields.io/badge/semantic--release-conventional_commits-453032?logo=semantic-release)](https://github.com/semantic-release/semantic-release)\n\u003cimg alt=\"GitHub Release\" src=\"https://img.shields.io/github/v/release/norlab-ulaval/dockerized-norlab-project?include_prereleases\"\u003e\n\u003ca href=\"http://132.203.26.125:8111\"\u003e\u003cimg alt=\"Static Badge\" src=\"https://img.shields.io/badge/JetBrains%20TeamCity-CI-green?style=plastic\u0026logo=teamcity\"\u003e\u003c/a\u003e\n\n[//]: # (Dockerhub image badge)\n[//]: # (TODO: Un-comment the next line if you have docker images on dockerhub)\n[//]: # (TODO: Change \"norlabulaval/libpointmatcher\" in both url to \"your-dockerhub-domain/your-image-name\")\n[//]: # (\u003ca href=\"https://hub.docker.com/repository/docker/norlabulaval/libpointmatcher/\"\u003e \u003cimg alt=\"Docker Image Version \u0026#40;latest semver\u0026#41;\" src=\"https://img.shields.io/docker/v/norlabulaval/libpointmatcher?logo=docker\"\u003e \u003c/a\u003e)\n\n\n\u003cbr\u003e\n\n[//]: # ( ==== Maintainer ============================================ ) \n\u003csub\u003e\nMaintainer \u003ca href=\"https://redleader962.github.io\"\u003eLuc Coupal\u003c/a\u003e\n\u003c/sub\u003e\n\n\u003cbr\u003e\n\u003chr style=\"color:lightgray;background-color:lightgray\"\u003e\n\u003c/div\u003e\n\n[//]: # ( ==== Body ================================================== ) \n\n\n![dna_splash.png](visual/dna_splash.png)\n\n\n## What it does\n\n[//]: # (\u003cdetails open\u003e)\n[//]: # (  \u003csummary style=\"font-weight: bolder;font-size: x-large;\"\u003eWhat it does\u003c/summary\u003e)\n\n- **Containerized robotic development environment**: Provides a complete containerized workflow for robotic research, development, deployment, testing, continuous integration, running slurm jobs, and source code release.\n- **Multi-platform support**: Runs seamlessly on `l4t/arm64` (Jetson), `darwin/arm64` (Mac OS X), and `linux/x86` without configuration changes.\n- **Flexible deployment modes**: Supports both local and remote workflows for personal workstations, remote embedded computers, and servers.\n- **Robotic Software System ([ROS2](https://github.com/ros2)) ready**: Ready to roll, out of the box.\n- **GPU acceleration**: Provides GPU support through [NVIDIA Container Toolkit](https://github.com/NVIDIA/nvidia-container-toolkit) for both `l4t/arm64` and `linux/x86` platforms.\n- **Transparent configuration**: Makes project configuration easy while keeping [Docker](https://docs.docker.com/) and [Docker Compose](https://docs.docker.com/compose/) logic transparent and accessible.\n- **Rootless enough**: The stack is designed to run containers as a non‑root user inside the container, but it does not target Docker’s full “rootless mode” (rootless daemon/user‑namespaces) since it need to support robotic related capabilities such as GPU, host networking/IPC/PID, that typically require a rootful Docker engine.\n\n[//]: # (\u003c/details\u003e)\n\n## Why\n\n[//]: # (\u003cdetails close\u003e)\n[//]: # (  \u003csummary style=\"font-weight: bolder;font-size: x-large;\"\u003eWhy\u003c/summary\u003e)\n\nDockerized-NorLab (DN) and the Dockerized-NorLab project application (DNA) solve critical challenges in robotic research and development by providing a standardized, reproducible, and scalable containerized environment.\n\n\n\u003cdiv align=\"center\"\u003e\n\u003ctable\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cimg src=\"visual/DN_presentation_diagram/dn_techincal_presentation_1.jpg\" alt=\"Key properties reproducibility\" width=\"400\"\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cimg src=\"visual/DN_presentation_diagram/dn_techincal_presentation_2.jpg\" alt=\"Key properties isolation\" width=\"400\"\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cimg src=\"visual/DN_presentation_diagram/dn_techincal_presentation_3.jpg\" alt=\"Project collaboration\" width=\"400\"\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cimg src=\"visual/DN_presentation_diagram/dn_techincal_presentation_4.jpg\" alt=\"Fast deployment\" width=\"400\"\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd colspan=\"2\" align=\"center\"\u003e\u003cimg src=\"visual/DN_presentation_diagram/dn_techincal_presentation_5.jpg\" alt=\"Code quality\" width=\"400\"\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\u003c/div\u003e\n\n\n### Key Benefits\n\n**🔄 Reproducibility**  \nEnsure consistent environments across different machines, operating systems, and team members. Your code runs the same way everywhere, eliminating \"it works on my machine\" problems.\n\n**🔒 Isolation**  \nKeep your development environment clean and isolated from your host system. Experiment freely without affecting your main system configuration.\n\n**👥 Project Collaboration**  \nStreamline team collaboration with standardized development environments. New team members can get up and running in minutes, not hours or days.\n\n**🚀 Fast Deployment**  \nDeploy your robotic applications quickly and reliably across different platforms - from development workstations to production servers and embedded systems.\n\n**✅ Code Quality**  \nMaintain high code quality with integrated testing, continuous integration, and standardized development practices built into the containerized workflow.\n\n[//]: # (\u003c/details\u003e)\n\n## Use Cases\n\n[//]: # (\u003cdetails close\u003e)\n[//]: # (  \u003csummary style=\"font-weight: bolder;font-size: x-large;\"\u003eUse Cases\u003c/summary\u003e)\n\nDNA and DN support a wide range of robotic development and deployment scenarios:\n\n\u003cdiv align=\"center\"\u003e\n\u003ctable\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cimg src=\"visual/DN_presentation_diagram/dn_techincal_presentation_7.jpg\" alt=\"Local development use case\" width=\"400\"\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cimg src=\"visual/DN_presentation_diagram/dn_techincal_presentation_8.jpg\" alt=\"Remote development use case\" width=\"400\"\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cimg src=\"visual/DN_presentation_diagram/dn_techincal_presentation_6.jpg\" alt=\"Deployment use case\" width=\"400\"\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cimg src=\"visual/DN_presentation_diagram/dn_techincal_presentation_9.jpg\" alt=\"DN Multi-Platform Support\" width=\"400\"\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd colspan=\"2\" align=\"center\"\u003e\u003cimg src=\"visual/DN_presentation_diagram/dn_techincal_presentation_10.jpg\" alt=\"CI CD use case\" width=\"400\"\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\u003c/div\u003e\n\n### Development, Deployment and Release Modes\n\n**🛠 Local and Remote Development (Develop Mode)**  \nSet up consistent development environments on local workstations and remote machines. DNA is installed on both local and remote hosts, enabling seamless development workflows across different locations.\n\n**⏯️ Deployment (Deploy Mode)**  \nDeploy your robotic applications to target hosts with DNA installed. Streamlined deployment process ensures your applications run consistently in production environments.\n\n**📦 Release Mode**  \nCreate and distribute source code release. Released containers can run independently without requiring DNA installation on the target system.\n\n### Specialized Workflows\n\n**🔄 Testing and Continuous Integration (CI)**  \nRun automated CI tests in isolated, reproducible environments. Perfect for validating code changes and maintaining code quality across your robotic projects. DN/DNA is CI framework agnostic, it can run tests localy or on any CI server.\n\n**🧪 SLURM Job Experiment**  \nExecute compute-intensive robotic algorithms and simulations on SLURM-managed clusters with consistent containerized environments.\n\n**📦 Apptainer / HPC Support**  \nDeploy slurm jobs on HPC servers using Apptainer (e.g., Ulaval Valeria, Compute Canada). DNA builds a `linux/amd64` Docker tar archive locally (macOS compatible) and generates standalone Apptainer exec scripts — `apptainer` is never executed locally. Supports Valeria and Compute Canada profiles.\n\n**◐ Multi-Platform Support**  \nWork seamlessly across different operating systems and architectures:\n- `l4t/arm64` (NVIDIA Jetson platforms)\n- `darwin/arm64` (Mac OS X with Apple Silicon)\n- `linux/x86` (Standard Linux systems)\n\n**🎮 GPU Acceleration**  \nLeverage GPU computing power for robotics applications through NVIDIA Container Toolkit integration, supporting both ARM64 and x86 platforms.\n\n[//]: # (\u003c/details\u003e)\n\n---\n\n## Getting started\n\n[//]: # (\u003cdetails close\u003e)\n[//]: # (  \u003csummary style=\"font-weight: bolder;font-size: x-large;\"\u003eGetting started\u003c/summary\u003e)\n\n### Install `dna`, the Dockerized-NorLab project app \n\n```shell\n# Clone repository on host computer\ngit clone --recurse-submodule https://github.com/norlab-ulaval/dockerized-norlab-project.git\ncd dockerized-norlab-project\n\n# Install DNA on host (Check install option with $ bash install.bash --help) \n# Note: \n#   - Installation supports both online and offline scenarios\n#   - Might require sudo if dockerized-norlab-project/ is owned by root\nbash install.bash\n\n# Check available commands\ndna\n```\n\n### Make a repository ready to use with DNA\n\n```shell\n# To DNA-initialize a project repository (must be git initialized)\ncd \u003cpath/to/your/project/repository\u003e\ndna init\n```\n\nWhich add a few directories to your project repository\n```markup\nyour-project-repository/\n   ├── .dockerized_norlab/             ← DNA configuration\n   ├── artifact/                       ← Runtime produced data (mounted rw, vcs ignored)\n   ├── data/\n   │   ├── external_data/              ← Non-tracked data not required by src/tests code logic (mounted rw, vcs ignored)\n   │   ├── repository_data/            ← Data that are required by the src/test code logic (mounted rw in develop, copied otherwise)\n   │   └── shared_data/                ← Placeholder directory replaced by an optional local data volume (mounted ro, vcs ignored)\n   ├── src/                            ← Your repository source code (mounted/copied)\n   ├── tests/                          ← Your repository test code (mounted/copied)\n   ...\n   ├── .dockerignore                   ← Specify files/dir that won't be copied in container on build\n   ├── .gitignore                      ← Specify files/dir to keep out of VCS\n   └── README.md                       ← Created if it did not already exist\n```\nNote: \n- Existing file and directories with the same name will be safeguarded with the suffix `.old`, not overriden.\n- Content of the artifact directory is persistent. It will remain available even if the container is stopped or removed. \n\n### Create, run, and stop DN container\n\nTo spin a DN container and open a terminal in it, run the following command from anywhere in the DNA initialized repository\n```shell\ndna build develop\ndna up\n\n# When your done \ndna down\n```\n\n\u003e **📖 For detailed configuration and command documentation**, see the [Documentation](#documentation) section below.\n\n[//]: # (\u003c/details\u003e)\n\n---\n\n## Documentation\n\n### 📚 Complete Documentation\n\n- **[Command Reference](documentation/dna.md)** - Complete guide to all `dna` commands\n  - [dna init](documentation/command/init.md) - Initialize a new DNA project\n  - [dna build](documentation/command/build.md) - Build DNA Docker images\n  - [dna up](documentation/command/up.md) - Start and attach to containers\n  - [dna down](documentation/command/down.md) - Stop containers\n  - [dna attach](documentation/command/attach.md) - Attach to running containers\n  - [dna exec](documentation/command/exec.md) - Execute commands in containers\n  - [dna run](documentation/command/run.md) - Run commands in containers\n  - [dna project](documentation/command/project.md) - Super project commands\n  - [dna save](documentation/command/save.md) - Save Docker images for offline use\n  - [Apptainer / HPC Workflow](documentation/command/apptainer.md) - Deploy slurm jobs on Apptainer HPC servers\n  - [dna load](documentation/command/load.md) - Load Docker images from files\n  - [dna config](documentation/command/config.md) - Show configuration\n  - [dna version](documentation/command/version.md) - Show DNA version\n  - [dna update](documentation/command/update.md) - Update DNA to latest version\n\n### ⚙️ Setup \u0026 Configuration\n\n- **[Installation Guide](documentation/install.md)** - Detailed installation instructions for all supported platforms\n- **[Project Initialization \u0026 Configuration](documentation/project_initialization_and_configuration.md)** - Complete guide to setting up and configuring DNA projects\n- **[Compose Overrides \u0026 Orchestration](documentation/compose_overrides_and_orchestration.md)** - How DNA discovers and applies Docker Compose override files, with simple recipes\n- **[Offline Installation Guide](documentation/offline_installation.md)** - Complete guide for installing DNA in environments without internet connectivity\n- **[IDE Integration](documentation/ide_integration.md)** - Setup instructions for development environments and IDEs\n\n---\n\n## 🧪 For Beta Testers and Developer\n\nTo try DNA in a throwaway project or for development on initialization related feature:\n```shell\n# Clone dockerized-norlab-project-mock-EMPTY\ngit clone https://github.com/norlab-ulaval/dockerized-norlab-project-mock-EMPTY.git\ncd dockerized-norlab-project-mock-EMPTY\ndna init\n```\n\nFor general DNA development in a throwaway project:\n```shell\n# Clone dockerized-norlab-project-mock-EMPTY\ngit clone https://github.com/norlab-ulaval/dockerized-norlab-project-mock.git\ncd dockerized-norlab-project-mock\ndna [build|up|down|attach|run|...]\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnorlab-ulaval%2Fdockerized-norlab-project","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnorlab-ulaval%2Fdockerized-norlab-project","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnorlab-ulaval%2Fdockerized-norlab-project/lists"}