Passer au contenu principal

Conteneurs et Registres (GitLab)

Container Registry

GitLab embarque un registre Docker v2 nativement. Chaque projet dispose d'un registre prive accessible via les credentials GitLab. C'est l'une des integrations les plus utilisees : les pipelines CI buildent des images et les poussent dans le registre, les deploiements les recuperent.

Acces au registre

Le registre est accessible a registry.gitlab.example.com (si configure separement) ou gitlab.example.com:5050. L'authentification se fait avec les identifiants GitLab ou un deploy token.

docker login registry.gitlab.example.com

# Depuis un pipeline CI, les variables sont automatiquement disponibles
docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY

Workflow pipeline typique

variables:
  IMAGE: $CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA

build-image:
  stage: build
  image: docker:27
  services:
    - docker:27-dind
  before_script:
    - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
  script:
    - docker build -t $IMAGE .
    - docker push $IMAGE
    - docker tag $IMAGE $CI_REGISTRY_IMAGE:latest
    - docker push $CI_REGISTRY_IMAGE:latest

Kaniko (sans Docker-in-Docker)

Docker-in-Docker (dind) necessite des runners privilegies, ce qui pose des problemes de securite. Kaniko build des images Docker sans daemon et sans privileges root :

build-kaniko:
  stage: build
  image:
    name: gcr.io/kaniko-project/executor:v1.23.2-debug
    entrypoint: [""]
  script:
    - /kaniko/executor
      --context "$CI_PROJECT_DIR"
      --dockerfile "$CI_PROJECT_DIR/Dockerfile"
      --destination "$CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA"

Kaniko lit les credentials depuis /kaniko/.docker/config.json. GitLab injecte automatiquement les credentials registry dans ce fichier si l'option est activee dans les parametres runner.

Nettoyage des images

Sans politique de nettoyage, le registre grossit indefiniment. GitLab propose une politique de cleanup configurable (Settings > Packages & Registries > Container Registry) : conserver N versions, supprimer les tags plus anciens que X jours, garder les tags matchant un pattern.

Le nettoyage peut aussi etre declenche par l'API ou depuis un job CI pour un controle plus fin.

Sources