Docker: Persisting User Data
I’m busy putting together a Docker image for a multi-user Jupyter Notebook installation. I am to have an independent login for each of the users and each of them should also have their own storage space. That space should exist elsewhere from on the container though, so that even if the container stops, the data lives on. This should mitigate user rage.

There are number of options for achieving this but I’m simply going to persist the data onto the Docker host.
Adding a Volume
On the host machine you could create a new folder to hold the user content. However, it makes sense to just use /home/. Start your docker container with the -v option which binds a location on the host to a location on the container.
docker run -d -p 80:8000 -v /home/:/home jupyter:latestAdding Users
Now make a shell connection to the container.
docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d6a5ca03a212 jupyter:latest "jupyterhub" 2 minutes ago Up 2 minutes 0.0.0.0:80->8000/tcp frosty_ride
docker exec -t -i d6a5ca03a212 /bin/bashWe’ll be using the mkpasswd command to generate encrypted passwords, so we need to install the whois package.
apt-get update && apt-get install -y whoisNow you can create users.
useradd jupyter -m -p `mkpasswd jupyter` -s /bin/bashIt’s critical that the argument to the -p flag is generated by mkpasswd, otherwise logging in as this user won’t work!
That will create a jupyter folder under /home/ on the container.
ls /homejupyter
It will also add an entry to /etc/passwd.
grep "jupyter" /etc/passwdjupyter:x:1000:1000::/home/jupyter:/bin/bash
If we now exit the shell connection and check the /home/ folder on the host we’ll find that it is where the home folder for the jupyter user is located.
ls /docker-home/jupyter
Done!