Иногда мы хотим Docker внутри докера. Например: Трубопровод CI, динамические агенты, основанные на Docker Jenkins для ваших трубопроводов CI/CD, Sandboxed Exandment или экспериментальные рабочие станции.
Вот три метода. (1) и (2) должны быть обеспечены, поскольку у них есть больше привилегий над вашим демоном докера. Вы можете использовать брандмауэр в докере или сделать его без кодом.
Следующие статьи могут помочь вам:
Добавление брандмауэра в докер
Манес Шривастава · Июл 4 · 2 мин читать
Почему хакерская первая любовь ‘a docker контейнер? Взломать докер
Манаша Srivastava · 4 июня 20 · 21 мин прочитать
и
Новый тип докера: Безтон + безопаснее: для каждого пользователя Docker.
Манаша Srivastava · 1 июня 20 · 9 мин прочитано
В 3 методе мы будем использовать sysbox.
Метод 1: Докер в Docker с использованием [/var/run/docker.sock]
Если вы находитесь на одном хозяине, где работает Docker Daemon, вы можете использовать/var/run/docker.sock для управления контейнерами.
Чтобы запустить докер внутри докера, все, что вам нужно сделать, просто запустите Docker с Docker docker docker.sock в качестве объема.
docker run -v /var/run/docker.sock:/var/run/docker.sock \ -ti docker
Теперь, изнутри контейнера, вы должны иметь возможность выполнить команды Docker для создания и нажатия изображений в реестр.
Начните Docker Container в интерактивном режиме, монтажем Docker.Sock как громкость. Мы будем использовать официальный документ докера.
docker run -v /var/run/docker.sock:/var/run/docker.sock -ti docker #Inside Container docker pull ubuntu #When you list the docker images, you should see the ubuntu image along with other docker images in your host VM docker images # Now create a Dockerfile inside test directory and RUN DOCKER FILE docker build -t test-image .
Метод 2: Докер в Докере, используя Dind
Примечание. Это требует, чтобы ваш контейнер был запущен в привилегированном режиме.
docker run --privileged -d --name dind-test docker:dind docker exec -it dind-test /bin/sh docker pull ubuntu docker images mkdir test && cd test vi Dockerfile #Create Docker file and then run docker build -t test-image
Метод 1 и 2 имеет некоторые недостатки с точки зрения безопасности из-за запуска базовых контейнеров в привилегированном режиме. NestyBox пытается решить эту проблему, имея Sysbox Docker Runtime. Однако с реализацией брандмауэра вы можете получить уровень безопасности. Проверьте мою выше статью.
(1) Получите SysBox CE Community Edition на основе Sysbox с открытым исходным кодом.
nestybox/sysbox.
Открытый источник, следующее поколение «runc», которое дает утепые контейнеры для выполнения рабочих нагрузок, таких как SystemD, Docker, Kubernetes, как VMS.
Введение
Sysbox это время выполнения контейнера с открытым исходным кодом (AKA RUNC), изначально разработанная Stackybox. , что усиливает контейнеры в двух ключевых условиях:
Улучшает изоляцию контейнеров: SysBox всегда включает в себя пространство имен пользователей Linux на контейнерах (I.E., root User в контейнере имеет нулевые привилегии на хосте), скрывает информацию хоста внутри контейнера, блокирует начальные крепления контейнера и многое другое.
Позволяет контейнерам действовать как VMS : С Sysbox контейнеры становятся способными запустить большинство рабочих нагрузок, которые работают в физических хостах или виртуальных машинах, включая Systemd, Docker, Kubernetes и более, без проблем и с надлежащей изоляцией (без привилегированных контейнеров, без сложных изображений, без сложных точек, без особых изображений крепления и т. Д.)
SYSBOX — это «runc» на основе OCI, означает, что вы обычно используете Docker и Kubernetes для развертывания этих улучшенных контейнеров (на самом деле Sysbox работает под крышками, вы не взаимодействуете с ним напрямую). Таким образом нет необходимости изучать новые инструменты или изменить существующий контейнер …
На момент написания статьи Поддерживаемые дистрибутивы являются: Ubuntu Bionic (18.04), Ubuntu Focal (20.04), Debian Buster (10), Debian Bullseye (11), Fedora 31, Fedora 32, Centos 8
Установка:
git clone --recursive git@github.com:nestybox/sysbox.git make sysbox sudo make install #Once Sysbox is installed, you start it with: sudo ./scr/sysbox #Configuring Docker sudo ./scr/docker-cfg --sysbox-runtime=enable
(2) Используйте SYSBOX
docker run --runtime=sysbox-runc --name sysbox-dind -d docker:dind docker exec -it sysbox-dind /bin/sh
Поздравляю:)
Вот a хорошая статья
Далее: Я был одним из участников на этой встрече. Вы можете найти основатель CO, говоря о Sysbox https://bluejeans.com/s/qq_isjrnoag 20,05 минут
Нажмите здесь, чтобы присоединиться к моей команде
Оригинал: «https://dev.to/manishfoodtechs/docker-inside-docker-57fj»