Repository: stefanproell/jupyter-notebook-docker-compose Branch: master Commit: e76c5baf72f8 Files: 4 Total size: 6.4 KB Directory structure: gitextract_0pky7meu/ ├── README.md ├── docker-compose.yml ├── generate_token.py └── jupyter.pem ================================================ FILE CONTENTS ================================================ ================================================ FILE: README.md ================================================ # Jupyter with Docker Compose This repository contains a simple docker-compose definition for launching the popular Jupyter Data Science Notebook. You can define a password with the script ```generate_token.py -p S-E-C-R-E-T``` and generate SSL certificates as described below. ## Control the container: * ```docker-compose up``` mounts the directory and starts the container * ```docker-compose down``` destroys the container ## The compose file: docker-compose.yml ```bash version: '3' services: datascience-notebook: image: jupyter/datascience-notebook volumes: - ${LOCAL_WORKING_DIR}:/home/jovyan/work - ${LOCAL_DATASETS}:/home/jovyan/work/datasets - ${LOCAL_MODULES}:/home/jovyan/work/modules - ${LOCAL_SSL_CERTS}:/etc/ssl/notebook ports: - ${PORT}:8888 container_name: jupyter_notebook command: "start-notebook.sh \ --NotebookApp.password=${ACCESS_TOKEN} \ --NotebookApp.certfile=/etc/ssl/notebook/jupyter.pem" ``` ## Example with a custom user ```YAML version: '2' services: datascience-notebook: image: jupyter/base-notebook:latest volumes: - /tmp/jupyter_test_dir:/home/docker_worker/work ports: - 8891:8888 command: "start-notebook.sh" user: root environment: NB_USER: docker_worker NB_UID: 1008 NB_GID: 1011 CHOWN_HOME: 'yes' CHOWN_HOME_OPTS: -R ``` ## The environment file .env ```bash # Define a local data directory # Set permissions for the container: # sudo chown -R 1000 ${LOCAL_WORKING_DIR} LOCAL_WORKING_DIR=/data/jupyter/notebooks # Generate an access token like this # import IPython as IPython # hash = IPython.lib.passwd("S-E-C-R-E-T") # print(hash) # You can use the script generate_token.py ACCESS_TOKEN=sha1:d4c78fe19cb5:0c8f830971d52da9d74b9985a8b87a2b80fc6e6a # Host port PORT=8888 # Provide data sets LOCAL_DATASETS=/data/jupyter/datasets # Provide local modules LOCAL_MODULES=/home/git/python_modules # SSL # Generate cert like this: # openssl req -x509 -nodes -newkey rsa:2048 -keyout jupyter.pem -out jupyter.pem # Copy the jupyter.pem file into the location below. LOCAL_SSL_CERTS=/opt/ssl-certs/jupyter ``` # Version Conflicts Make sure to have the latest versions installed. You can use the Notebook Browser interface. ```python pip install -U jupyter ``` ================================================ FILE: docker-compose.yml ================================================ version: '3' services: datascience-notebook: image: jupyter/datascience-notebook volumes: - ${LOCAL_WORKING_DIR}:/home/jovyan/work - ${LOCAL_DATASETS}:/home/jovyan/work/datasets - ${LOCAL_MODULES}:/home/jovyan/work/modules - ${LOCAL_SSL_CERTS}:/etc/ssl/notebook ports: - ${PORT}:8888 container_name: jupyter_notebook command: "start-notebook.sh \ --NotebookApp.password=${ACCESS_TOKEN} \ --NotebookApp.certfile=/etc/ssl/notebook/jupyter.pem" ================================================ FILE: generate_token.py ================================================ #!/usr/bin/env sh import IPython as IPython if __name__ == "__main__": print("Generate a access token") from argparse import ArgumentParser parser = ArgumentParser() parser.add_argument("-p", "--password", dest="password", help="The password you want to use for authentication.", required=True) args = parser.parse_args() print("\nCopy this line into the .env file:\n") hash = IPython.lib.passwd(args.password) print("ACCESS_TOKEN=" + hash) ================================================ FILE: jupyter.pem ================================================ -----BEGIN PRIVATE KEY----- MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDtGlWjn9Sw2aV0 32H7le8Ra2cQRx5cS/m5R8HL0Tl/JlYwLBXNZcsUmnqOKCxJFilkBcj4BIAic5ZR b1AyTPn1RERf6SbFLZGBUnYcLQDL6Z6qEILe0H5G30yFjdvjUVnhYPUsWW6H1tUF EhtuMduj2o+2YUaiE6UQAD5EfX09jzGcwNx/Hj1XXvpRSfDBQWlWxkKOm6TqGoXH FBAIGAH1gKehotGDd+YluOFp9qk8G2e2Tvpg7JQfaSoIT1ViHwg+0XSQVoVRNqWK XQ+MD+dCcwbcL7kAbnLW1x1a4ym9as5t/iDUjVldh70coJ9uaa1CHklAZzheH6Xc up6cvqb5AgMBAAECggEBANa/iV1fwCZFmsRWJsrVq+hdHMXzhB4YeiBES9SstaTi NiH/a+fTELKij+n9nM69kdOUIcfxW5TYmAc+CKbmbWal5D/yTjk84pL8+xjd8eC+ wgRKXB4vPJA4Y3h7WfNzlTK6vJTkk2XZQKsNEWcnJUYtCQko5e6aWGA7uCoUdsCv GPVIgxFpSuAzAVJQVDhcAIVYYeXR8+XF5VDGme0IdN1oOOaNDYvzboBZhWwjIM5c K309EeY2599Q6HrFK7/eaRLGSoFjQu5WJnQ+CCHp3Awx+5Btc7sYhZHEwi1Qrv+v RKFLpcICs70pD9/5/QK8PQ57hjfIJdVCr6YkU80EQuECgYEA+BIGzoqTvtrxoTfp opGZ933fE8f678BEm6WxfhfptZa28M4IJa2wVTfOMp2d8yf03hEhQ5/wc6T2kXmz PDUq90m2P9dpwUIpQcOH3KGMqtvQ1FS2VikxSm+1u0IzDEWy6Cu1n0OiaAft0aEz w0MNqVbElK5PrSRZvnfwISwcD2UCgYEA9K6PVsGAaNRMAxZZoHr0cSAjYl1puqi8 mi9pIZLgM8vjibhHRQWavJ596iTedMa7N+B3/i1YXD6MRETRq3zVqlvvZA+qSWmo 7HTpwsHcLv8XZ0ghvYumxGMv5EhgFc53E5WLkw9x8YiKbrDRhoW7vlDn8pMd6UYA gKIPFMv0UgUCgYBbX+h587lwN52BUOMSKqeX7hlZY/Qek6ex3Vp/o7dGV/mSwZFm r4+gFCozorMnebRMh+rEygj7z+uysi0/JCZraA9lfKdLtF8WBjvpHOh/lvBZBcsT +aBaVsON8lhzUMkRk+gWfgc4YpNLACHc7rn9giRuz7YxhI46BlvBHEpJsQKBgBuz 186+wcccoi6HTUZ6JUrZlKgCY4IasJ/UVlbSxkeXAgAJuSf7ZnWMjD0CR515EqFU 7MD+aU6oVkE0eXis/ZP4LLZrf6AoMlPzOLQwNrmrb/7lj8xiD1OU10tFVnuhkKHL AK55xTDPgLzfkBlm8satalVwiqZqoovtzT9RiCvxAoGAJpqDya0YvQweh/HMz4O0 sdOztP0FL/4R6uCx7g2WJCVuS1mT0QH6nTsuvI83Lka1a8g0zZmSBYubaEltwmiY ZVX0j7kox7fdBDgPGuxnuCFdniChwTGxcQEPmkR9bzbH2ARqs3h+INjQNIXbfY1p 6naHb5lAGVSU06CDnKFQm2c= -----END PRIVATE KEY----- -----BEGIN CERTIFICATE----- MIID3TCCAsWgAwIBAgIJAKZ91kk1bQIJMA0GCSqGSIb3DQEBCwUAMIGEMQswCQYD VQQGEwJBVDEOMAwGA1UECAwFVGlyb2wxEjAQBgNVBAcMCUlubnNicnVjazERMA8G A1UECgwIQ3JvcHN0ZXIxDDAKBgNVBAsMA0RldjESMBAGA1UEAwwJMTI3LjAuMC4x MRwwGgYJKoZIhvcNAQkBFg1ub25lQHRlc3Qub3JnMB4XDTE4MDIxMzA4Mzg1M1oX DTE4MDMxNTA4Mzg1M1owgYQxCzAJBgNVBAYTAkFUMQ4wDAYDVQQIDAVUaXJvbDES MBAGA1UEBwwJSW5uc2JydWNrMREwDwYDVQQKDAhDcm9wc3RlcjEMMAoGA1UECwwD RGV2MRIwEAYDVQQDDAkxMjcuMC4wLjExHDAaBgkqhkiG9w0BCQEWDW5vbmVAdGVz dC5vcmcwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDtGlWjn9Sw2aV0 32H7le8Ra2cQRx5cS/m5R8HL0Tl/JlYwLBXNZcsUmnqOKCxJFilkBcj4BIAic5ZR b1AyTPn1RERf6SbFLZGBUnYcLQDL6Z6qEILe0H5G30yFjdvjUVnhYPUsWW6H1tUF EhtuMduj2o+2YUaiE6UQAD5EfX09jzGcwNx/Hj1XXvpRSfDBQWlWxkKOm6TqGoXH FBAIGAH1gKehotGDd+YluOFp9qk8G2e2Tvpg7JQfaSoIT1ViHwg+0XSQVoVRNqWK XQ+MD+dCcwbcL7kAbnLW1x1a4ym9as5t/iDUjVldh70coJ9uaa1CHklAZzheH6Xc up6cvqb5AgMBAAGjUDBOMB0GA1UdDgQWBBS0HEgRO22ECtLckZp+LP+0nNg8SzAf BgNVHSMEGDAWgBS0HEgRO22ECtLckZp+LP+0nNg8SzAMBgNVHRMEBTADAQH/MA0G CSqGSIb3DQEBCwUAA4IBAQCtdBrbmYNZCw/zpxe81VHH5be3XGw/VFOmTTDdWi6O q9RHoHpwDWsJd1T0h/o5wzkpIFGADPQCtR7SGktoUS40GUmaiQXQijedGSMg56YN f/NwLm/zf93i3gbnK8l/zNb7BtEPzR/46nezlWRxs57Iw2Kw2bFQA8SKjlbqllhf KlDgu8QaFxnoaIuMcZKDIGlEeO0wnEzqjDF438aAt/ft0SPs7ae6PokR2YhMO2SK 0d9IrVqF74lls3Kmddkt8mIbk77B4eRtmB28M/hMVUcun3598qfK77OsK+bm2AEc krn3a6vyCg6oV/i4icbIHHLNXvHUSoZ20h43NPZ/3eW5 -----END CERTIFICATE-----