# How to Create Notebooks Notebooks are a web-based Jupyter IDE with shared persistent storage for long-term development and inter-notebook collaboration, backed by accelerated compute. When creating a new notebook, you can pick from a list of recommended templates and [machine types](https://docs.digitalocean.com/products/paperspace/machines/details/pricing/index.html.md). You can also select the **All** option to view an expansive list of templates. You can use these runtime tiles or can create your own runtimes. In the **Select a machine** section, you select the machine type for your new notebook. ![GPU selection drop-down menu showing available free and paid GPU machines with pricing and specs.](https://docs.digitalocean.com/screenshots/paperspace/create-machine-notebook.80be463639435e0244c01d31b3d7226609ac7509b38696235cd454e767a3ad61.gif) You can swap out your current machine for a different machine at any time with Gradient notebooks. ## Selecting a Machine When Creating a Notebook When creating a new notebook, the **Select a machine** section of the notebook creates a workflow that provides a list of CPU, GPU and IPU-backed machines available for use. If a machine is available for use, it is listed under the **Available** heading. If a machine is out of capacity, then no instances available for use. If your notebook is pending, then it is in queue for the next available free machine. If you need immediate access to a machine, consider upgrading to a paid machine type. ## Creating a Custom Docker Image to Use with Notebooks To [create a custom notebook](https://docs.digitalocean.com/products/paperspace/notebooks/getting-started/create-jupyter-notebook/index.html.md), you may need to create a new image. It is recommended to use [Docker](https://www.docker.com) to get the container image from the local machine to Paperspace. `jupyter` is run on port `8888` and it must allow connections from ip address `0.0.0.0`. If you are running a `jupyter notebook`, you should include the following flags in the **Command** field: ``` --no-browser --NotebookApp.trust_xheaders=True --NotebookApp.disable_check_xsrf=False --NotebookApp.allow_remote_access=True --NotebookApp.allow_origin='*' ``` If you are running `jupyter lab`, you should run these flags in the **Command** field instead: ``` --no-browser --LabApp.trust_xheaders=True --LabApp.disable_check_xsrf=False --LabApp.allow_remote_access=True --LabApp.allow_origin='*' ``` ## Custom Container Reference The following fields are available in the **Container** section of **Advanced options** when creating a new notebook. | Field | Required | Description | |---|---|---| | Container Name | true | Path and tags of image from DockerHub or NVIDIA Container Registry. For example `ufoym/deepo:all-jupyter-py36`. | | Registry Username | false | Private container registry username. Can be left blank for public images. | | Registry Password | false | Private container registry password. Can be left blank for public images. Secrets may be used in this field using the substitution syntax `secret:`. | | Command | false | Must be Jupyter compatible. If left blank, defaults to `jupyter notebook --allow-root --ip=0.0.0.0 --no-browser --NotebookApp.trust_xheaders=True --NotebookApp.disable_check_xsrf=False --NotebookApp.allow_remote_access=True --NotebookApp.allow_origin='*'`. | | Container User | false | Optional user. Defaults to ‘root’ if left blank. | **Note**: When using a container from [NVIDIA](https://catalog.ngc.nvidia.com/), use a username (`$oauthtoken`) and password like an API key when submitting the custom container reference. You can create a NVIDIA API key by following this [API key setup](https://ngc.nvidia.com/setup/api-key). You need to be signed in to create an API key.