Your repository has been restructured to support flexible deployment (local, remote VM, Kubernetes) with Sunshine/Moonlight integration for optimal performance.
- Dockerfile.new - Clean, production-ready Dockerfile
- compose.yaml - Base Docker Compose configuration
- compose.override.yaml - Local development overrides
- compose.remote.yaml - Remote VM configuration
- k8s/workspace.yaml - Kubernetes StatefulSet manifests
- SUNSHINE_SETUP.md - Complete Sunshine/Moonlight setup guide
- start.sh / start.ps1 - Quick start scripts
- deploy-remote.sh - Remote deployment script
- README.new.md - Comprehensive documentation
Before: After:
docker-compose.yml → compose.yaml (base)
compose.override.yaml (local)
compose.remote.yaml (remote)
Dockerfile → Dockerfile (simplified)
README.md → README.md (comprehensive)
+ SUNSHINE_SETUP.md (new guide)
+ k8s/ (Kubernetes manifests)
+ start.sh, start.ps1 (quick start)
+ deploy-remote.sh (deployment)
# Stop current container
docker compose down
# Backup volumes (optional)
docker run --rm -v dev-home:/data -v ${PWD}:/backup alpine tar czf /backup/backup-pre-migration.tar.gz -C /data .# Backup originals
Move-Item Dockerfile Dockerfile.old
Move-Item docker-compose.yml docker-compose.yml.old
Move-Item README.md README.old.md
# Use new files
Move-Item Dockerfile.new Dockerfile
Move-Item README.new.md README.md
# docker-compose.yml is now split:
# - compose.yaml (already created)
# - compose.override.yaml (already created)
# - compose.remote.yaml (already created)# Edit .env with your settings
code .env # or notepad .env
# Key settings to update:
# - DEV_PASSWORD (change from default!)
# - TIMEZONE
# - GIT_USER_NAME
# - GIT_USER_EMAILOption A: Quick Start (Recommended)
.\start.ps1Option B: Manual
# Build and start
docker compose up -d --build
# Check status
docker compose ps
# View logs
docker compose logs -f# RDP (Windows)
mstsc /v:localhost:3389
# Or SSH
ssh -p 2222 dev@localhostdocker compose up -d- Automatically uses
compose.yaml+compose.override.yaml - GPU support enabled
- Docker socket mounted
# Deploy to remote VM
./deploy-remote.sh user@remote-vm
# Or manually
docker context create remote --docker "host=ssh://user@remote-vm"
docker --context remote compose -f compose.yaml -f compose.remote.yaml up -d# Deploy
kubectl apply -f k8s/workspace.yaml
# Check status
kubectl get pods -n workspace
# Access
kubectl get svc -n workspace
# Connect to <node-ip>:30389For near-native performance (5-15ms latency):
- Install Sunshine on host/VM:
winget install LizardByte.Sunshine - Install Moonlight on laptop:
winget install MoonlightGameStreamingProject.Moonlight - Follow complete setup: SUNSHINE_SETUP.md
| Feature | Old | New |
|---|---|---|
| Performance | RDP only (50-150ms) | Sunshine/Moonlight (5-15ms) |
| Deployment | Local only | Local + Remote + K8s |
| Configuration | Single compose file | Modular (base + overrides) |
| Remote Access | Manual setup | Built-in scripts |
| Security | Basic | WireGuard VPN integration |
| Documentation | Basic README | Complete guides |
| Management | Manual docker commands | Quick start scripts + Makefile |
# Using old compose file
docker-compose down # Note: dash, not space
# Or force remove
docker container rm -f workspaceEdit .env:
RDP_PORT=3390 # Instead of 3389
SSH_PORT=2223 # Instead of 2222# Test GPU access
docker run --rm --gpus all nvidia/cuda:12.0.0-base-ubuntu22.04 nvidia-smi
# If fails, check Docker Desktop GPU settings
# Settings → Resources → GPU# Make sure you're in the correct directory
cd C:\Users\caspe\Repos\workspace\docker\ubuntu
# Check files exist
dir compose.*- Keep:
.env(your settings) - Keep: Volume data (automatically preserved)
- Optional:
Dockerfile.old,docker-compose.yml.old(backup)
Once you've confirmed new setup works:
Remove-Item Dockerfile.old
Remove-Item docker-compose.yml.old
Remove-Item README.old.md
Remove-Item .gitignore.new # Use if you want the new gitignore- ✅ Test locally -
.\start.ps1 - ✅ Change password - Edit
.env, setDEV_PASSWORD - ✅ Configure Git - Edit
.env, setGIT_USER_NAMEandGIT_USER_EMAIL - ⬜ Setup Sunshine - Follow SUNSHINE_SETUP.md for optimal performance
- ⬜ Deploy remotely - Use
deploy-remote.shif needed - ⬜ Install IDEs - Inside container, install JetBrains Toolbox or snap packages
- Quick reference:
make help(shows all available commands) - Sunshine setup: See SUNSHINE_SETUP.md
- Full documentation: See README.md
- Issues: Check logs with
docker compose logs -f
# Start
docker compose up -d
# Stop
docker compose down
# Logs
docker compose logs -f
# Shell access
docker compose exec workspace bash
# Restart
docker compose restart
# Update
docker compose pull && docker compose up -d
# Backup
make backup # or see Makefile for manual command
# Remote deployment
./deploy-remote.sh user@remote-vm
# Kubernetes
kubectl apply -f k8s/workspace.yamlYour existing data (home directory, workspace) is preserved!
The new setup uses the same volume names, so all your files, settings, and installed applications are untouched.