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).
-
Si tienes Mac: https://docs.docker.com/docker-for-mac/install/
-
Si tienes Ubuntu: https://www.digitalocean.com/community/tutorials/como-instalar-y-usar-docker-en-ubuntu-16-04-es
-
Si tienes Windows (64bit Windows 10 Pro, Enterprise o Education): https://docs.docker.com/docker-for-windows/install/
-
Si tienes una versión viejita de Windows: https://docs.docker.com/toolbox/toolbox_install_windows/. (ten cuidado, parece que hay muchos problemas en la instalación de esta versión, y es mejor instalar sobre una distribución mínima de Ubuntu).
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:
-
Si el comando
run_notebookestá 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. -
Si estás usando Docker Toolbox en Windows, usa la dirección “http://192.168.99.100:8080”.
-
Si el comando
run_notebookno 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