Instalación

Instalar y usar el contenedor de Docker del curso

Para el curso, se preparó una imagen en docker. Docker es un proyecto de código abierto que automatiza el despliegue de aplicaciones dentro de contenedores de software, proporcionando una capa adicional de abstracción y automatización de virtualización de aplicaciones en múltiples sistemas operativos (la definición la copié de la Wikipedia, por supuesto).

Vamos a describir como instalar y probar docker. Después vamos a ver cómo cargar la imagen del curso y generar un contenedor particular. Este contenedor es el que vamos a estar activando cada vez que queramos hacer algún ejercicio del curso.

También es posible utilizar la imagen para crear nuevos contenedores con otras aplicaciones de procesamiento de lenguaje natural, ya que viene con la mayoría de las herramientas preinstaladas que se utilizan.

La imagen que se generó para el curso se encuentra aquí. Esta misma guía se encuentra en la documentación de la imagen. Si quieres saber cómo se construyó la imagen, en este directorio se encuentran los archivos necesarios para generarla (Dockerfile, modulos-python.txt y saludo.txt).

1. Instalar la versión estable de Docker Community Edition (CE)

Para instalar docker vas a requerir darte de alta. No te preocupes, solamente es para abrir un espacio donde puedas publicar y compartir tus imágenes cuando generes algunas. Para la instalación te pide que le des acceso como administrador (algo típico en este tipo de instalaciones).

Sólo sigue las instrucciones. Una vez instalado vamos a probar que la instalación se hizo correctamente. Para esto hay que abrir la aplicación de terminal favorita que tengas (en Windows viene en el menú de docker).

2. Probar la instalación de docker

Vamos a preguntar primero por la versión de docker

$ docker --version

y si nos devuelve algo como

Docker version 18.03.0-ce, build 0520e24

entonces estamos listos para cargar una imagen, aunque sea pequeña. Vamos a cargar la imagen de prueba con el comando:

$ docker pull hello-world

Y carga una imagen que se usa para probar la instalación. Si la imagen se cargo bien entonces se puede crear un contenedor al ejecutar la imagen

$ docker run hello-world

Ahora vamos a cargar una imagen que tenga sentido, por ejemplo una distribución mínima de linux con nada instalado (esta es una base bastante normal para construir imágenes más complejas).

$ docker pull ubuntu

y vamos a ejecutarla en modo interactivo (con el fin que tengamos acceso a la terminal).

$ docker run -it --name mi_ubuntu ubuntu:latest

Acabamos de crear un contenedor llamado mi_ubuntu, basado en la imagen ubuntu:latest y la cual opera en forma interactiva con una terminal (-it). Para salir de la sesión en tu nueva máquina virtual simplemente utiliza en la sesión Ctrl-d que es el comando clásico.

El contenedor seguirá existiendo y todo lo que se modificó internamente (y los archivos que se creen dentro) seguirán existiendo. Para regresar a tu contenedor sólo tienes que teclear el comando

$ docker start -i mi_ubuntu

Podemos revisar las imagenes que tenemos con

$ docker image ls

así como los contenedores que se encuentran activos en el momento

$ docker container ls

y todos los contenedores

$ docker container ls -a

Por último, se pueden borrar los contenedores y las imágenes que ya no estemos utilizando, primero los contenedores que tienen dependencia y luego las imágenes. Por ejemplo, para borrar el contenedor, y la imagen de ubuntu hay que teclear

$ docker container rm mi_ubuntu
$ docker image rm ubuntu:latest

Si no te deja borrar la imagen, entonces revisa si hay otros contenedores que dependan de la imagen. Cuando no queden contenedores ligados a la imagen, entonces la puedes borrar.

3. Instalar la imagen de docker

Para obtener la imagen más reciente del curso hay que ejecutar

docker pull juliowaissman/pln-unam:latest

Esta imagen contiene la distribución de Linux Ubuntu 16.04 con todos los programas y dependencias que se necesitan para el curso (u otros proyectos de procesamiento de lenguaje natural).

La imagen completa toma aproximadamente 2.14GB, lo que hace que se tarde un poco en su descarga. Si tienes un proveedor de internet como el mío que cuando detecta una descarga grande empieza a bloquearte, no te preocupes, la imagen se descarga por partes y cuando reinicies el comando, continúa con la descarga donde la dejaste.

