Recherche…


Jenkins CI Container utilisant Docker

Ce chapitre décrit comment configurer un conteneur Docker avec Jenkins à l'intérieur, capable d'envoyer des commandes Docker à l'installation Docker (le démon Docker) de l'hôte. Utiliser efficacement Docker dans Docker. Pour ce faire, nous devons créer une image Docker personnalisée basée sur une version arbitraire de l'image officielle Jenkins Docker. Le fichier Dockerfile (l'instruction de génération de l'image) ressemble à ceci:

FROM jenkins

USER root

RUN cd /usr/local/bin && \
curl https://master.dockerproject.org/linux/amd64/docker > docker  && \
chmod +x docker  && \
groupadd -g 999 docker && \
usermod -a -G docker jenkins
    
USER Jenkins

Ce fichier Dockerfile crée une image qui contient les fichiers binaires du client Docker que ce client est utilisé pour communiquer avec un démon Docker. Dans ce cas, le démon Docker de l'hôte. L'instruction RUN dans ce fichier crée également un groupe d'utilisateurs UNIX avec l'UID 999 et y ajoute l'utilisateur Jenkins. Pourquoi exactement cela est nécessaire est décrit dans le chapitre suivant. Avec cette image, nous pouvons exécuter un serveur Jenkins qui peut utiliser les commandes Docker, mais si nous exécutons simplement cette image, le client Docker installé dans l'image ne peut pas communiquer avec le démon Docker de l'hôte. Ces deux composants communiquent via un socket UNIX /var/run/docker.sock . Sous Unix, c'est un fichier comme tout le reste, donc nous pouvons facilement le monter dans le conteneur Jenkins. Ceci est fait avec la commande docker run -v /var/run/docker.sock:/var/run/docker.sock --name jenkins MY_CUSTOM_IMAGE_NAME . Mais ce fichier monté appartient à docker:root et à cause de cela, le fichier Dockerfile crée ce groupe avec un UID bien connu et y ajoute l'utilisateur Jenkins. Maintenant, le conteneur Jenkins est vraiment capable d’exécuter et d’utiliser Docker. En production, la commande run doit également contenir -v jenkins_home:/var/jenkins_home pour sauvegarder le répertoire Jenkins_home et bien sûr un mappage de port pour accéder au serveur via le réseau.



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow