Рубрики
Uncategorized

Докер внутри докера

Иногда мы хотим Docker внутри докера. Например: Трубопровод CI, Дженкинс Docker на основе динамики … Помечено с Docker, Linux, DevOps, Nowizers.

Иногда мы хотим 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»