Ricerca…


Contenitore CI Jenkins che utilizza Docker

Questo capitolo descrive come configurare un Docker Container con Jenkins all'interno, che è in grado di inviare comandi Docker all'installazione Docker (il daemon Docker) dell'host. Utilizzare in modo efficace Docker in Docker. Per raggiungere questo obiettivo, dobbiamo creare un'immagine Docker personalizzata basata su una versione arbitraria dell'immagine ufficiale di Docker di Jenkins. Il Dockerfile (l'istruzione come costruire l'immagine) assomiglia a questo:

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

Questo Dockerfile crea un'immagine che contiene i binari del client Docker utilizzato da questo client per comunicare con un daemon Docker. In questo caso il Docker Daemon dell'host. L'istruzione RUN in questo file crea anche un gruppo di utenti UNIX con l'UID 999 e aggiunge l'utente Jenkins. Perché esattamente questo è necessario è descritto nel capitolo successivo. Con questa immagine possiamo eseguire un server Jenkins che può usare i comandi Docker, ma se eseguiamo questa immagine il client Docker che abbiamo installato all'interno dell'immagine non può comunicare con il daemon Docker dell'host. Questi due componenti comunicano tramite UNIX Socket /var/run/docker.sock . Su Unix questo è un file come tutto il resto, quindi possiamo montarlo facilmente all'interno del contenitore Jenkins. Questo viene fatto con il comando docker run -v /var/run/docker.sock:/var/run/docker.sock --name jenkins MY_CUSTOM_IMAGE_NAME . Ma questo file montato è di proprietà di docker:root e per questo motivo il Dockerfile crea questo gruppo con un UID ben noto e aggiunge l'utente Jenkins ad esso. Ora il contenitore Jenkins è davvero in grado di funzionare e utilizzare Docker. In produzione, il comando run dovrebbe contenere anche -v jenkins_home:/var/jenkins_home per -v jenkins_home:/var/jenkins_home backup della directory Jenkins_home e, naturalmente, una mappatura delle porte per accedere al server sulla rete.



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow