совместное использование docker.sock или docker в докере (dind)

Мы используем кластер mesos и jenkins для непрерывного рабочего процесса интеграции. Дженкинс настроен с помощью плагина mesos.

Ранее мы создавали образы докеров в контейнерах mesos. Теперь мы переключаемся на контейнеры докеров для создания образов докеров.

Я искал преимущество создания наших образов докеров внутри контейнера докеров с изображением dind, подобным этому «dind-jenkins-slave», найденному на концентраторе докеров.

С dind вы теряете возможности кэширования при совместном использовании docker.sock хоста. И с dind вы также должны указать привилегированный параметр.

В чем недостаток простого совместного использования docker.sock хоста?


person user3806505    schedule 14.05.2015    source источник


Ответы (2)


Я использую подход совместного использования docker.sock. Единственным недостатком, который я вижу, является безопасность — вы можете делать с хостом все, что хотите, когда можете запускать любые контейнеры докеров. Но если вы доверяете людям, которые создают задания или могут контролировать, какие контейнеры докеров с какими параметрами можно запускать из jenkins, то предоставление доступа к основному демону докеров — это простое решение.

person ISanych    schedule 14.05.2015

Это зависит от того, что вы делаете, на самом деле. Чтобы сделать наши задания jenkins по-настоящему изолированными, чтобы мы могли запускать сколько угодно параллельно, мы переключились на DinD. Если вы используете общий хост-сокет, у вас по-прежнему есть только один конфликт демона-порта docker, извлечение / отправка нескольких образов из отдельных заданий и одно задание, полагающееся на образ или сборку, которые также искажаются другим заданием. все проблемы.

Чтобы обойти проблему кэширования, я создаю контейнер DIND и оставляю его. я бегу

docker start -a dindslave || docker run -v ${WORKSPACE}:/data my/dindimage jenkinscommands.sh

Затем jenkins просто записывает свои команды в jenkinscommands.sh и каждый раз перезапускает контейнер. Когда вы удаляете контейнер, вы также удаляете свой кеш, и вы не делите кеши между заданиями, если это то, чего вы хотите... но вам не нужно думать о том, что задания мешают друг другу или следят за тем, чтобы они выполнялись. на том же хосте.

person Paul Becotte    schedule 14.05.2015