Skip to content

Instantly share code, notes, and snippets.

@danabauer
Created November 12, 2014 15:44
Show Gist options
  • Select an option

  • Save danabauer/7fbedd417ba5200d06e6 to your computer and use it in GitHub Desktop.

Select an option

Save danabauer/7fbedd417ba5200d06e6 to your computer and use it in GitHub Desktop.

tmpnb

![Gitter](https://badges.gitter.im/Join Chat.svg)

Launches "temporary" IPython notebook servers.

⚠️ Hardware assumptions ⚠️

  • Reasonably fast IOPS (SSDs, PCIe cards)
  • Enough CPUs and memory for all the users (mem_limit*pool_size < Available RAM)

Quick start

Get Docker, then:

docker pull jupyter/demo
export TOKEN=$( head -c 30 /dev/urandom | xxd -p )
docker run --net=host -d -e CONFIGPROXY_AUTH_TOKEN=$TOKEN jupyter/configurable-http-proxy --default-target http://127.0.0.1:9999
docker run --net=host -d -e CONFIGPROXY_AUTH_TOKEN=$TOKEN -v /var/run/docker.sock:/docker.sock jupyter/tmpnb

BAM! Visit your host on port 8000 and you have a working tmpnb setup.

Advanced configuration

If you need to set the docker-version or other options, they can be passed to jupyter/tmpnb directly:

docker run --net=host -d -e CONFIGPROXY_AUTH_TOKEN=$TOKEN -v /var/run/docker.sock:/docker.sock jupyter/tmpnb python orchestrate.py --cull-timeout=60 --docker-version="1.13" --command="ipython3 notebook --NotebookApp.base_url={base_path} --ip=0.0.0.0 --port {port}"

Here's a full list of the tmpnb options and their default settings:

tornado.options.define('cull_period', default=600,
help="Interval (s) for culling idle containers."
)
tornado.options.define('cull_timeout', default=3600,
help="Timeout (s) for culling idle containers."
)
tornado.options.define('container_ip', default='127.0.0.1',
help="IP address for containers to bind to"
)
tornado.options.define('container_port', default='8888',
help="Port for containers to bind to"
)
command_default = (
'ipython3 notebook --no-browser'
' --port {port} --ip=0.0.0.0'
' --NotebookApp.base_url=/{base_path}'
' --NotebookApp.tornado_settings=\'{{ \"template_path\": [ \"/srv/ga\", \"/srv/ipython/IPython/html\", \"/srv/ipython/IPython/html/templates\" ] }}\''
)
tornado.options.define('command', default=command_default,
help="command to run when booting the image. A placeholder for base_path should be provided."
)
tornado.options.define('port', default=9999,
help="port for the main server to listen on"
)
tornado.options.define('max_dock_workers', default=2,
help="Maximum number of docker workers"
)
tornado.options.define('mem_limit', default="512m",
help="Limit on Memory, per container"
)
tornado.options.define('cpu_shares', default=None,
help="Limit CPU shares, per container"
)
tornado.options.define('image', default="jupyter/demo",
help="Docker container to spawn for new users. Must be on the system already"
)
tornado.options.define('docker_version', default="1.13",
help="Version of the Docker API to use"
)
tornado.options.define('redirect_uri', default="/tree",
help="URI to redirect users to upon initial notebook launch"
)
tornado.options.define('pool_size', default=128,
help="Capacity for containers on this system. Will be prelaunched at startup."
)
tornado.options.define('pool_name', default=None,
help="Container name fragment used to identity containers that belong to this instance."
)
tornado.options.define('static_files', default=None,
help="Static files to extract from the initial container launch"
)

Development

git clone https://github.com/jupyter/tmpnb.git
cd tmpnb

# Kick off the proxy and run the server.
# Runs on all interfaces on port 8000 by default.
make dev
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment