uv-managed virtual environment.
Installing Docker
We recommend VS Code as your IDE due to its support for Dev Containers. Install Docker for your operating system:Windows.
Install WSL and follow the instructions below to install Docker natively in WSL. Do not install Docker Desktop - all development must happen in the Ubuntu terminal.Ubuntu
Follow the Docker Engine instructions. Never install Docker as a snap package. The snap version runs under strict AppArmor confinement that only permits bind mounts from a small allow-list.Apple Silicon (M1/M2/M3/M4)
Install Docker Desktop. Macs with Apple Silicon can run course containers using Docker Desktop’s built-in ARM emulation. For most ML notebooks the CPU container (torch.dev.cpu) works well. For GPU-accelerated training, PyTorch supports Apple’s Metal Performance Shaders (MPS) backend, which uses the unified memory architecture of the M-series chips.
PyTorch with MPS acceleration
MPS acceleration is available when running PyTorch natively on macOS (outside Docker). To use it:MPS support is maturing but not all PyTorch operations are implemented yet. For operations that fail on MPS, the fallback variable ensures training continues on CPU without errors. Check the MPS backend documentation for the latest compatibility.
ROS on Mac
ROS2 does not run natively on macOS. Mac users must use theros.dev.gpu Docker container for all robotics coursework. The container provides a full ROS2 Jazzy environment with GUI support via X11 forwarding or VNC.
To enable GUI applications (RViz, Gazebo) on macOS, install XQuartz:
Course environment setup
- Import the repository to your own GitHub account
- Clone it locally and copy
.env.exampleto.env - Build and run the Docker container (
make docker-build-gpuormake docker-build-cpu) - Submit your work to Canvas/Brightspace via GitHub
Configuration
All Docker services read their configuration from a.env file in the repository root. Copy the example to get started:
docker-compose.yml loads .env via env_file, making all variables available inside every container.
Docker Compose services
Three services are defined indocker-compose.yml:
All services mount the repository as a workspace volume, so edits on the host are immediately reflected inside the container.
Build targets
Build containers usingmake from the repository root:
Run targets
Development setup
Once inside a container (or on the host with Python 3.11+), use these targets to set up the development environment:Port mappings
Each service exposes ports for development tools:Port mappings can be customized through environment variables in
.env (e.g., DEV_JUPYTER_PORT=8888).
