R sobre Docker - ROCKER.
Para los que no lo conocen, R es un lenguaje destinado a gestión de datos, análisis, interpretación y estadísticas, ampliamente difundido en el mundo científico. RStudio es la herramienta gráfica y bonita para trabajar con R y realizar todo tipo de procesos usando R.
Personalmente hace unos años atras, acabé un “Master en DataScience” de la Univ. John Hopkins usando R para fortalecer mi perfil de manejo e interpretación de datos y personalmente recomiendo R y RStudio a todos los que les interese el tema, aunque Python se ha transformado en otro standard muy usado, R sigue siendo el producto universitario, para investigación y muy fácil de usar por su simplicidad en el lenguaje (a mi entender mas facil que Python).
Aunque al instalar R y RStudio, se consigue un entorno standard para trabajar, además de un entorno gráfico, generación de contenido HTML y otras tantas bibliotecas muy utilizados, en el mundo científico hace falta probar algo y además certificar el método utilizado para esas conclusiones, es tan importante obtener conclusiones como confirmar que pueden ser reconfirmadas por quien quiera.
Existe una manera de correr RStudio (y sus componentes) en un contenedor, que puede ser compartido para que cualquier otro investigados posea un entorno exactamente igual, además de todas las ventajas de usar contenedores que a estas alturas, todos conocerán.
En este post explicaremos como poner a funcionar RStudio en un contenedor y preparar un script/código simple de ejemplo.
Lo primero, tener funcionando Docker.
# /etc/init.d/docker start
Luego bajar la imágen de Docker + r + RStudio, en nuestro ejemplo utilizaremos el puerto 8787 para ofrecer el servicio WEB y definimos una clave “dockertips” para la cuenta rstudio.
Descarga cerca de 2.1 gb y el contenedor generado mide mas de 1.12 gb
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
rocker/rstudio latest 5635d1c0803f 3 weeks ago 1.12GB
Utiliza una imágen llamada “rocker/rstudio:latest”
# docker run -e PASSWORD=dockertips -p 8787:8787 rocker/rstudio
Unable to find image 'rocker/rstudio:latest' locally
latest: Pulling from rocker/rstudio
54f7e8ac135a: Already exists
021dd68904f6: Already exists
8d3e964cf18d: Already exists
81bbbedbef33: Already exists
c7878d347b3f: Already exists
a7aae3dbd958: Already exists
da950bb11a69: Already exists
Digest: sha256:b9e6acea945ca28ec14b3de9925372bdd6c5e3828a8575b34d4247f619b66dd5
Status: Downloaded newer image for rocker/rstudio:latest
[s6-init] making user provided files available at /var/run/s6/etc...exited 0.
[s6-init] ensuring user provided files have correct perms...exited 0.
[fix-attrs.d] applying ownership & permissions fixes...
[fix-attrs.d] done.
[cont-init.d] executing container initialization scripts...
[cont-init.d] add: executing...
Nothing additional to add
[cont-init.d] add: exited 0.
[cont-init.d] userconf: executing...
[cont-init.d] userconf: exited 0.
[cont-init.d] done.
[services.d] starting services
[services.d] done.
La interfaz web de RStudio queda funcionando en el puerto 8787.
http://127.0.0.1:8787
El consumo de memoria y CPU es bastante contenido, pero al comenzar a trabajar con RStudio veremos que a mas datos cargados mas memoria usada. Hay controversia sobre si R usa uno o mas CPUs, para nuestras pruebas la interfaz WEB es “muy rápida” y “totalmente usable”, pienso que puede reemplazar perfectamente al uso de RStudio en mi equipo real. Aunque obvio, RStudio es completamente funcional.
# docker stats
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
b973a8618c39 gallant_perlman 0.34% 54.78MiB / 3.32GiB 1.61% 26.1kB / 24.7kB 0B / 139kB 11
Algunas opciones son definir un volúmen en nuestro equipo real y mapearlo como unidad dentro del contenedor, para facilitar el intercambio de ficheros y su uso por RStudio.
# agregando este modificador podemos mapear la unidad real de mi equipo "datos" a una carpeta llamada DATOS del contenedor.
-v /datos:/datos
Para los que no conocen R, es un lenguaje MUY SENCILLO, diría que BASICo y dejo un ejemplo funcional.
# preparo dos series de datos, una con los números del 1 al 5
# y la otra con los numeros del 10 al 6
x = 1:5
y = 10:6
# pido que dibujo las intersecciones de esos numeros (1,6) (2,7)... (5,10)
plot(x, y)
Existen masters muy buenos sobre R, una gran cantidad de contenido para R, bibliotecas de todo tipo y sigue siendo un standard en investigación. Usar Docker nos permitirá preparar un entorno para compartir con otros profesionales unificando los productos usados, simplificando la puesta en marcha del RStudio y utilizando recursos de un gran servidor corriendo ese contenedor.
Luego de un uso intensivo, veremos como sube el consumo de recursos.
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
b973a8618c39 gallant_perlman 96.88% 536.4MiB / 3.32GiB 15.78% 24.9MB / 894kB 150MB / 2.86MB 19
Para los fanaticos de las cosas “MUY RARAS” les dejo una aplicación de R, en el uso de identificación de patrones.
https://blogs.rstudio.com/tensorflow/posts/2019-01-08-getting-started-with-tf-probability/?utm_content=buffer1c1bc&utm_medium=social&utm_source=linkedin&utm_campaign=buffer