В прошлый раз я использовал Docker в Docker для runners, нотребуется привилегированный режим
создать файл:
version: '3.7'
services:
runner:
image: gitlab/gitlab-runner:latest
volumes:
- ./config:/etc/gitlab-runner
- ./run:/var/run/
# - /var/run/docker.sock:/var/run/docker.sock
docker:
image: docker:dind
restart: always
privileged: true # <-- security problems
volumes:
- ./run:/var/run/
У меня есть личный ПК. У меня есть команда Gitlab, которой нужно запустить docker build
скрипты docker-compose up
с Gitlab CI. Я действительно хочу ускорить CI. Вот почему я делюсь своимхозяиндокер сбегуны, теперь у них есть кэш Docker (образы и т. д.), и когда на одном этапе создается образ, а на другом требуется, это происходит очень быстро.
У меня та же проблема с Jenkins. Мне нужно разделить хост-докер с рабочими узлами.
В прошлый раз я хотел протестировать новый подход и запустить раннеры с их собственным докером. У меня почти нет 2 важных вещей: - ограничение ресурсов (я хочу разделить 7 из 8 ядер ЦП, 10 из 16 ГБ памяти, некоторые ограничения HDD) - безопасность
Важно добавить: у меня нет скриптов CI, которые требуют GPU, сетевых возможностей, монтирования каких-то устройств и т. д. Они обычно делают простые docker build
и docker push
, иногда мне нужно захватить артефакты с docker cp
, вот и все. Главный вопрос: какзапустить docker в docker без прав root на хост-машине?
Оба режима - совместное использование сокетов или привилегированный режим - создают уязвимости для хост-машин, а виртуальная машина (вроде VirtualBox или чего-то подобного) работает медленно и сложно, к тому же я хочу совместно использовать ресурсы и хочу, чтобы Dockerможетиспользовать 10 из 16 ГБ, но 10 ГБ должны быть свободны, когда он не используется.
У меня возникают некоторые неинформативные ошибки от dind contatiner (до сбоя) при запуске его с обычными привилегиями:
gitlab-runner-docker | mount: permission denied (are you root?)
gitlab-runner-docker | mount: permission denied (are you root?)
gitlab-runner-docker | Could not mount /sys/kernel/security.
gitlab-runner-docker | AppArmor detection and --privileged mode might break.
Какие проблемы у меня будут, если я попробую запустить docker в docker без привилегированного режима? Как это сделать?
решение1
ну, что касается балансировки нагрузки оперативной памяти, я не могу помочь, но вы можете запустить docker в docker (dind) без прав sudo, добавив текущего пользователя в группу docker,
Я не вижу безопасности общих сокетов, поскольку они теряют свою целостность, но я бы рекомендовал создать экземпляр dind с параметром composer с привилегированным параметром: true