Docker image from existing directory tree, chroot or nspawn-container

There is a simple way of building a docker image from scratch using existing chroot or nspawn-container.

Here is what needs to be done:

1. Create a Dockerfile

It should add all the directories from the chroot/nspawn-container into the image. As a base for the Dockerfile use the scratch. Here are the contents of the Docker file:

FROM scratch
ADD bin /bin
ADD boot /boot
ADD cgroup /cgroup
ADD dev /dev
ADD etc /etc
ADD home /home
ADD icons /icons
ADD lib /lib
ADD lib64 /lib64
ADD media /media
ADD mnt /mnt
ADD PackageVersion.txt /PackageVersion.txt
ADD proc /proc
ADD root /root
ADD run /run
ADD sbin /sbin
ADD selinux /selinux
ADD srv /srv
ADD sys /sys
ADD tmp /tmp
ADD usr /usr
ADD var /var

2. Keep in mind to change any permissions if needed by your image, since all the directories added as above will be owned by root.

For example:

RUN chown -R mysql:mysql /var/run/mysql 

3. Build the image

cd /my/chroot/dir
sudo docker build -t my_chroot_image ./   

And YES, its that simple!