GitLab Runner: Docker-Image mit Docker-in-Docker bauen
Diese Dokumentation ist Teil des Docker-Images bauen-Leitfadens. Den vollständigen Leitfaden finden Sie hier: Bauen und pushen Sie Docker-Images effizient aus Ihren GitLab CI/CD-Pipelines mit Stackhero Runnern und Docker-in-Docker.
👋 Willkommen in der Stackhero-Dokumentation!
Stackhero bietet Ihnen eine unkomplizierte GitLab Runner Cloud-Lösung, mit der Sie Ihre GitLab CI/CD-Jobs effizient und ohne Aufwand ausführen können. Das erwartet Sie:
- Unbegrenzte CI/CD-Minuten: Führen Sie Ihre Pipelines so oft aus, wie Sie möchten – ohne Abrechnung pro Minute oder unerwartete Zusatzkosten.
- Mehrere gleichzeitige Jobs: Beschleunigen Sie Ihre Entwicklung, indem Sie mehrere Jobs parallel ausführen.
- Der Docker Executor mit Docker-in-Docker-Unterstützung: Erstellen und pushen Sie Container-Images ganz einfach als Teil Ihres CI/CD-Prozesses.
- Funktioniert nahtlos mit GitLab.com und self-managed GitLab-Instanzen.
- Eine private, dedizierte Infrastruktur mit schneller NVMe/SSD-Speicherung sorgt für stabile und vorhersehbare Build-Performance.
- Verfügbar in den Regionen 🇪🇺 Europa und 🇺🇸 USA, passend zu den Anforderungen Ihres Teams.
Sparen Sie Zeit: Sie können Ihren ersten GitLab Runner verbinden und bereits nach wenigen Minuten mit Ihren Pipelines starten!
Sie können die folgende Beispiel-.gitlab-ci.yml-Datei zu Ihrem Repository hinzufügen. Diese Konfiguration baut das Dockerfile im Root-Verzeichnis Ihres Projekts:
build-image:
stage: build
image: docker:29
services:
- name: docker:29-dind
alias: docker
variables:
DOCKER_HOST: "tcp://docker:2375"
DOCKER_TLS_CERTDIR: ""
before_script:
- docker info
script:
# Ersetzen Sie "my-image" durch den gewünschten Namen:
- docker build -t my-image .
# Optional: Führen Sie einen schnellen Test mit dem gebauten Image durch:
# - docker run --rm my-image /path/to/tests
In diesem Beispiel verwenden wir die Docker-Image-Version 29. Sie können auch eine neuere Version verwenden, sobald diese verfügbar ist. Die aktuellsten Tags finden Sie auf der offiziellen Docker-Image-Seite.
In diesem Setup startet der Service docker:29-dind einen Docker-Daemon neben Ihrem Job, und DOCKER_HOST: "tcp://docker:2375" weist das docker CLI an, diesen zu verwenden. Setzen Sie immer DOCKER_HOST, wenn Sie einen docker:dind-Service deklarieren: Ohne diese Variable verbindet sich das CLI stillschweigend mit einem anderen Daemon, sodass Ihr Build auch bei fehlerhafter Service-Konfiguration erfolgreich sein kann. Das verbirgt echte Probleme (und führt dazu, dass Tools wie Testcontainers, die auf den Service angewiesen sind, nicht funktionieren). DOCKER_TLS_CERTDIR: "" sorgt dafür, dass die Verbindung über den unverschlüsselten Port 2375 im internen Job-Netzwerk erfolgt.
Als einfachere Alternative können Sie den services-Block und beide Variablen weglassen: Der Stackhero Runner stellt auch einen einsatzbereiten Docker-Daemon über einen gemounteten Socket bereit, sodass ein einfaches docker build ohne weitere Konfiguration funktioniert.