Instalar Jupyter Lab en Docker

En este post vamos a ver como instalar Jupyter Notebook en docker. Previamente tenemos que tener docker y docker-compose instalado.

El proyecto lo tenemos también en GitHub para que podáis hacer la descarga:

https://github.com/Pistatxos/jupyterDocker

Vamos a ver 2 pasos:

  • Método simple: Instalación y uso rápido.
  • Método personalizado: Añadimos propia contraseña e instalación de requirements previos para tener las librerías preinstaladas 😉

Instalando en docker simple:

docker run -d --name=jupyterlab -p 8888:8888 -v <ruta_local>:/home/jovyan/work jupyter/datascience-notebook

Instalando en docker-compose:

version: '3'
services:
  jupyterlab:
    image: jupyter/datascience-notebook
    container_name: jupyterlab
    ports:
      - 8888:8888
    volumes:
      - <ruta_local>:/home/jovyan/work

Instalando en docker-compose personalizado:

services:
  jupyterlab:
    build: ./infrastructure
    container_name: jupyterlab
    ports:
      - 8888:8888
    volumes:
      - ./datos:/home/jovyan/datos  # Monta el directorio de datos en un subdirectorio separado
    environment:
      - JUPYTER_ENABLE_LAB=yes
      - JUPYTER_TOKEN=AhB5ImyU2prh6vYJ5V1Kd # Token personalizado
      - variableEnv1=ejemplo1 # Variable de entorno extras ejemplo
    networks:
      - shared_network # Añadir vuestra red

networks:
  shared_network:
    external: true

¿Qué tenemos y necesitamos en el personalizado?

Añadimos una carpeta /datos para almacenar los notebook que queramos o archivos varios.
Añadimos una carpeta /infrastructure donde añadimos el Dockerfile y el requirements.txt

El Dockerfile que necesitamos añadir en la carpeta infrastructure:

# Usa la imagen base de Jupyter
FROM jupyter/datascience-notebook

# Establece el directorio de trabajo en el contenedor
WORKDIR /home/jovyan

# Copia el archivo requirements.txt al contenedor
COPY requirements.txt .

# Instala las dependencias desde el archivo requirements.txt
RUN pip install --no-cache-dir -r requirements.txt

El requirements.txt, datos de ejemplo, esto ya es personal:

# Data Manipulation
pandas
numpy

# HTTP Requests
requests

# Visualization
matplotlib
plotly

# Database connection
SQLAlchemy
psycopg2-binary

Para arrancar el docker-compose:

docker-compose up (ejecuta desde la terminal y ves todos los LOG)
docker-compose up -d (para ejecutar en segundo plano sin terminal)

Acceso web

Una vez que arrancamos el docker podremos acceder via el puerto elegido, en este caso el 8888.
Desde el navegador podremos acceder tipo:

localhost:8888
ip_del_server:8888

Nos encontraremos con la ventana:

Como sabemos el token?

Si has puesto tu token (contraseña) personalizada es ponerla y a funcionar.
En caso de no haberla puesto podemos hacer lo siguiente:

  • Si has ejecutado desde la terminal y estás viendo los LOG podrás ver el token. Se introduce y a funcionar. Y si has puesto el token personalizado lo escribes directamente.
  • Si has ejecutado sin ver la terminal. Primero podemos buscar el contendor con el comando:
sudo docker ps

Esto nos mostrará todo lo que se está ejecutando. Del contenedor Jupyter copiaremos el ID y con los comandos:

sudo docker exec 161a3e50a416 jupyter server list
o bien
sudo docker logs nombre_contenedor

Nos devolverá una línea parecida a esta:

http://161a3e50a416:8888/?token=313497f807329bc1fa63a4ff4d63263a511352f42ea581a2 :: /home/jovyan

Introducimos el token y a funcionar!

Espero que os sea de ayuda.

Un saludo!

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Warning: Undefined array key "rerror" in /volume1/web/WebTomoNota/wp-content/plugins/wp-recaptcha-bp/recaptcha.php on line 300 Call Stack: 0.0002 361648 1. {main}() /volume1/web/WebTomoNota/index.php:0 0.0003 362888 2. require('/volume1/web/WebTomoNota/wp-blog-header.php') /volume1/web/WebTomoNota/index.php:17 0.5371 14462800 3. require_once('/volume1/web/WebTomoNota/wp-includes/template-loader.php') /volume1/web/WebTomoNota/wp-blog-header.php:19 0.5473 14744896 4. include('/volume1/web/WebTomoNota/wp-content/themes/yuki/index.php') /volume1/web/WebTomoNota/wp-includes/template-loader.php:106 2.7930 19109952 5. yuki_do_elementor_location($elementor_location = 'single', $template_part = 'template-parts/special', $name = 'single') /volume1/web/WebTomoNota/wp-content/themes/yuki/index.php:20 2.7930 19109952 6. get_template_part($slug = 'template-parts/special', $name = 'single', $args = ???) /volume1/web/WebTomoNota/wp-content/themes/yuki/inc/helpers.php:34 2.7930 19110528 7. locate_template($template_names = [0 => 'template-parts/special-single.php', 1 => 'template-parts/special.php'], $load = TRUE, $load_once = FALSE, $args = []) /volume1/web/WebTomoNota/wp-includes/general-template.php:206 2.7931 19110640 8. load_template($_template_file = '/volume1/web/WebTomoNota/wp-content/themes/yuki/template-parts/special-single.php', $load_once = FALSE, $args = []) /volume1/web/WebTomoNota/wp-includes/template.php:745 2.7933 19115760 9. require('/volume1/web/WebTomoNota/wp-content/themes/yuki/template-parts/special-single.php') /volume1/web/WebTomoNota/wp-includes/template.php:812 2.8354 19135304 10. do_action($hook_name = 'yuki_action_after_single_post') /volume1/web/WebTomoNota/wp-content/themes/yuki/template-parts/special-single.php:58 2.8354 19135680 11. WP_Hook->do_action($args = [0 => '']) /volume1/web/WebTomoNota/wp-includes/plugin.php:517 2.8354 19135680 12. WP_Hook->apply_filters($value = '', $args = [0 => '']) /volume1/web/WebTomoNota/wp-includes/class-wp-hook.php:348 2.9192 19253272 13. yuki_show_post_comments('') /volume1/web/WebTomoNota/wp-includes/class-wp-hook.php:324 2.9194 19253272 14. comments_template($file = ???, $separate_comments = ???) /volume1/web/WebTomoNota/wp-content/themes/yuki/inc/template-functions.php:354 2.9213 19268760 15. require('/volume1/web/WebTomoNota/wp-content/themes/yuki/comments.php') /volume1/web/WebTomoNota/wp-includes/comment-template.php:1631 2.9214 19268760 16. comment_form($args = ['class_form' => 'comment-form yuki-form form-default'], $post = ???) /volume1/web/WebTomoNota/wp-content/themes/yuki/comments.php:66 2.9237 19280480 17. do_action($hook_name = 'comment_form', ...$arg = variadic(1181)) /volume1/web/WebTomoNota/wp-includes/comment-template.php:2896 2.9237 19280856 18. WP_Hook->do_action($args = [0 => 1181]) /volume1/web/WebTomoNota/wp-includes/plugin.php:517 2.9237 19280856 19. WP_Hook->apply_filters($value = '', $args = [0 => 1181]) /volume1/web/WebTomoNota/wp-includes/class-wp-hook.php:348 2.9239 19281608 20. ReCAPTCHAPlugin->show_recaptcha_in_comments(1181) /volume1/web/WebTomoNota/wp-includes/class-wp-hook.php:324