Hands-on Machine Learning in Docker
This is the Docker configuration which allows you to run and tweak the book's notebooks without installing any dependencies on your machine!
OK, any except
docker-compose. Well, you may also want
make (but it is only used as thin layer to call a few simple
As stated, the two things you need is
Some general knowledge about
docker infrastructure might be useful (that's an interesting topic on its own) but is not strictly required to just run the notebooks.
Prepare the image (once)
docker directory here and run
make build (or
docker-compose build) to build your docker image. That may take some time but is only required once. Or perhaps a few times after you tweak something in a
After the process is finished you have a
handson-ml image, that will be the base for your experiments. You can confirm that looking on results of
docker images command.
Run the notebooks
make run (or just
docker-compose up) to start the jupyter server inside the container (also named
handson-ml, same as image). Just point your browser to the URL printed on the screen (or just http://localhost:8888 if you enabled password authentication) and you're ready to play with the book's code!
The server runs in the directory containing the notebooks, and the changes you make from the browser will be persisted there.
You can close the server just by pressing
Ctrl-C in terminal window.
Run additional commands in container
make exec (or
docker-compose exec handson-ml bash) while the server is running to run an additional
bash shell inside the
handson-ml container. Now you're inside the environment prepared within the image.
One of the useful things that can be done there would be starting TensorBoard (for example with simple
tb command, see bashrc file).
Another one may be comparing versions of the notebooks using the
nbdiff command if you haven't got
nbdime installed locally (it is way better than plain
diff for notebooks). See Tools for diffing and merging of Jupyter notebooks for more details.
You can see changes you made relative to the version in git using
git diff which is integrated with
You may also try
nbd NOTEBOOK_NAME.ipynb command (custom, see bashrc file) to compare one of your notebooks with its
To be precise, the output will tell you what modifications should be re-played on the manually saved version of the notebook (located in
.ipynb_checkpoints subdirectory) to update it to the current i.e. auto-saved version (given as command's argument - located in working directory).