Si te aparece el error “Got permission denied while trying to connect to the Docker daemon socket…” necesitas agregarte como usuario al grupo docker (en algunos Linux con mucha proteción). Para eso ejecuta:

sudo usermod -a -G docker $USER
sudo service docker restart

y luego realiza logout y login al sistema operativo como usuario.

4. Crear un contenedor con un punto de montaje

Para el curso vamos a generar un contenedor, el cual libere el puerto 8080 (para poder ejecutar las libretas de jupyter), que funciones en forma interactiva, y que tenga un punto de montaje, lo que permite tener carpetas que son visibles tanto en el contenedor como fuera de él.

Para Linux y OSX, hay que crear una carpeta donde pondremos nuestro curso (i.e. curso-pln), y estando en esa carpeta en la linea de comando ejecutar:

docker run -it -p 8080:8080 --name curso-pln -v $PWD:/root/curso-pln juliowaissman/pln-unam:latest

Esto crea un contenedor interactivo (-it) que accede al puerto 8080 (-p 8080:8080) que se va a llamar curso-pln, en el que vamos a montar la direccion $PWD (directorio actual) en la dirección (dentro del contenedor) root/curso-pln. El contenedor se basa en la imagen juliowaissman/pln-unam:latest.

Para Windows, es necesario hacer algo ligeramente diferente. El comando es:

docker run -it -p 8080:8080 --name curso-pln --user root -v /c/Users/$USUARIO:/root/curso-pln  juliowaissman/pln-unam:latest

donde /c/Users/$USUARIO es el camino a la carpeta home del usuario que tienes.

para detener el contenedor, simplemente salr de la sesión con Ctrl-d. Para regresar al contenedor, simplemente

docker start -i curso-pln

y lo puedes iniciar donde sea, ya que el punto de montaje ya está establecido.

5. Probar si la instalación del contenedor funciona correctamente

Para probar si funciona, vamos a verificar que se pueda ejecutar correctamente una libreta de jupyter. Para esto, desde el contenedor ejecutar

root@5ccdd4f5afa5:~# run_notebook

y en tu navegador de preferencia ir a la dirección http://localhost:8080 donde tiene que aparecer la página inicial de tu servidor jupyter que es algo como esto:

Si no funciona, existen varias cosas por probar:

  1. Si el comando run_notebook está ejecutándose pero no la ves en el navegador, intenta con las direcciones “http://localhost:8080” ornet “http://127.0.0.1:8080”. Si tampoco funciona, revisa en la configuración de tu navegador si tienes un proxy en el puerto 8080.

  2. Si estás usando Docker Toolbox en Windows, usa la dirección “http://192.168.99.100:8080”.

  3. Si el comando run_notebook no se ejecuta por falta de memoria, es debido a las limitaciones de 2Gb de memoria que impone docker por default a los contenedores en Windows y MacOS. También puede ser una causa de error si tu computadora tiene menos de 2Gb de RAM. En ambos casos, debes modificar el límite de uso de memoria.

    • para Windows: https://docs.docker.com/docker-for-windows/#advanced
    • para Mac OSX: https://docs.docker.com/docker-for-mac/#advanced

Para parar el servidor de jupyter, hay que ir a la línea de comando y teclear Ctrl-c dos veces. A partir de aquí-, simplemente sale uno del contenedor, como vimos anteriormente, con Ctrl-d.

Opción alternativa para la instalación de las herramientas necesarias para el curso

En esta parte vamos a poner unos pasos para instalar cada una de las herramientas que necesitamos en nuestra máquina, sin aislar el desarrollo. Esto es espacialmente útil si no fue fácil instalar docker en tu computadora.

1. Instalar la versión científica de python Anaconda

Descarga e instala la versión correspondiente a tu sistema operatvo de Anaconda. Instala la versión con python 3.6. Anaconda es una distribución de python con cocina incluida. Esto es, una distribución de python con todas las bibliotecas necesarias para ciencia de datos incluidas, sin embargo no se encuentran todas las que se requieren en PLN.

Puedes entrar en la aplicación con interfaz gráfica (anaconda-navigator) y actualizar la distribución actual.

2. Instalar las bibliotecas de python requeridas en el curso

Instalar (utilizando el shell provisto dentro de anaconda) las bibliotecs que no vienen instaladas y necesitamos. En principio la librería gensim, y la biblioteca spacy. Pata instalarlas, desde la linea de comandos que provee la distribución Anaconda (diferente a la linea de comando clásica en windows). instalar las anteriores librerñis cin