Docker#

This setup lets you build once and then add capabilities as overrides — GUI, GPU, and Hardware (HW) — onto a single runtime service without touching your main repo files.


Prerequisites#

  • Docker + docker-compose (either v1 or v2 plugin)

  • NVIDIA drivers on host (nvidia-smi works on host)

  • NVIDIA Container Toolkit installed on host (legacy runtime: nvidia)

  • X11 on host (Linux)


Layout#

docker/
  Dockerfile             # Your build definition
  compose/
    base.yml   # dev (build + source mount) and run (no mount)
    gui.yml    # adds DISPLAY, XAUTHORITY, X11 socket
    gpu.yml    # NVIDIA runtime + envs, mounts nvidia-smi
    hw.yml     # /dev, caps, ulimits (heavy hardware access)

What Each File Does#

  • base.yml

    • dev: builds the image from docker/Dockerfile and mounts your source

    • run: clean runtime service (no source mount)

  • gui.yml — Adds X11 env/socket so GUI apps can display on host

  • gpu.yml — Enables GPU via legacy runtime: nvidia (for older compose) and ensures nvidia-smi is available in the container

  • hw.yml — Grants broad hardware access


How to Use#

From the repo root:

1) Build the image#

Uses docker/Dockerfile. Only dev mounts your source.

docker-compose -f docker/compose/base.yml build dev

2) (For GUI) Allow root to use your X server#

xhost +local:docker

3) Run with different capability combinations#

GUI + GPU

docker-compose \
  -f docker/compose/base.yml \
  -f docker/compose/gui.yml \
  -f docker/compose/gpu.yml \
  run --rm run bash

GUI + GPU + HW

docker-compose \
  -f docker/compose/base.yml \
  -f docker/compose/gui.yml \
  -f docker/compose/gpu.yml \
  -f docker/compose/hw.yml \
  run --rm run bash

Quick Checks Inside the Container#

Verify GPU:

nvidia-smi

Test GUI apps:

apt-get update && apt-get install -y x11-apps && xclock &

Sanity Check Before Running#

See the fully merged service to confirm all env/volumes are present:

docker-compose \
  -f docker/compose/base.yml \
  -f docker/compose/gui.yml \
  -f docker/compose/gpu.yml \
  -f docker/compose/hw.yml \
  config | sed -n '/run:/,/^[^ ]/p'

Example: FR3 Environment in Docker#

  1. Build the image:

    docker-compose -f docker/compose/base.yml build dev
    
  2. Run with full capabilities:

    docker-compose \
      -f docker/compose/base.yml \
      -f docker/compose/gui.yml \
      -f docker/compose/gpu.yml \
      -f docker/compose/hw.yml \
      run --rm run bash
    
  3. Install FR3 extension:

    pip install -ve extensions/rcs_fr3
    
  4. Run example:

    cd examples
    python fr3_env_cartesian_control.py