Overview
Containers are lightweight, isolated environments that package everything needed to run an application — code, dependencies, and system libraries — so it behaves consistently across platforms. Advantages of containerization include:- Consistency: Containers provide a consistent environment across multiple platforms and operating systems. Developers can create images that transform into containers when deployed, ensuring uniformity regardless of the underlying infrastructure.
- Automation: Containerization supports automated tasks. Developers can schedule actions without manual intervention, reducing repetitive work.
- Stability: Containers are based on Linux, with the Linux kernel present in every container. This stability extends to systems and devices, including when containers run on macOS or Windows.
- Space efficiency: Unlike traditional virtual machines, which consume significant server space and memory, containers include only application code and dependencies. They can run entirely in the cloud and minimize resource requirements.

IMSDK in Docker
IMSDK in a Docker container means the full Qualcomm multimedia and AI software stack is delivered as containerized environments instead of being manually installed directly on a host or target system. In practice, a build container compiles and assembles all required components, including cross-compiled artifacts for Qualcomm ARM64 targets. The build then produces a deploy container that contains only the runtime pieces needed on the device. Key benefits of this approach:- Reproducible builds: Use the same toolchain, package versions, and scripts across developers and CI. Reduces “works on my machine” failures.
- Build and runtime separation: Use a heavy build image to compile artifacts and a lean deploy image that contains only runtime essentials.
- Efficient cross-compilation: Build on the host and target ARM64 Qualcomm devices reliably, faster than compiling directly on the target.
- Secure runtime posture: Run as a non-root user by default, avoid broad privileged-container dependencies, and use CDI-based explicit hardware passthrough for GPU, camera, and media devices.
- Operational consistency: Use versioned images that are testable, promotable, and rollback-friendly, with a predictable deployment flow using environment and CDI configuration on the target.
Features
- Debian (Trixie) base: Built on Debian Trixie for a streamlined and lightweight foundation.
- No platform dependencies: Entirely self-sufficient — no eSDK or host platform content required to build or deploy.
- Self-contained dependencies: All necessary dependencies are installed directly inside the container, minimizing host-container compatibility issues and simplifying deployment on edge devices.
- GStreamer 1.26: Includes GStreamer 1.26 with the latest
gst-qti-oss-patchesfor optimized performance on Qualcomm platforms. - Broad target support: Validated across QLI 2.x, Ubuntu Server, and Ubuntu Desktop. Supports QCS615, QCS6490, IQ8, and IQ9.
Versions
Architecture
The following diagram explains the build and deployment flow of the IMSDK Docker image.
- The host machine runs a development container that compiles all IMSDK sources and dependencies into Debian artifacts.
- The generated artifacts are transferred to a Debian-based deploy container with CDI-managed hardware access that runs on the Qualcomm device.
Quick Start Guide
Download configuration files
Before setting up the device, download the CDI and environment files for the target chipset and OS. The CDI JSON file provides platform-specific device mountings; the environment file sets the required variables inside the container. Select your chipset to download the corresponding files:- QCS6490
- QCS8275
- QCS9075
- QCS615
Set up and run on the device
- QLI 2.x
- Ubuntu
SSH into the device
Create required directories
Copy the downloaded configuration files to the device
Additional step to configure video nodes for QCS615
Additional step to configure video nodes for QCS615
Pull the container image
Run the container
Build an IMSDK container
Prerequisites
Ubuntu packages
Ubuntu packages
- ARM64
- x86
File watcher limits
File watcher limits
/etc/sysctl.conf:Swap image
Swap image
/etc/default/grub and set:/etc/fstab and add this line at the end of the file:Configure Docker
Configure Docker
Remove old versions
Remove old versions
Set up the Docker repository
Set up the Docker repository
Install Docker Engine
Install Docker Engine
Add user to the Docker group
Add user to the Docker group
sudo:newgrp docker in every newly opened terminal.Add a registry mirror (optional)
Add a registry mirror (optional)
/etc/docker/daemon.json:Configure proxy (optional)
Configure proxy (optional)
/etc/docker/daemon.json:newgrp docker in every newly opened terminal.Test the Docker setup (optional)
Test the Docker setup (optional)
Move the Docker directory (optional)
Move the Docker directory (optional)
No space left on device error, move the Docker directory to /local/mnt.Stop Docker:Configure system memory
Configure system memory
max set as the value.Tune VM settings (optional)
Tune VM settings (optional)
vm.swappinessHigher values cause more aggressive application memory page swapping; lower values favor keeping pages in memory longer. The default is usually 60 on recent Ubuntu and Debian versions, which may not fit the Docker build environment on systems with low available RAM. A value of 10 is recommended.vm.vfs_cache_pressureIntermittent high VFS pressure can result from creating many small temporary files during package installation, causing the OS to prematurely swap memory pages associated with cached dentries and inodes. The default is usually 100. Setting it to 400 relaxes cache management by freeing cached pages earlier, reducing the chance of running out of memory during high multi-threaded load.vm.min_free_kbytesIn heavy multi-stage Docker builds with many buildx threads, the host OS can exhaust available RAM quickly. The mandatory VM free memory watermark is controlled by vm.min_free_kbytes. Too low risks deadlocks under load; too high causes premature OOM kills. A value of 262144 KB better balances free memory under excessive load.Edit /etc/sysctl.conf and add:Build steps
Fetch the source code
Build the container
qimsdk_deploy_arm64, which contains the minimal set of runtime binaries needed to execute GStreamer use cases:QIMSDK_ARG_QNP_VERSION is not provided, the QNN and SNPE plugins are disabled in the image.Save the image
Copy and load the image on the device
$HOME is /root; on a Ubuntu device it is /home/ubuntu.Run the container on the device
Install additional packages inside the container
Use this procedure to install packages into an already runningqimsdk-debian deploy container. The container must have been started with the --net host option. The following steps use Python as an example.
Execute a shell in the container as root
Install apt packages
Install pip packages
Activate the virtual environment automatically (optional)
qimsdk user:
qimsdk user inside the container:
Debugging
The following techniques apply to the QIMSDK container running on the Qualcomm device.Check container logs
Stream live logs
Print the last 100 lines and follow
Inspect container state
List all containers and their status
Inspect container metadata
Restart a container
Stop the container
Start the container

