Docker
Докер в Докере
Поиск…
Контейнер 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 и, конечно же, сопоставления портов для доступа к серверу по сети.