Skip to main content
A container-based environment is the best way to work on AI/ML projects. Your class repository provides pre-configured Docker containers with PyTorch, common ML libraries, and a uv-managed virtual environment. Each course has its own repository, and your assignment page links to the right one.

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)

Containers on a Mac run inside a Linux virtual machine, and Metal is not exposed to it. PyTorch in a container on an M-series Mac therefore runs on the CPU, and the mps device is unavailable. The chip’s GPU sits idle. What follows from that depends on your course. AI and computer vision. Docker is optional. Installing directly on macOS lets PyTorch use the GPU through Metal, which is much faster than the CPU container, at the cost of drifting from the pinned environment. The Working on a Mac guide covers the setup and states the tradeoff in full. If you prefer the container anyway, install Docker Desktop and use torch.dev.cpu. It works, and for small notebooks the difference is not worth the setup. Robotics. Docker is required, and the setup is different from the services on this page. See ROS container.

Configuration

All Docker services read their configuration from a .env file in the repository root. Copy the example to get started:
Key variables:
The docker-compose.yml loads .env via env_file, making all variables available inside every container.
Never commit your .env file to git. It contains your API keys. The repository’s .gitignore already excludes it.

Docker Compose services

Three services are defined in docker-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 using make 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).