Files
nixos-vorlagen/docs/PODMAN_DISTROBOX.md
2026-06-16 21:49:01 +02:00

6.2 KiB

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

imports = [
  ./modules/containers/podman-distrobox.nix
];

Rebuild

sudo nixos-rebuild switch --flake .#template

Podman Basics

Docker-Kompatibilität

Nach Aktivierung funktioniert docker-CLI:

# 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

# Kein sudo nötig!
podman run -it ubuntu:latest bash

# Oder
docker run -it alpine:latest sh

Distrobox Basics

Distrobox-Container erstellen

# 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

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

distrobox list

# Output:
# NAME        | STATUS      | IMAGE NAME
# ubuntu-dev  | CREATED     | ubuntu:latest
# alpine-work | EXITED      | alpine:latest

Container löschen

distrobox rm ubuntu-dev

Praktische Beispiele

Beispiel 1: Python Development mit Ubuntu Libs

# 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

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)

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:

# 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

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

# 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

# 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

# Shortcut für häufig benutzte Container
alias ubuntu-dev="distrobox enter ubuntu-dev"

ubuntu-dev  # Schnell drin!

Distrobox "Export" (Advanced)

# Programm aus Container in Host-Desktop sichtbar machen
distrobox export --app APPNAME --bin /usr/bin/program

Troubleshooting

Problem: "podman: command not found"

# Ü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

# 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

# Ü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"

# 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 ist dein neuer Docker-Ersatz auf NixOS!