Run one or many Docker daemons inside Docker as containers
50K+
For a complete list of published images, see the list of tags on Docker Hub. For each major release, the specific Docker Enterprise bugfix versions are also available and can be found via Docker Hub.
ce, latest (Dockerfile.ce)ce-systemd (Dockerfile.ce-systemd)ce-systemd-ssh (Dockerfile.ce-systemd-ssh)
The images are published to Docker Hub so you do not need to build them unless you want to.
Note: the images build on each other. The ce tag is its own build and has no other dependencies other than ubuntu:20.04. The ce-systemd tag builds from ce. The ce-systemd-ssh tag builds from ce-systemd. So if you want to build ce-systemd-ssh, you should first build ce, then ce-systemd, and finally ce-systemd-ssh. This process is to re-use layers. I also recommend using docker build buildx as just docker build fails to re-use some layers that have no changed.
Docker CE (stable)
docker buildx build \
--pull \
--progress plain \
--build-arg DOCKER_VER="$(wget -q -O - https://api.github.com/repos/moby/moby/releases/latest | jq -r .tag_name)" \
--build-arg BUILDX_VER="$(wget -q -O - https://api.github.com/repos/docker/buildx/releases | jq -r 'map(select(.prerelease)) | first | .tag_name')" \
-f Dockerfile.ce \
-t mbentley/docker-in-docker:ce \
.
Docker CE (with systemd)
docker buildx build \
-f Dockerfile.ce-systemd \
-t mbentley/docker-in-docker:ce-systemd \
.
Docker CE (with systemd + ssh)
docker buildx build \
-f Dockerfile.ce-systemd-ssh \
-t mbentley/docker-in-docker:ce-systemd-ssh \
.
1000 - TCP connection to a single Docker engine (or whatever you specify)1001, 1002, 1003 - TCP connection to Docker engines for Swarm mode (or whatever you specify)Start engine
docker run -d \
--init \
--name docker \
--hostname docker \
--restart unless-stopped \
--privileged \
-p 127.0.0.1:1000:2375 \
-v /lib/modules:/lib/modules:ro \
-v docker-root:/root \
-v docker-etc-docker:/etc/docker \
-v docker-var-lib-docker:/var/lib/docker \
-v docker-etc-cni:/etc/cni \
-v docker-opt-cni:/opt/cni \
-v docker-usr-libexec-kubernetes:/usr/libexec/kubernetes \
-v docker-var-lib-kubelet:/var/lib/kubelet \
-v docker-var-log:/var/log \
--tmpfs /run \
-e MOUNT_PROPAGATION="/" \
mbentley/docker-in-docker \
dockerd -s overlay2 -H unix:///var/run/docker.sock -H tcp://0.0.0.0:2375
Communicate with that engine
docker -H tcp://localhost:1000 info
Check version
docker -H tcp://localhost:1000 version
Destroy the Engine
docker kill docker
docker rm docker
docker volume rm docker
Create 3 engines
for ENGINE_NUM in {1..3}
do
docker run -d \
--init \
--name docker${ENGINE_NUM} \
--hostname docker${ENGINE_NUM} \
--restart unless-stopped \
--privileged \
-p 127.0.0.1:100${ENGINE_NUM}:2375 \
-v /lib/modules:/lib/modules:ro \
-v docker${ENGINE_NUM}-root:/root \
-v docker${ENGINE_NUM}-var-lib-docker:/var/lib/docker \
-v docker${ENGINE_NUM}-etc-docker:/etc/docker \
-v docker${ENGINE_NUM}-etc-cni:/etc/cni \
-v docker${ENGINE_NUM}-opt-cni:/opt/cni \
-v docker${ENGINE_NUM}-usr-libexec-kubernetes:/usr/libexec/kubernetes \
-v docker${ENGINE_NUM}-var-lib-kubelet:/var/lib/kubelet \
-v docker${ENGINE_NUM}-var-log:/var/log \
--tmpfs /run \
-e MOUNT_PROPAGATION="/" \
mbentley/docker-in-docker \
dockerd -s overlay2 -H unix:///var/run/docker.sock -H tcp://0.0.0.0:2375
done
Create a new Swarm
docker -H tcp://localhost:1001 swarm init
Get the worker join token and command
TOKEN=$(docker -H tcp://localhost:1001 swarm join-token worker -q)
JOIN_COMMAND="swarm join --token ${TOKEN} $(docker container inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' docker1):2377"
Join engine 2
docker -H tcp://localhost:1002 ${JOIN_COMMAND}
Join engine 3
docker -H tcp://localhost:1003 ${JOIN_COMMAND}
Check status
docker -H tcp://localhost:1001 node ls
Destroy Swarm cluster
docker kill docker1 docker2 docker3
docker rm docker1 docker2 docker3
docker volume rm docker1 docker2 docker3
Content type
Image
Digest
sha256:3bf00547a…
Size
154.4 MB
Last updated
1 day ago
docker pull mbentley/docker-in-docker