Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
📃 What it does
This installs Tini in our base images. Tini is actually built into docker now but only exposed as an option for
docker run
. Kubernetes doesn't expose this and so we need to build it into the base image instead.🤔 Why it is important
PID 1 (also known as
init
) is special in Linux and is build into the kernel. It doesn't get default signal handlers and (most importantly) orphaned processes are re-parented as children of init. Consequently init is expected towait
on all its children in order to reap Zombie processes and prevent leaking PIDs.This is where Docker is problematic, as the entrypoint to a docker image becomes PID 1 in its process namespace. For our JVM apps, sbt-native-packager makes the JVM PID 1 by default. However, the JVM is not designed to run as init and doesn't handle signals correctly or reap zombie processes. Tini is a very lightweight process designed to run as init in containers and fork your real entrypoint.
The author of Tini has written a very detailed explanation of the above for the curious reader.