Я запускаю Дженкинса в контейнере Docker. Интересно, может ли контейнер Jenkins быть хостом Docker? Я думаю о том, чтобы запустить новый докер-контейнер для каждой сборки интеграционного теста изнутри Jenkins (для запуска баз данных, брокеров сообщений и т. Д.). Таким образом, контейнеры должны быть закрыты после завершения интеграционных испытаний. Есть ли причина избегать запуска док-контейнеров из другого док-контейнера таким образом?
jenkins
docker
docker-dind
Johan
источник
источник
Ответы:
Запуск Docker внутри Docker (aka dind ), по возможности, следует избегать, если это вообще возможно. (Источник предоставлен ниже.) Вместо этого вы хотите настроить способ, с помощью которого ваш главный контейнер будет производить и взаимодействовать с ним. одноуровневыми контейнерами.
Жером Петаццони - автор функции, позволившей Docker запускаться в контейнере Docker, - на самом деле написал сообщение в блоге, в котором говорилось, что не следует этого делать . Описанный им вариант использования соответствует точному сценарию использования OP контейнера Docker CI, который должен запускать задания внутри других контейнеров Docker.
Петаццони перечисляет две причины, по которым Динд мешает:
Из этого поста в блоге он описывает следующую альтернативу:
источник
sudo
когда делать так? Спасибоdocker
группу:sudo usermod -aG docker $USER
. Вам нужно будет сделать это после этого./var/run/docker.sock
когда вы запускаете Docker для Mac на вашем MacOS-компьютере./var/run/docker.sock
Ранее я отвечал на аналогичный вопрос о том, как запустить Docker-контейнер внутри Docker .
Таким образом, запуск Docker внутри Docker многие считали хорошим решением для такого рода проблем. Теперь, тенденция состоит в том, чтобы использовать «родственные» контейнеры вместо этого. Смотрите ответ @predmijat на этой странице для получения дополнительной информации.
источник
Можно запускать Docker-in-Docker (DinD), и фактически у Docker (компании) есть официальный образ DinD для этого.
Однако предостережение заключается в том, что для этого требуется привилегированный контейнер, который, в зависимости от ваших потребностей в области безопасности, не может быть жизнеспособной альтернативой.
Альтернативное решение запуска Docker с использованием одноуровневых контейнеров (также называемых Docker-out-of-Docker или DooD) не требует привилегированного контейнера, но имеет несколько недостатков, связанных с тем, что вы запускаете контейнер из контекста, который является отличается от того, в котором он запущен (т.е. вы запускаете контейнер из контейнера, но он работает на уровне хоста, а не внутри контейнера).
Я написал блог с описанием плюсов и минусов DinD vs DooD здесь .
Сказав это, Nestybox (стартап, который я только что основал) работает над решением, которое безопасно выполняет настоящий Docker-in-Docker (без использования привилегированных контейнеров). Вы можете проверить это на www.nestybox.com .
источник
Да, мы можем запустить Docker в Docker, нам нужно прикрепить сокет Unix "/var/run/docker.sock", который демон Docker по умолчанию прослушивает как том, к родительскому докеру, используя "-v / var / run" /docker.sock:/var/run/docker.sock». Иногда могут возникнуть проблемы с разрешениями для сокета демона Docker, для которого вы можете написать «sudo chmod 757 /var/run/docker.sock».
А также потребуется запустить докер в привилегированном режиме, поэтому команды будут такими:
sudo chmod 757 /var/run/docker.sock
запуск докера --privileged = true -v /var/run/docker.sock:/var/run/docker.sock -it ...
источник