Selon l’officiel documentation de gitlab , un moyen de permettre à docker build
au sein de ci
pipelines, consiste à utiliser le service dind
(en termes de gitlab-ci
services ).
Cependant, comme c'est toujours le cas avec les travaux ci exécutés sur des exécuteurs de docker, le docker:latest
_ l'image est également nécessaire.
Quelqu'un pourrait-il expliquer:
docker:dind
et le docker:latest
images?docker build
dans un emploi ci? le docker:latest
_ image ( dans laquelle le travail sera exécuté !) incorpore le démon docker (et je pense que le docker-compose
_ également), qui sont les outils nécessaires aux commandes dont nous avons besoin (par exemple, docker build
, docker Push
etc)?À moins que je ne me trompe, la question devient plus ou moins:
Pourquoi un client docker et un démon docker ne peuvent pas résider dans le même conteneur docker (activé)
quelle est la différence entre le docker: dind et le docker: dernières images?
docker:latest
contient tout le nécessaire pour se connecter à un démon docker, c.-à-d. pour exécuter docker build
, docker run
et autres choses de ce genre. Il contient également le démon docker, mais il n'est pas démarré en tant que point d'entrée.docker:dind
s'appuie sur docker:latest
et lance un démon docker comme point d’entrée.Donc, leur contenu est presque le même mais par leurs points d’entrée, on est configuré pour se connecter à tcp://docker:2375
en tant que client alors que l’autre est destiné à être utilisé pour un démon.
pourquoi le service et l'image du menu fixe sont-ils nécessaires […]?
Vous n'avez pas besoin des deux. Vous pouvez simplement utiliser l'un des deux, démarrez dockerd
comme première étape, puis exécutez votre docker build
et docker run
_ commande comme d'habitude, comme je le faisais ici ; apparemment, c’était l’approche originale dans gitlab à un moment donné . Mais je trouve plus propre d'écrire simplement service: docker:dind
au lieu d'avoir un before_script
pour installer dockerd
. De plus, vous n'avez pas à comprendre comment démarrer et installer dockerd
correctement dans votre image de base (si vous n'utilisez pas docker:latest
.)
Déclarer le service dans votre .gitlab-ci.yml
vous permet également d’échanger facilement le menu fixe si vous savez que votre coureur est en train de monter son système /var/run/docker.sock
dans votre image. Vous pouvez définir le variable protégéeDOCKER_Host
à unix:///var/run/docker.sock
pour obtenir des constructions plus rapides. Les autres personnes qui n’ont pas accès à un tel coureur peuvent toujours utiliser votre référentiel et se replier sur le service dind
sans modifier votre .gitlab-ci.yml
.