Files
nixos-vorlagen/docs/PODMAN_DISTROBOX.md
T
2026-06-16 20:55:00 +02:00

377 lines
6.3 KiB
Markdown

# Podman & Distrobox - Container auf NixOS
Anleitung zur Nutzung von Podman und Distrobox für Container-Workloads.
---
## Was ist Podman?
**Podman** = Daemonless Container Runtime (Docker-Ersatz)
```
Docker = Client-Server Architektur
Podman = Direkt auf deinem User-Account
```
**Vorteile:**
- ✅ Kein Root-Daemon nötig
- ✅ Sicherer (läuft als normaler User)
- ✅ Docker-kompatibel (`docker` CLI funktioniert)
- ✅ Leichter als Docker
- ✅ Perfekt für Einzelnutzer
---
## Was ist Distrobox?
**Distrobox** = Einfache Linux-Container (für Nicht-Gaming)
```
Podman = Low-Level Container-Runtime
Distrobox = High-Level Container Management
```
**Use Case:**
- Du brauchst Ubuntu-Pakete, aber nutzt NixOS
- Python/Node.js Development-Umgebung
- Spezielle Tools die nur in anderen Distros verfügbar sind
- Sandbox für unbekannte Software
**Nicht für Gaming!** (GameMode/Steam brauchen Bare Metal)
---
## Aktivieren
### In `configuration.nix` einfügen
```nix
imports = [
./modules/containers/podman-distrobox.nix
];
```
### Rebuild
```bash
sudo nixos-rebuild switch --flake .#template
```
---
## Podman Basics
### Docker-Kompatibilität
Nach Aktivierung funktioniert `docker`-CLI:
```bash
# Diese Befehle funktionieren:
docker ps
docker run ubuntu:latest echo "Hello"
docker pull alpine
docker exec
docker build
# Im Hintergrund: Podman
```
### Container als User starten
```bash
# Kein sudo nötig!
podman run -it ubuntu:latest bash
# Oder
docker run -it alpine:latest sh
```
---
## Distrobox Basics
### Distrobox-Container erstellen
```bash
# Ubuntu-Container
distrobox create --name ubuntu-dev --image ubuntu:latest
# Alpine-Container
distrobox create --name alpine-work --image alpine:latest
# Fedora-Container
distrobox create --name fedora --image fedora:latest
```
### Container betreten
```bash
distrobox enter ubuntu-dev
# Du bist jetzt in: Ubuntu Bash
apt update && apt install python3
# Ubuntu-Pakete installieren
exit
# Zurück zu NixOS
```
### Container auflisten
```bash
distrobox list
# Output:
# NAME | STATUS | IMAGE NAME
# ubuntu-dev | CREATED | ubuntu:latest
# alpine-work | EXITED | alpine:latest
```
### Container löschen
```bash
distrobox rm ubuntu-dev
```
---
## Praktische Beispiele
### Beispiel 1: Python Development mit Ubuntu Libs
```bash
# Container erstellen
distrobox create --name python-dev --image ubuntu:latest
# Betreten
distrobox enter python-dev
# Ubuntu-Packages installieren
apt update && apt install -y python3-pip libpython3-dev
pip install numpy scipy pandas
# Work machen
python3 script.py
exit
```
### Beispiel 2: Node.js in Alpine
```bash
distrobox create --name nodejs --image node:18-alpine
distrobox enter nodejs
npm install -g yarn pnpm
npm run dev
exit
```
### Beispiel 3: Spezielle Tools (z.B. Ubuntu-Spezific)
```bash
distrobox create --name ubuntu-tools --image ubuntu:latest
distrobox enter ubuntu-tools
# Ubuntu-spezifische Tools installieren
apt install -y snap # oder andere Ubuntu-only Tools
exit
```
---
## Heim-Verzeichnis Zugriff
Distrobox automatische Mounts:
```bash
# Von NixOS:
echo "test" > ~/test.txt
# Im Container:
distrobox enter ubuntu-dev
ls ~ # Zeigt ~/test.txt (selbes Verzeichnis!)
```
**Wichtig:** Dateien sind Heim-verzeichnis-übergreifend sichtbar!
---
## Netzwerk im Container
### Zugriff auf Host
```bash
distrobox enter ubuntu-dev
# Kann auf deinen Host zugreifen
curl http://localhost:8080 # Wenn Host-Service läuft
ping 8.8.8.8 # Internet funktioniert
```
### Container veröffentlichen
```bash
# Container als Service:
docker run -d -p 8080:80 nginx
# Dann von außen:
curl http://localhost:8080
```
---
## Performance
### Podman vs. Docker
```
Docker: 100%
Podman: 99-101% (kaum Unterschied)
```
Podman ist manchmal sogar schneller!
### Distrobox Overhead
```
Native NixOS: 100%
Im Distrobox: 98-99% (minimal)
```
Distrobox ist fast keine Verlangsamung.
---
## Tipps & Tricks
### Persistent Storage
```bash
# Container mit Volume
distrobox create --name work --image ubuntu:latest \
--volume /home/user/projects:/mnt/projects
distrobox enter work
ls /mnt/projects # Deine Projekte!
```
### Container-Shell in NixOS starten
```bash
# Shortcut für häufig benutzte Container
alias ubuntu-dev="distrobox enter ubuntu-dev"
ubuntu-dev # Schnell drin!
```
### Distrobox "Export" (Advanced)
```bash
# Programm aus Container in Host-Desktop sichtbar machen
distrobox export --app APPNAME --bin /usr/bin/program
```
---
## Troubleshooting
### Problem: "podman: command not found"
```bash
# Überprüfe ob aktiviert:
grep -r "podman" /etc/nixos/configuration.nix
# Falls nicht: Zu configuration.nix hinzufügen
imports = [ ./modules/containers/podman-distrobox.nix ];
sudo nixos-rebuild switch --flake .#template
```
### Problem: Container haben kein Internet
```bash
# DNS prüfen
podman run alpine ping 8.8.8.8
# Fallback: DNS manuell setzen
podman run --dns=8.8.8.8 alpine ping 8.8.8.8
# Oder in Datei konfigurieren
~/.config/containers/containers.conf:
dns_servers = ["8.8.8.8", "1.1.1.1"]
```
### Problem: Docker alias funktioniert nicht
```bash
# Überprüfe Podman-Docker Compat:
ls -la /run/podman/podman.sock
# Falls nicht da: Neustart
systemctl --user restart podman
# Oder in nix.conf:
environment.variables.DOCKER_HOST = "unix:///run/podman/podman.sock";
```
### Problem: "Too many open files"
```bash
# File descriptors erhöhen in gaming-tweaks.nix
# Oder manuell:
ulimit -n 524288
```
---
## Für Freunde: Erklärung
### Einfach
```
Podman = Docker für NixOS
Distrobox = Einfache Linux-Umgebung in Container
Nutzen wenn:
- Du brauchst Ubuntu-Pakete
- Python/Node.js Environment
- Isolierte Software-Testing
```
### NICHT für Gaming!
```
❌ Spiele laufen nicht in Distrobox
❌ GameMode funktioniert nicht im Container
❌ GPU-Zugriff kompliziert
✅ Nutze Bare Metal für Gaming
```
---
## Checkliste
- [ ] Modul in `configuration.nix` importiert
- [ ] Rebuild durchgeführt
- [ ] `podman run alpine echo "test"` funktioniert
- [ ] `distrobox` Befehl verfügbar
- [ ] Container erstellt & betreten funktioniert
---
## Weitere Ressourcen
- Podman Docs: https://docs.podman.io/
- Distrobox GitHub: https://github.com/89luca89/distrobox
- OCI Images: https://hub.docker.com/ (auch mit Podman nutzbar)
---
**Podman ist dein neuer Docker-Ersatz auf NixOS!** 🐳→📦