Docker Executor
GitLab Executors
4.3 Docker Executor
Beschreibung: Führt Jobs in Docker-Containern aus.
Geeignet für: Eine einheitliche Umgebung über alle Jobs hinweg und eine einfache Verwaltung von Abhängigkeiten.
Warum? Docker ist einer der am häufigsten verwendeten Executors, weil er eine einheitliche und isolierte Umgebung für die Ausführung von CI/CD-Jobs bereitstellt. Docker-Images dienen als Momentaufnahmen von Umgebungen und enthalten alles, was zur Ausführung des Codes benötigt wird. Diese Konsistenz stellt sicher, dass sich Jobs in den verschiedenen Stages der Pipeline vorhersehbar verhalten, was Inkonsistenzen und den Aufwand für die Fehlersuche reduziert. Docker Executors vereinfachen außerdem die Verwaltung von Abhängigkeiten, da alle benötigten Bibliotheken und Konfigurationen im Docker-Image gekapselt sind.
Beispielkonfiguration
# Stages definieren.
stages:
- build
- test
- security
- deploy
# Docker-Image für die Jobs festlegen.
# So laufen alle Jobs in einer einheitlichen Python-Umgebung.
image: python:3.8
Vorteile
- Konsistenz: Docker-Images stellen sicher, dass in allen Stages der Pipeline dieselbe Umgebung verwendet wird. Das reduziert Inkonsistenzen und Probleme nach dem Motto „bei mir funktioniert es".
- Isolation: Jeder Job läuft in einem isolierten Container. Abhängigkeiten und Konfigurationen beeinflussen sich dadurch nicht gegenseitig.
- Wiederverwendbarkeit: Docker-Images können in verschiedenen Projekten und Pipelines wiederverwendet werden. Das erleichtert die Pflege und Aktualisierung von Umgebungen.
Beispiel mit dem Taschenrechnerprojekt:
Mit dem Docker Executor lässt sich sicherstellen, dass die Taschenrechneranwendung in CI/CD genauso läuft wie auf lokalen Rechnern und Produktionsservern. Das verringert das Risiko von Fehlern durch Unterschiede zwischen Umgebungen und macht die Bereitstellungen zuverlässiger.
Nachteile
- Sicherheit: Falsch konfigurierte Container können ausgenutzt werden, um erweiterte Rechte auf dem Hostsystem zu erlangen.
- Leistung: Die Ausführung von Docker-Containern erfordert zusätzliche Ressourcen (CPU, Arbeitsspeicher und Datenträger-E/A). Das kann die Leistung der CI/CD-Pipeline beeinträchtigen, insbesondere auf gemeinsam genutzten Runnern.