Arch Linux in Docker: Bleeding Edge Apps (Artikel 211)
Nutzung von Arch Linux als Docker-Basis-Image. Erfahren Sie alles über die Vor- und Nachteile, die Optimierung der Image-Größe und den Einsatz für modernste Entwicklungs-Workflows.
# Arch in Docker: Wenn ‘Stable’ nicht aktuell genug ist
TL;DR / Management Summary Arch Linux im Container ist die Wahl für “Bleeding Edge” Software. Während man für Standard-Web-Apps zu Alpine (Artikel 196) greift, nutzt man das Arch-Base-Image, wenn man die absolut neuesten Compiler (GCC 13+), experimentelle Libraries oder spezifische Arch-Tools braucht. Ein Senior Admin muss jedoch wissen: Arch Images sind “fett” (~400MB) und erfordern eine konsequente Cache-Pflege innerhalb des Dockerfiles.
# 1. Einführung & Architektur
Warum Arch im Container?
Der Hauptgrund für Arch in Docker ist die Verfügbarkeit neuester Software ohne manuelles Kompilieren.
# Der Größenvergleich (Mermaid)
graph LR
A[Alpine] -->|5 MB| B[Minimalist]
C[Debian Slim] -->|30 MB| D[Balanced]
E[Arch Linux] -->|450 MB| F[Feature Rich / Heavy]
subgraph "Use Case"
B --- G[Production Microservice]
D --- H[Standard Enterprise App]
F --- I[Modern Dev / Specialized Tools]
end
# 2. Das perfekte Arch Dockerfile
Optimierung gegen den ‘Bloat’.
Arch installiert standardmäßig viele Dokumentationen und Caches mit. Im Container wollen wir das nicht.
# Beispiel: Eine moderne C++ Build-Umgebung
FROM archlinux:latest
# 1. System-Update und Installation
# Wir nutzen --noconfirm für Automatisierung
RUN pacman -Syu --noconfirm && \
pacman -S --noconfirm gcc cmake make git
# 2. WICHTIG: Cache leeren im gleichen Layer!
RUN pacman -Scc --noconfirm
# 3. Verzeichnisse aufräumen (Dokumentation entfernen)
RUN rm -rf /usr/share/doc/* /usr/share/man/*
WORKDIR /src
COPY . .
CMD ["make", "build"]
# 3. Besonderheit: Pacman Hooks in Docker
Automatisierung verhindern.
In Arch führen Paket-Updates oft Hooks aus (z.B. Erneuerung des Initramfs). Diese sind im Container sinnlos und verlangsamen den Build.
- Lösung: Nutzen Sie das offizielle
archlinux:baseImage, das bereits viele unnötige Hooks deaktiviert hat.
# 4. Day-2 Operations: Image Lifecycle
Veraltete Images vermeiden.
Da Arch ein Rolling Release ist, veralten Images extrem schnell. Ein Image, das vor 3 Monaten gebaut wurde, hat hunderte Sicherheitslücken.
# Automatisierte Rebuilds
Stellen Sie sicher, dass Ihre CI/CD Pipeline (Artikel 209) das Arch-Image mindestens wöchentlich neu baut, auch wenn sich Ihr Code nicht geändert hat.
# In der Pipeline
docker build --pull -t my-arch-app:latest .
Das Flag --pull erzwingt das Herunterladen der neuesten archlinux:latest Basis.
# 5. Troubleshooting & “War Stories”
Wenn der Roll-over wehtut.
# Story 1: “Der GPG-Key Fail in der CI”
Symptom: Der Docker-Build bricht bei pacman -Syu mit Signaturfehlern ab.
Ursache: Das Base-Image auf Docker Hub wurde vor Wochen aktualisiert, der lokale Keyring im Container ist aber abgelaufen.
Lösung: Updaten Sie erst den Keyring und dann das System:
RUN pacman -Sy --noconfirm archlinux-keyring && pacman -Su --noconfirm.
# Story 2: “Dependency Conflict durch pacman -Sy”
Symptom: Ein Admin fügt eine Zeile RUN pacman -Sy curl in ein bestehendes Dockerfile ein. Das Image baut, aber die App stürzt mit Library-Fehlern ab.
Ursache: Teil-Update (Partial Upgrade). curl hat eine neuere Library-Abhängigkeit gezogen, der Rest des Systems blieb alt.
Lösung: Niemals -Sy allein nutzen. Immer -Syu verwenden, um den konsistenten Stand des Rolling Release zu wahren.
# 6. Fazit & Empfehlung
- Einsatz: Ideal für Build-Server (CI-Runner), Machine Learning Workflows (neueste CUDA-Libs) und moderne C++/Rust Entwicklung.
- Performance: Die I/O-Last beim Bauen ist durch das Entpacken der großen ZST-Archive höher als bei Alpine.
- Wahl: Wenn Größe keine Rolle spielt, aber Aktualität alles ist, gibt es keine Alternative zu Arch in Docker.
# Anhang: Cheatsheet
| Aufgabe | Befehl im Dockerfile |
|---|---|
| Update & Install | RUN pacman -Syu --noconfirm <pkg> |
| Full Cleanup | RUN pacman -Scc --noconfirm && rm -rf /var/cache/pacman/pkg/* |
| Mirror-Optimierung | RUN reflector --latest 5 --save /etc/pacman.d/mirrorlist |
| Version prüfen | cat /etc/os-release |
| Shell-Zugriff | docker exec -it <id> /bin/bash |
| Image Größe prüfen | `docker images |