# Docker

Docker enables you to build, test, and deploy applications using
software containers. This integrated environment supports the end-to-end inference workflow, from model compilation to execution and serving, without requiring manual setup or complex dependency management.Docker for Cloud AI 100 packages the Platform SDK,
Apps SDK, libraries, system tools, etc., which enable you to navigate the inference workflow seamlessly.

Qualcomm provides a set of `pre-built Docker images for Cloud AI <https://github.com/quic/cloud-ai-containers/pkgs/container/cloud_ai_inference_ubuntu22>` that simplify model compilation, inference, and deployment on Qualcomm® Cloud AI accelerators.

Scripts for building your own Docker image for Cloud AI are in the Apps SDK in the
`common/tools/docker-build/` folder. The scripts to build a QAic
Docker image have the following structure.

├── build_image.py
    ├── config
    │   ├── applications
    │   ├── base_image
    │   ├── build_type
    │   ├── python_version
    │   └── sdk
    ├── image_schema.json
    ├── README.md
    ├── requirements.txt
    └── sample_user_specs
    Copy to clipboard

## Prerequisites

- [Verify setup](https://docs.qualcomm.com/doc/80-99100-3/topic/verify-setup.html#verify-setup)
- [Docker v23+](https://docs.docker.com/engine/install/). Follow [post-install instructions](https://docs.docker.com/engine/install/linux-postinstall/) to run Docker as a non-root user. Otherwise, `docker` command and `build_image.py` scripts must be prefaced with `sudo`.
- Install Python modules listed in `requirements.txt`, preferably in a virtual environment.

$ python3.10 -m venv /venv_directory/qaic_docker_venv
        $ . /venv_directory/qaic_docker_venv/bin/activate
        (qaic_docker_venv) $ pip install -r requirements.txt
        Copy to clipboard

## Build a Docker image

The QAic Docker build script is used to create a new Docker image that includes the Qualcomm Cloud AI Apps SDK and Platform SDK on a supported operating system.

The command to build the Docker image is:

python3 build_image.py [ --user_specification_file (Required) <user-specification-json-file-path> ] \
    [ --mirror (Optional) <docker-registry-mirror-location> ] \
    [ --apps_sdk (Optional) /qaic/apps/sdk/zip/path ] [ --platform_sdk (Optional) /qaic/platform/sdk/zip/path ] [ --qnn_sdk (Optional) ] \
    [ --arch (Optional) <x86_64|aarch64> ] [ --external_dist_files (Optional) <file-path-1 file-path-2 ... file-path-n> ] \
    [ --tag (Optional) <tag-for-the-created-image> ] [ --log_level (Optional) <log-level-numeric-value>] [ --no_cache (Optional) ]
    Copy to clipboard

The resulting Docker image name uses the following convention:

qaic-\<arch>-<base_image>-<build_type>-<python_version>-<sdk_types>-\<applications>:\<tag>
    Copy to clipboard

### Build Configuration Options

The following options are used to configure the Docker image build process for
Cloud AI Inference containers.

| Option | Description |
| --- | --- |
| `user_specification_file` | Specifies the path to the user specification JSON file that defines image<br>build parameters and dependencies. |
| `mirror` | Specifies the registry mirror location for base images in Docker format<br>(for example, `host.domain/dir/`). |
| `arch` | Specifies the target architecture for the image build. Supported values<br>are `x86_64` and `aarch64`. The default is the host architecture. |
| `tag` | Specifies the tag to assign to the generated Docker image. |
| `apps_sdk` | Specifies the path to the Apps SDK ZIP file. This option overrides the<br>corresponding value if it is already specified in the<br>`user_specification_file`. |
| `platform_sdk` | Specifies the path to the Platform SDK ZIP file. This option overrides the<br>corresponding value if it is already specified in the<br>`user_specification_file`. |
| `external_dist_files` | Specifies external files required during the Docker image build. This<br>option overrides any `external_dist_files` entries defined in the<br>`user_specification_file`. |
| `log_level` | Specifies the logging verbosity using a numeric value:<br>`debug=1`, `info=2`, `warning=3`, `error=4`, `critical=5`. |
| `no_cache` | Disables Docker’s internal layer cache during the image build. This option<br>is typically used for debugging. |

For Example:

python3 build_image.py --user_specification_file ./sample_user_specs/user_image_spec_qaic.json --apps_sdk /path/to/aic_apps.Core.1.20.2.0.Linux-AnyCPU.zip \
    --platform_sdk /path/to/aic_platform.Core.1.20.2.0.Linux-AnyCPU.zip --tag 1.20.2.0
    Copy to clipboard

To check the Docker image created with above script:

$ docker images
    REPOSITORY                                                            TAG            IMAGE ID       CREATED        SIZE
    qaic-x86_64-ubuntu22-py310-py38-release-qaic_platform-qaic_apps       1.20.2.0       f784c37d7f18   2 hours ago    4.25GB
    Copy to clipboard

#### Supported operating systems

Docker container for Cloud AI 100 supports different operating system
distributions. Please check [supported operating environments](https://docs.qualcomm.com/doc/80-99100-3/topic/index_pre-requisites.html#reference-to-supported-operating-systems).

## Features

- Incremental Docker image build infrastructure optimizes disk usage
and rebuilding time
- Flexibility to override specification options such as sdk paths,
external dist files through cmd line options
- User provided image specification is resolved for dependencies and
dumped as autocompleted\_user\_specification.json
- Supports multi-platform builds

The configurations are grouped as shown below to minimize the need for
rebuild and to allow sharing layers. This enables reduction of disk
usage and allows faster rebuild.

![../../../../../../_images/docker_layers.png](data:image/png;base64,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)

User provides a specification json that defines the items to build in
each group and list external file dependencies The build script
auto-completes the configuration by resolving the dependencies for
specified nodes. Sample user specification files are present in
sample\_user\_specs directory within Apps SDK directory -
tools/docker-build/

Supported keys in json: ‘build\_type’, ‘applications’, ‘sdk’,
‘python\_version’, ‘base\_image’, ‘external\_dist\_files’

Applications - Optional, accepts a list of values. SDK - Optional,
accepts a dictionary of values (sdk type: file-path/boolean). Python
Version - Optional, accepts a single value. Build Type - Required,
accepts a single value. Base Image - Required, accepts a single value.
External dist files - Optional, allows specifying external files
required in Docker image build. Accepts a list of values.

Example -

{
        "applications": ["gae", "pytools", "aimet", "qinf", "pybase"],
        "sdk": {
            "qaic_apps": "/path/to/aic_apps.Core.1.20.2.0.Linux-AnyCPU.zip",
            "qaic_platform": "/path/to/aic_platform.Core.1.20.2.0.Linux-AnyCPU.zip"
        },
        "python_version": "py310",
        "base_image": "ubuntu22",
        "external_dist_files": ["/path/to/aimetpro-1.26.0-RC7.torch-gpu-release.tar.gz"]
    }
    Copy to clipboard

Minimal user specification to build the same image

{
        "applications": ["gae", "aimet", "qinf"],
        "sdk": {
            "qaic_apps": "/path/to/aic_apps.Core.1.20.2.0.Linux-AnyCPU.zip",
            "qaic_platform": "/path/to/aic_platform.Core.1.20.2.0.Linux-AnyCPU.zip"
        },
        "external_dist_files": ["/path/to/aimetpro-1.26.0-RC7.torch-gpu-release.tar.gz"]
    }
    Copy to clipboard

sdk, external\_dist\_files can be skipped here and provided through cmd
line

SDK, external dist files configuration rely on file paths. These keys
can be specified either through specification file or cmd line options.
cmd line specification takes precedence when specified through both.

The Docker image may constitute base image + layers from other groups
specified in the figure above. Resolution of dependencies is done
top-down for the specified groups.

Applications - Resolved as union of dependencies in same level. SDK -
Resolved as union of dependencies from higher levels and same level.
Python Version - Resolved as intersection of dependencies from higher
levels of which preferred node is chosen. Build Type - Resolved as
intersection of dependencies from higher levels of which preferred node
is chosen. Base Image - Resolved as intersection of dependencies from
higher levels of which preferred node is chosen.

Use the `-arch` command line option with the build command to configure
building the image for the preferred architecture (x86\_64/aarch64).

## Launch container

The following example for launching an x86\_64 ubuntu20 image with Python3.10
environment, Apps SDK, and Platform SDK.

Run the container and map 1 or more QAic devices. Mapping one or more local directories with the `-v` option is highly
recommended so you have a persistent workspace and do not lose your work when the container stops.

# Passing 1 device
    docker run -dit --name qaic-ubuntu-test --device=/dev/accel/accel0 qaic-x86_64-ubuntu22-py310-py38-release-qaic_platform-qaic_apps:1.20.2.0
    
    # Passing 1 device and mapping a local folder
    docker run -dit --name qaic-ubuntu-test -v /data/test:/data/test --device=/dev/accel/accel0 qaic-x86_64-ubuntu22-py310-py38-release-qaic_platform-qaic_apps:1.20.2.0
    Copy to clipboard

When passing the `-arch`  option on a host whose architecture differs from the requested architecture,
setup the host for Docker multiarch using `qemu`.

Ubuntu host

$ sudo apt install qemu binfmt-support qemu-user-static
    $ docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
    # Check the setup
    $ docker run --rm -t --platform=linux/arm64 <image name> uname -m
    Copy to clipboard

The output lists the the architecture as `aarch64`.

CentOS host

$ sudo yum install qemu qemu-kvm
    $ docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
    # Check the setup
    $ docker run --rm -t --platform=linux/arm64 <image name> uname -m
    Copy to clipboard

The output lists the the architecture as `aarch64`.

## Run tests in the container

- Connect to the container and run tests as in the following example:

# Get the CONTAINER ID
       $ docker ps
    # Open an interactive shell inside a running container
       $ docker exec -it <container_name_or_id> /bin/bash
    # Check qaic devices
       $ /opt/qti-aic/tools/qaic_util -q
    # Run an inference with recorded data
       $ /opt/qti-aic/exec/qaic-runner -d 0 -t /opt/qti-aic/test-data/aic100/v2/1nsp/1nsp-quant-resnet50/
    Copy to clipboard

- Activate the Python environment and test the Python HL API (valid if
*qaic\_python: “True”* specified in the sdk group of
`user_specification_file` while building Docker image):

source /opt/qti-aic/dev/python/qaic-env/bin/activate
    cd /opt/qti-aic/examples/apps/qaic-python-sdk/qaic/examples/resnet_example/
    python resnet_example.py
    Copy to clipboard

Last Published: May 01, 2026

[Previous Topic
Containers](https://docs.qualcomm.com/bundle/publicresource/80-99100-3/topics/index_Docker.md) [Next Topic
Kubernetes](https://docs.qualcomm.com/bundle/publicresource/80-99100-3/topics/index_k8s.md)