How to setup Kaggle Python Docker Image using Docker Desktop for Mac
Tags: docker, jupyter
Published: 2020-05-17 11:01:12

While Kaggle has published a great [guide](https://medium.com/@kaggleteam/how-to-get-started-with-data-science-in-containers-6ed48cb08266) on how to use their [Docker images](https://github.com/Kaggle/docker-python), the instructions for MacOS are slightly outdated and require some modifications to work properly. 

The problem lies in that the guide Kaggle published uses `docker-machine`, but Docker has removed `docker-machine` from the later versions of Docker Desktop. The fix is simple, but it would've saved me 30 minutes of Googling if someone wrote about this problem – so here I am.

This is not a replacement for any of the great guides to setting up Docker for Data Science out there. I still recommend reading Kaggle's guide for a better understanding of the process – I just aim to point out the steps that one can use with the updated Docker Desktop for Mac.

# Instructions

*Updated 17 May 2020*

### Step 1:

Install Docker Desktop for Mac from [here](https://hub.docker.com/editions/community/docker-ce-desktop-mac/). 

### Step 2:

Start up Docker and adjust the VM preferences. This menu can be found by clicking on the Docker menubar icon and selecting "Preferences...".

The recommendation is to increase the CPU count, disk size and memory to allow the VM to better handle data science operations.

### Step 3:

Pull the image you wish to use. You can get the Kaggle Python image by running

```
$ docker pull kaggle/python
```

This step will take a while, as the image is quite large and takes time to download.

### Step 4:

Put these lines in your `.bashrc` or `.zshrc` or whatever equivalent file:

```
# Kaggle Docker shorthand functions
kpython(){
  docker run -v $PWD:/tmp/working -w=/tmp/working --rm -it kaggle/python python "$@"  
}
ikpython() {
  docker run -v $PWD:/tmp/working -w=/tmp/working --rm -it kaggle/python ipython
}
kjupyter() {
  (sleep 3 && open "http://localhost:8888")&
  docker run -v $PWD:/tmp/working -w=/tmp/working -p 8888:8888 --rm -it kaggle/python jupyter notebook --no-browser --ip="0.0.0.0" --notebook-dir=/tmp/working --allow-root
}
```

These shorthand functions allow you to use `kpython` as a replacement for calling `python`, `ikpython` instead of `ipython`, and run `kjupyter` to start a Jupyter Notebook session. These will be done using the specified Docker image, which in this case is `kaggle/python`. Replace the image name if necessary!

The change I've made to these functions is replacing `$(docker-machine ip docker2)` in the original instructions to `localhost`.

## Optional adjustments:

### Default browser where Jupyter Notebook is opened
Running `kjupyter` opens `http://localhost:8888` on your default browser.
If you want it to open in a different browser, add `"<browser app name>"` after `open`. For example, if I wish to open the link in Microsoft Edge instead:

```
kjupyter() {
  (sleep 3 && open "Microsoft Edge" "http://localhost:8888")&
  docker run -v $PWD:/tmp/working -w=/tmp/working -p 8888:8888 --rm -it kaggle/python jupyter notebook --no-browser --ip="0.0.0.0" --notebook-dir=/tmp/working --allow-root
}
```

 If you do not want it to automatically open the link, remove `(sleep 3 && open "Microsoft Edge" "http://localhost:8888")&` from the code. 

### Sleep time
The `kjupyter` function holds for 3 seconds before opening the link to allow the Jupyter Notebook session to start up. However, you may find that your session takes longer/shorter to start up. Simply adjust `sleep 3` to whatever delay you prefer.

# Final notes

I hope these instructions aren't a duplicate of someone else's out there. Hopefully Kaggle updates the guide provided on their GitHub for the updated Docker Desktop and this will no longer be relevant.

Do contact me if there are any problems with the instructions.

# References

[How to get started with data science in containers
](https://medium.com/@kaggleteam/how-to-get-started-with-data-science-in-containers-6ed48cb08266) – Originally written by Jamie Hall and posted by the Kaggle Team. I got the bulk of the instructions from here.
[How to setup a Data Science workflow with Kaggle Python Docker Image on Laptop](https://mathalope.co.uk/2017/08/02/how-to-setup-a-data-science-workflow-with-kaggle-python-docker-image-on-laptop/) – I got the bash functions from this article.