Docker
Docker i Docker
Sök…
Jenkins CI Container med Docker
I detta kapitel beskrivs hur du ställer in en Docker Container med Jenkins inuti, som kan skicka Docker-kommandon till Docker-installationen (Docker Daemon) för värden. Effektivt med Docker i Docker. För att uppnå detta måste vi bygga en anpassad Docker Image som är baserad på en godtycklig version av den officiella Jenkins Docker Image. Dockerfile (instruktionen hur man bygger bilden) ser så här ut:
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
Denna Dockerfile bygger en bild som innehåller Docker-klientbinarierna som den här klienten används för att kommunicera med en Docker Daemon. I det här fallet är värdarens Docker Daemon. RUN
uttalandet i den här filen skapar också en UNIX-användargrupp med UID 999 och lägger till användaren Jenkins till den. Varför exakt detta är nödvändigt beskrivs i det ytterligare kapitlet. Med den här bilden kan vi köra en Jenkins-server som kan använda Docker-kommandon, men om vi bara kör denna bild kan Docker-klienten som vi installerade inuti bilden inte kommunicera med värdens Docker Daemon. Dessa två komponenter kommunicerar via en UNIX Socket /var/run/docker.sock
. På Unix är detta en fil som allt annat, så vi kan enkelt montera den inuti Jenkins Container. Detta görs med kommandodockaren docker run -v /var/run/docker.sock:/var/run/docker.sock --name jenkins MY_CUSTOM_IMAGE_NAME
. Men den här monterade filen ägs av docker:root
och på grund av detta skapar Dockerfile denna grupp med en välkänd UID och lägger Jenkins-användaren till den. Nu är Jenkins Container verkligen kapabel att köra och använda Docker. Vid produktion bör -v jenkins_home:/var/jenkins_home
också innehålla -v jenkins_home:/var/jenkins_home
att säkerhetskopiera Jenkins_home-katalogen och naturligtvis en portkartläggning för åtkomst till servern via nätverket.