Поиск…


Контейнер Jenkins CI с использованием Docker

В этой главе описывается, как настроить контейнер Docker с Jenkins внутри, который способен отправлять команды Docker на установку Docker (Docker Daemon) хоста. Эффективно использование Docker в Docker. Чтобы достичь этого, нам нужно создать пользовательское изображение Docker Image, основанное на произвольной версии официального Jenkins Docker Image. Файл Dockerfile (Инструкция по созданию образа) выглядит следующим образом:

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

Этот Dockerfile создает изображение, содержащее двоичные файлы клиента Docker, этот клиент используется для связи с Docker Daemon. В этом случае Деккер-демон Хозяина. Оператор RUN в этом файле также создает UNIX-группу с UID 999 и добавляет к ней пользователя Jenkins. Почему именно это необходимо, описано в следующей главе. С помощью этого изображения мы можем запустить сервер Jenkins, который может использовать команды Docker, но если мы просто запустим это изображение, клиент Docker, который мы установили внутри изображения, не сможет связаться с Docker Daemon Host. Эти два компонента взаимодействуют через UNIX Socket /var/run/docker.sock . В Unix это файл, как и все остальное, поэтому мы можем легко установить его внутри контейнера Jenkins. Это делается с помощью команды docker run -v /var/run/docker.sock:/var/run/docker.sock --name jenkins MY_CUSTOM_IMAGE_NAME . Но этот смонтированный файл принадлежит docker:root и из-за этого Dockerfile создает эту группу с хорошо известным UID и добавляет к ней пользователя Jenkins. Теперь Jenkins Container действительно способен работать и использовать Docker. В процессе выполнения команда запуска также должна содержать -v jenkins_home:/var/jenkins_home для резервного копирования каталога Jenkins_home и, конечно же, сопоставления портов для доступа к серверу по сети.



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow