У меня появилась такая задача. Основное приложение codenjoy состоит из компонентов. Каждый компонент-процесс на хостовой машине завернут в Docker. Всеми контейнерами управляет DockerСompose. Один из компонентов - nginx является фасадом, выглядывает наружу, перенаправляя все запросы внутри виртуальной сети созданной DockerCompose.
На сцене появляется новый компонент-процесс, который запускает другие процессы внутри своего Docker управляя им. А раз уж оно само завенрнуто в Docker, то отсюда вывод google('ho to run docker inside docker').
Я понимал что эта идея бредовая и очень пахнет, но мне было интересно как решают подобные проблемы. И решение нашлось. Вовсе не обязательно запускать докер в докере, хоть и можно. Лучше взять докер хостовой машины и дасть доступ к нему изнутри другого докера. Для этого надо подмаунтить вот такую штуковину
/var/run/docker.sock:/var/run/docker.sock:rw
Сделать это можно либо через ключик -v в команде docker run, либо в блоке volumes docker-compose.yml файла.
docker run -v /var/run/docker.sock:/var/run/docker.sock -ti ubuntu bash
curl -sSL https://get.docker.com/ | sh
docker ps
Сам же Dockerfile для запуска из под docker-compose.yml у меня такой
FROM java-workspace as dockerized-java-workspace
USER root
ENV DEBIAN_FRONTEND noninteractive
RUN curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add - \
&& apt-key fingerprint 0EBFCD88 \
&& apt-get -y install software-properties-common \
&& add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian $(dpkg --status tzdata|grep Provides|cut -f2 -d'-') stable" \
&& apt-get -y update \
&& apt-get -y install docker-ce \
&& docker -v
Тут java-workspace наследуется в конечном счете от openjdk:11-jdk, т.к. мне нужна еще java на борту.
Детально можно глянуть в этом коммите.