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.