Specifiying the new docker –init option in the run command basically sets ENTRYPOINT to tini and passes the CMD to it or whatever you specify on the commandline.
For example, without init, CMD becomes pid 1. In this case, /bin/bash
docker run -ti --rm ubuntu:16.04 /bin/bash
root@d740f7360840:/# ps -fA
UID PID PPID C STIME TTY TIME CMD
root 1 0 1 03:30 ? 00:00:00 /bin/bash
root 11 1 0 03:30 ? 00:00:00 ps -fA
With –init, tini (/dev/init) becomes pid 1
docker run -ti --init --rm ubuntu:16.04 /bin/bash
root@5b5fe6ee71b5:/# ps -fA
UID PID PPID C STIME TTY TIME CMD
root 1 0 1 03:30 ? 00:00:00 /dev/init -- /bin/bash
root 7 1 0 03:30 ? 00:00:00 /bin/bash
root 12 7 0 03:30 ? 00:00:00 ps -fA
tini is a first class init process that can be run as pid 1 correctly. A pid 1 process must reap forked child processes correctly, if it doesn’t then bad things happen like resources get leaked and zombies appear.
This is what you want for applications that fork and haven’t been written with child reaping in mind as normally they would leave this up to the init system. A classic example is java Jenkins applications.