Creating a reproducible build system for Docker images

As with all new technology, with new advantages comes new challenges and one of the challenges seen as a side effect of Docker’s popularity is that of build sanitization. This is mostly because of the fact that Docker’s build process is effectively equivalent to a shell script in terms of flexibility, meaning that it is extremely flexible and the sky is more or less the limit. While this too is seen as an advantage by many, it does pose a challenge for those within the technical community known as release engineering. Release engineering’s job is make sure that the act of “manufacturing software” is done in a way that is reproducible, auditable, definable, and deliverable. This means that given the same set of inputs, we can deliver the same set of outputs in a standard way that is well defined and can be audited if necessary in order to deliver it predictably.