Suche…


Jenkins CI Container mit Docker

In diesem Kapitel wird beschrieben, wie Sie einen Docker-Container mit Jenkins einrichten, der Docker-Befehle an die Docker-Installation (den Docker-Daemon) des Hosts senden kann. Docker effektiv in Docker verwenden. Um dies zu erreichen, müssen wir ein benutzerdefiniertes Docker Image erstellen, das auf einer beliebigen Version des offiziellen Jenkins Docker Image basiert. Die Dockerfile (Die Anleitung zum Erstellen des Image) sieht folgendermaßen aus:

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

Diese Docker-Datei erstellt ein Image, das die Binärdateien des Docker-Clients enthält, über die dieser Client mit einem Docker-Daemon kommuniziert. In diesem Fall der Docker Daemon des Hosts. Die RUN Anweisung in dieser Datei erstellt auch eine UNIX-Benutzergruppe mit der UID 999 und fügt den Benutzer Jenkins hinzu. Warum genau dies notwendig ist, wird im weiteren Kapitel beschrieben. Mit diesem Image können wir einen Jenkins-Server ausführen, der Docker-Befehle verwenden kann. Wenn Sie jedoch nur dieses Image ausführen, kann der Docker-Client, den wir im Image installiert haben, nicht mit dem Docker-Daemon des Host kommunizieren. Diese beiden Komponenten kommunizieren über einen UNIX-Socket /var/run/docker.sock . Unter Unix ist dies eine Datei wie alles andere, sodass wir sie leicht in den Jenkins-Container einbinden können. Dies erfolgt mit dem Befehl docker run -v /var/run/docker.sock:/var/run/docker.sock --name jenkins MY_CUSTOM_IMAGE_NAME . Diese gemountete Datei gehört docker:root diesem Grund erstellt die Dockerfile diese Gruppe mit einer bekannten UID und fügt den Jenkins-Benutzer hinzu. Nun ist der Jenkins Container wirklich in der Lage, Docker auszuführen und zu verwenden. In der Produktion sollte der Befehl run -v jenkins_home:/var/jenkins_home um das Jenkins_home-Verzeichnis zu sichern, und natürlich ein Port-Mapping, um über ein Netzwerk auf den Server zuzugreifen.



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow