Aller au contenu

Publier une image

Une fois qu'une image est construite, il est possible de la pousser vers un registry comme par exemple dockerhub pour la partager.

Avant de pousser, une image sur Dockerhub, il faut l'avoir construite en précisant l'adresse de la registry suivi du nom du projet:

docker build [OPTIONS] -f <file> -t <registry>/<project>/<image name>[:<tag>] </path/file>

Il faut ensuite se connecter à la registry:

docker login <registry>

Puis pousser l'image:

docker push <registry>/<project>/<image name>[:<tag>]

Registry Dockerhub

Pour publier sur la registry Dockerhub (registry par défaut), vous devez au préalable vous créer un compte puis un projet que l'on appellera ici myproject.

Il faut ensuite construire l'image en précisant l'adresse de la registry puis le nom du projet. Par exemple, en reprenant un des cas d'application précédent:

docker build -f Dockerfile -t myproject/exemple . &&\
docker build -f Doockerfile.cmd -t myproject/exemple:cmd
Note

Dockerhub étant la registry par défaut de l'ecosytème Docker pour télécharger ou pousser une image, il n'est pas nécessaire de préciser l'adresse de la registry. La syntaxe complète est la suivante:

docker build -f Dockerfile -t docker.io/myproject/exemple . &&\
docker build -f Doockerfile.cmd -t docker.io/myproject/exemple:cmd
Et pour une image officielle :
docker pull docker.io/library/python:latest
docker pull registry.hub.docker.com/library/python

Il faut ensuite se connecter à la registry avec:

docker login

Note

Même remarque, Dockerhub étant la registry par défaut de l'ecosytème Docker il n'est pas nécessaire de préciser l'adresse de la registry. La syntaxe complète est la suivante:

docker login docker.io

Vous devriez obtenir:

user@host $ docker login
Connectez-vous avec votre identifiant Docker pour pousser et tirer des images de Docker Hub. Si vous n'avez pas d'ID Docker, rendez-vous sur https://hub.docker.com pour en créer un.
Nom d'utilisateur : your_login
Mot de passe :
ATTENTION ! Votre mot de passe sera stocké en clair dans /home/user/.docker/config.json.
Configurez un credential helper pour supprimer cet avertissement. Voir
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
user@host $ docker image push myproject/exemple:cmd
user@host $ docker image push myproject/exemple

Vérifiez ensuite sur le site de Dockerhub si les images ont été publiées.

Registry Gitlab

Chaque projet sur le serveur Gitlab de l'IN2P3 peut stocker des images Docker. Sur le site web du serveur, l'onglet Registry de chaque projet liste les images stockées, ainsi que les instructions pour les télécharger ou les envoyer.

Par exemple, pour se connecter à la registry, recréer l'image et la pousser, voici les instructions:

user@host $ docker login gitlab-registry.in2p3.fr
Nom d'utilisateur : your_login
Mot de passe :
WARNING ! Votre mot de passe sera stocké en clair dans /home/user/.docker/config.json.
Configurez un outil d'aide à l'authentification pour supprimer cet avertissement. Voir
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Connexion réussie
user@host $ docker build -f Dockerfile.cmd -t gitlab-registry.in2p3.fr/user/myproject/exemple:cmd .
user@host $ docker push gitlab-registry.in2p3.fr/user/myproject/exemple:cmd

Astuce

Vous pouvez également utiliser l'intégration continue pour permettre la construction automatique d'une image Docker accessible via le GitLab registry.

Avec Kaniko :

stages:
  - build   

build:
  stage: build
  only: 
    - main
  image:
    name: gcr.io/kaniko-project/executor:debug
    entrypoint: [""]
  script:
    - mkdir -p /kaniko/.docker
    - echo "{\"auths\":{\"${CI_REGISTRY}\":{\"auth\":\"$(printf "%s:%s" "${CI_REGISTRY_USER}" "${CI_REGISTRY_PASSWORD}" | base64 | tr -d '\n')\"}}}" > /kaniko/.docker/config.json
    - >-
      /kaniko/executor
      --context "${CI_PROJECT_DIR}"
      --dockerfile "${CI_PROJECT_DIR}/Dockerfile"
      --destination "${CI_REGISTRY_IMAGE}:${CI_COMMIT_REF_SLUG}"
    - echo 'pushed on registry'
Authors: Cécile Cavet