Les conteneurs dans la chaîne

Exécuter un job dans une image, lui adjoindre des services, construire, étiqueter et pousser l'image, distinguer étiquette et empreinte, promouvoir la même image d'un environnement à l'autre et l'analyser.

  • 25 cartes
  • 4 thèmes
  • Gratuit

Le programme, thème par thème

Le poids de chaque thème suit celui que lui donne l'examen.

  1. Notions
  2. Questions
  3. Ranger et relier
  4. Mises en situation

Quelques cartes du deck

  • Image de conteneur : de quoi s'agit-il ?

    Voir la réponse

    Paquet figé et en lecture seule qui contient un programme et tout ce dont il a besoin pour tourner, et à partir duquel on crée des conteneurs.

    Un job de pipeline s'exécute lui aussi dans une image : elle fixe les outils et leurs versions, donc l'environnement du job.

  • Dans cette séquence, quelle image docker pull $IMG:latest récupère-t-il à la fin ?

    ```bash
    IMG=registry.example.com/equipe/app
    docker build -t $IMG:1.2 .
    docker push $IMG:1.2
    docker tag $IMG:1.2 $IMG:latest
    docker push $IMG:latest
    # le code change, nouvelle construction
    docker build -t $IMG:latest .
    docker push $IMG:latest
    `

    • L'image de la seconde construction
    • L'image de 1.2, la première à avoir porté latest
    • Aucune : le registre refuse de repousser une étiquette existante
    • La plus ancienne, que le registre garde sous latest
    Voir la réponse

    L'image de la seconde construction

    Une étiquette se déplace : le second docker push $IMG:latest la fait pointer vers la nouvelle image. $IMG:1.2 désigne toujours l'ancienne, qui n'est plus celle de latest.

  • Pour déployer une version précise, on étiquette l'image avec le … ou le numéro de version, et non avec ….

    Voir la réponse

    Pour déployer une version précise, on étiquette l'image avec le hash du commit ou le numéro de version, et non avec latest.

    latest change de contenu à chaque poussée : on ne sait plus quelle version tourne, ni vers laquelle revenir.

  • Registre d'images : de quoi s'agit-il ?

    Voir la réponse

    Serveur qui stocke les images de conteneurs, nommées et versionnées, où le pipeline les envoie et d'où les machines les tirent.

    Il sert de point de passage entre la construction et le déploiement : on y pousse une fois, on y tire autant de fois qu'il faut.

  • Le job docker build s'arrête sur « Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running? ». Quelle est la cause probable, et la solution ?

    • Aucun démon Docker dans le job : ajouter le service docker:dind
    • Le registre est hors service : relancer le job un peu plus tard
    • Le Dockerfile est invalide : corriger sa première instruction
    • Le job n'est pas connecté au registre : ajouter docker login
    Voir la réponse

    Aucun démon Docker dans le job : ajouter le service docker:dind

    Le client docker du job cherche un démon sur sa socket locale et n'en trouve pas. Un service docker:dind (ou un constructeur sans démon) en fournit un. Un Dockerfile invalide produirait une erreur de construction, pas de connexion.