Using a multi-stage build reduces the image size from 1.23GB to 331MB
which means that any node running doccano can now start-up faster.
Additionally, the multi-stage build means that we no longer include
development tools like node or gcc in the production image which reduces
the attack surface of the image.
Also: ignore files generated during application run which enables a
better development experience in Docker with source mounts like
`docker run -p 8080:80 -v $PWD:/doccano -it doccano`.
As per https://github.com/chakki-works/doccano/projects/2#card-16406087,
this change adds a Dockerfile for the project.
The Python distribution used by the image can be specified via a
build-time argument. This enables us in the future to for example run
the tests on a wide variety of Python versions.
In the future, the Dockerfile could be extended to for example leverage
multi-stage builds. In this case, the first stage could run tests,
linter, and so forth and then create a wheel or similar artifact via
setuptools. A second stage in the build can then only include a minimal
set of dependencies to install and run the artifact (e.g. using
python-slim as a base image).