Ahmad Ammari
Add application files
fab07ce
|
raw
history blame
1.42 kB

Docker

The folder contains all the docker and docker-compose files, as oppossed to having yml and docker files hidden in different places.

Docker-compose for everything

In this project, docker image building, tagging, caching and service orchestration is done by docker-compose. All services (even though some are independent and not related) are in the same docker compose file. When spinning, the specific services required are specified in the docker-compose commands, the rest of the services are ignored.

For example in the ./run_notebook script, to run the jupyter notebook for editing, the build-notebook and run-notebook services are used.

To serve voila through nginx, the build-notebook, voila and nginx services are all used.

Multi-stage builds

As a matter of taste, multi-stage docker images are also used in this project. These allow you to control the size of the final images and delete the intermediate ones only used for building (jupyter/notebook:builder in this case, produced by the build-notebook service).

In this case, there is no benefit since the builder image and the rest are the same size, however, in most real cases, the builder image requires a lot more additional stuff (e.g. download and compilation of external libraries, additional packages, building, testing, ...) which could make it significantly larger than required for production or deployment.