
Docker-Image in die GitLab Container Registry pushen
Die GitLab Container Registry erlaubt es, eigene Docker-Images direkt im GitLab-Projekt zu speichern – ideal für CI/CD, reproduzierbare Builds und unabhängige Build-Umgebungen. In diesem Beitrag zeige ich, wie du ein separates Git-Repository nutzt, das ein Dockerfile enthält, und wie du das Docker-Image automatisiert per GitLab CI erzeugst und in die Registry pusht.
Voraussetzungen
- GitLab-Projekt mit aktivierter Container Registry
- GitLab Runner mit Docker-Zugriff (Shell-Runner oder Docker-in-Docker)
- Ein eigenes Repository, das ein
Dockerfile
enthält
Beispiel-Dockerfile
Das folgende Dockerfile liegt im Root-Verzeichnis des Repositories:
FROM debian:12
# Setze Umgebungsvariable für Nicht-Interaktivität während der Installation
ENV DEBIAN_FRONTEND=noninteractive
# Installiere Tools und Node.js
RUN apt-get update && \
apt-get install -y \
apt-transport-https \
ca-certificates \
curl \
gnupg \
openssh-client \
lsb-release && \
rm -rf /var/lib/apt/lists/*
ENV NODE_MAJOR=18
RUN curl -fsSL https://deb.nodesource.com/setup_${NODE_MAJOR}.x | bash - && \
apt-get install -y nodejs
Das Image enthält Debian 12, Node.js 18 und die nötigen Tools für npm
, SSH und andere CI/CD-Build-Schritte.
CI/CD: Image automatisiert bauen und pushen
Die .gitlab-ci.yml
im selben Repository sieht so aus:
stages:
- create_image
create_image_job:
stage: create_image
script:
- echo $CI_JOB_TOKEN | docker login -u gitlab-ci-token $CI_REGISTRY --password-stdin
- echo $CI_REGISTRY_IMAGE
- docker build -t $CI_REGISTRY_IMAGE/nodebuilder:latest .
- docker push $CI_REGISTRY_IMAGE/nodebuilder:latest
- docker pull $CI_REGISTRY_IMAGE/nodebuilder:latest
- docker images
tags:
- shell
only:
- master
Erklärung
- Login zur GitLab Registry: mit CI-Token authentifiziert sich der Runner bei der Container Registry
- Build: Das Image wird aus dem aktuellen Git-Repository gebaut
- Tag & Push: Das Image wird mit dem aktuellen Registry-Pfad versehen und gepusht
- Pull +
docker images
: optional zur Überprüfung im Log
Dieser Job läuft automatisch bei jedem Push auf den master
-Branch.
Image in anderen Projekten verwenden
Das erzeugte Image kann in beliebigen anderen Projekten verwendet werden, z. B. in einer .gitlab-ci.yml
:
image: gitlab.dunzweiler.me:5050/dunzweiler_public/nodebuilder_docker/nodebuilder:latest
Stelle sicher, dass der Runner Zugriff auf die Registry hat und ggf. mit einem gültigen Token (z. B. CI_JOB_TOKEN
) authentifiziert ist.
Fazit
Mit einem dedizierten Git-Repository für dein Dockerfile und einem automatisierten CI/CD-Job schaffst du eine zentrale, nachvollziehbare Build-Umgebung. Das Docker-Image steht nach jedem Commit aktuell in der GitLab Registry bereit und kann in beliebigen Projekten wiederverwendet werden – stabil, sicher und unabhängig von externen Quellen wie dem Docker Hub.