Está en la página 1de 55

DATA SCIENCE

MÓDULO 1

Docker
Git-Hub

www.digitalhouse.com
OBJETIVOS DE LA CLASE

1 Comprensión de Docker a nivel usuario.

2 Construcción y manejo de contenedores.

3 Desarrollo de imágenes, uso de Docker-Hub.

Introducir nociones básicas de control de


4
versión usando GitHub

www.digitalhouse.com 2
EL PROBLEMA

www.digitalhouse.com
Introducción: El problema

Diferentes programas o aplicaciones requieren múltiples recursos virtuales


para funcionar correctamente..

El conjunto de estos recursos podrían no ser compatible entre sí.

www.digitalhouse.com 4
Introducción: El problema

Lidiar con la incompatibilidad dentro de los sistemas es bastante común en Data


Science dada la cantidad de instancias:

- Formas de adquisición
- Estructura de datos
de la información
- Recursos Algorítmicos
- Entornos de Desarrollo
- Gráficos
- Recursos Matemáticos
- Bases de Datos
- Mapas

Muchas formas de realizar una tarea en particular, pero con enfoques y técnicas que
podrían diferir.

www.digitalhouse.com 5
DOCKER

www.digitalhouse.com
Docker: Virtualización.

En la virtualización se crean instancias de un entorno que incluyen:

- I/O
- Conjunto de instrucciones de CPU
- Acceso a memoria
- Interrupciones de sistema
- Entre otras

Es diferente a la simulación (que modela el entorno) y a la emulación (que ejecuta algo


similar pero diferente).

www.digitalhouse.com 7
Docker: Virtualización.

Docker provee una forma de ejecutar software de forma segura, en un entorno aislado,
empaquetado y con todas sus dependencias y librerías, esta instancia se conoce como
contenedor.

Hipervisor Docker

www.digitalhouse.com 8
Docker: El contenedor

– Un contenedor se ejecuta nativamente en Linux y comparte el kernel de la


máquina host con otros contenedores. Se ejecuta un proceso discreto, no
teniendo más memoria que cualquier otro ejecutable, por lo que es ligero.

– Por el contrario, una máquina virtual (VM) ejecuta un sistema operativo


"invitado" completo con acceso virtual a recursos de host a través de un
hipervisor. En general, las VM proporcionan un entorno con más recursos
de los que la mayoría de las aplicaciones necesitan.

www.digitalhouse.com 9
Docker: El contenedor.

Un contenedor es un paquete liviano y autocontenible, con todo lo necesario para ser


ejecutado, por la naturaleza virtual corre de igual forma, independiente del entorno.

www.digitalhouse.com 10
Docker: Definición.

– Docker es una herramienta diseñada para facilitar la creación,


implementación y ejecución de aplicaciones mediante el uso de
contenedores.
– Los contenedores permiten a un desarrollador empaquetar una aplicación
con todas las partes que necesita, como bibliotecas y otras dependencias,
y enviarla como un solo paquete.
– Al hacerlo, gracias al contenedor, el desarrollador puede estar seguro de
que la aplicación se ejecutará en cualquier otra máquina Linux,
independientemente de las configuraciones personalizadas que la
máquina pueda tener que puedan diferir de la máquina utilizada para
escribir y probar el código.

www.digitalhouse.com 11
CONSTRUCCIÓN DE IMAGEN

www.digitalhouse.com
Docker: Construcción de Imagen.

Un contenedor se construye a partir de un molde, este molde se conoce como imagen.

Una imagen es una colección de cambios sobre el sistema de archivos.

Una imagen contiene una unión de


capas apiladas.

Cada capa hereda de la capa anterior.

Las imágenes son inmutables.

Los resultados intermedios pueden


ser cacheados para un uso posterior.

www.digitalhouse.com 13
Docker: Construcción de Imagen

● Docker cuenta con un conjunto de instrucciones para la construcción de imagenes.


● El set instrucciones se suele agrupar en un archivo llamado Dockerfile.
● Estas instrucciones son ejecutadas al invocar el comando build
● Para la construcción de imágenes es necesario el Dockerfile y un contexto de
construcción.
● El contexto de construcción es una carpeta local, o un repositorio tipo git.
● Este contexto puede contener archivos disponibles para la construcción, si es que
es necesario.

www.digitalhouse.com 14
Docker: Construcción de Imagen

Algunas de las instrucciones para la construcción de una imagen en el


dockerfile
● FROM: Para llamar a una imagen de base (obligatorio para un dockerfile)
● USER : Seleccionar un usuario con sus respectivos permisos
● RUN : Corre un comando durante la construcción
● COPY : Copia un archivo del contexto
● WORKDIR : Selecciona un directorio dentro del contenedor de construcción.
● CMD : Ejecuta un comando en tiempo de ejecución, en el contenedor final
● ENV : Asigna una variable de entorno
● LABEL : Variable dentro de la imagen durante la construcción

https://github.com/ds-dh/digital_data/blob/master/Dockerfile

www.digitalhouse.com 15
DOCKER-HUB

www.digitalhouse.com
Docker: Repositorio
Docker cuenta con un repositorio en donde se alojan las imágenes
desarrolladas.

Puede ser público o privado y es posible subir y descargar una gran variedad de recursos, el
repositorio cuenta con imágenes oficiales de los desarrolladores de las soluciones.

www.digitalhouse.com 17
Docker: Repositorio

El comando pull permite obtener una imagen desde algun repositorio, por defecto
es el docker-hub:
$ docker pull hello-world

Podemos especificar otra posición, por ejemplo, el puerto 1200 de un servidor


llamado my_serv :

$ docker pull my_serv:1200/alguna_imagen

A continuación vamos a ver como ejecutar estas ordenes.

www.digitalhouse.com
USO DE DOCKER

www.digitalhouse.com
Uso de Docker: Quickstart Terminal

– Quickstart Terminal es una terminal de Docker, contiene el entorno


(comandos y herramientas) para realizar las tareas de gestión de los
elementos de docker.

● Contenedores
● Imágenes
● Gestión de Virtualización

www.digitalhouse.com
Uso de Docker: Manejo de Contenedores

Comandos útiles para el manejo de contenedores:

run : Este comando se utiliza para la creación de un contenedor a partir de una imagen.
Una forma de usarlo es:

$ docker run [OPCIONES] imagen /comando

Esto construye una imagen (puede ser local o venir del repositorio de docker) y ejecuta
un comando, que es un llamado a un programa dentro del contenedor.

Las Opciones configuran el comportamiento del contenedor, la forma en la que se


ejecuta y construye la imagen, e incluso qué pasa con la imagen después de su
ejecución.

www.digitalhouse.com
Uso de Docker: Contenedores

Dentro de las opciones más comunes dentro de run podemos encontrar:

-p : Asigna un puerto de salida al contenedor

--rm : Borra la imagen después de la ejecución de la tarea

-it : Abre una terminal interactiva que se comunica con el interior


del contenedor

--user : Nombre de usuario que elegimos dentro del contenedor (tiene que existir
dentro del contenedor)

--name : Nombre que elegimos para el contenedor.

www.digitalhouse.com
Uso de Docker: Contenedores

Ejemplos:

$ docker run hello-world

$ docker run --rm ubuntu /bin/echo “hola”

$ docker run -it --name mi_ubuntu ubuntu /bin/bash

$ docker run -p 8888:8888 jupyter/base-notebook

www.digitalhouse.com
Uso de Docker: Manejo de Contenedores

Comandos útiles para el manejo de contenedores:

ps -a : Lista los contenedores que hay en la maquina.


$ docker ps -a

stop : Detiene un contenedor en ejecución


$ docker stop contenedor

start : Ejecuta un contenedor.


$ docker start contenedor

rm : Elimina un contenedor (tiene que estar detenido)


$ docker rm contenedor

www.digitalhouse.com
Uso de Docker: Manejo de Imagenes

Comandos útiles para el manejo de imagenes:

images : Lista las imagenes que hay en la maquina.


$ docker images

rmi : Borra una imagen


$ docker rmi imagen

build : Construye una imagen en su contexto (en este caso local, notar el punto)
$ docker build .

www.digitalhouse.com
KITEMATIC

www.digitalhouse.com
Uso de Docker: Kitematic

Para evitarnos el manejo a nivel de usuario se creó una aplicación gráfica


para la gestión y ejecución de Docker: Kitematic

Permite buscar las imagenes (esta conectado al repositorio docker-hub),


levantar, inicializar, detener, y borrar los contenedores, definir variables de
entorno del contenedor, establecer sincronizaciones entre el contenedor y
el host, configurar redes entre contenedores, etc.

Aún se encuentra en fase de desarrollo (actualmente esta en version


alpha) y presenta algunos problemas.

www.digitalhouse.com
Uso de Docker: Kitematic

+NEW : Construir un nuevo contenedor a partir de una imagen

Stop/Start : Para detener o iniciar un contenedor

Restart : Resetea un contenedor

Exec : Abre una terminal al interior del contenedor

www.digitalhouse.com
Uso de Docker: Kitematik

Así se ve docker-hub en kitematic

www.digitalhouse.com
Recursos Adicionales

https://docs.docker.com/install/

https://docs.docker.com/engine/docker-overview/

https://opensource.com/business/14/7/guide-docker

https://www.youtube.com/watch?time_continue=35&v=Q5POuMHxW-
0

www.digitalhouse.com 30
ANACONDA

www.digitalhouse.com
ANACONDA

– Anaconda es un administrador de entorno y librerías de python.


– Dispone de diversos paquetes open source de gran utilidad para data
science (mas de mil)
– Cuenta con un entorno de desarrollo para python: Spyder
– Es posible ejecutar notebooks interactivas: Jupyter Notebooks
– Se dispone también de un administrador de paquetes Conda.
– Una herramienta gráfica muy interesante es Orange

www.digitalhouse.com
Anaconda: Spyder

www.digitalhouse.com
Anaconda: Orange

www.digitalhouse.com
COLABORATORY

www.digitalhouse.com
COLABORATORY

https://colab.research.google.com/notebooks/welcome.ipynb

– Es un entorno de Jupyter Notebook que no requiere configuración y


que se ejecuta completamente en la nube.

– Los cuadernos de Colaboratory se almacenan en Google Drive, y


puedes compartirlos como harías con Hojas de cálculo o Documentos
de Google.

– Colaboratory es un servicio gratuito.

www.digitalhouse.com
COLABORATORY

www.digitalhouse.com
COLABORATORY

www.digitalhouse.com
Git

www.digitalhouse.com
Git: Introducción

Durante el desarrollo de programas es muchas veces necesario establecer un control


sobre los cambios.

Existen diferentes formas de realizar un control sobre los cambios:

● Escribir en algún lugar los cambios a


partir de un archivo base.

● Enviarse un mail con un comentario y un


archivo adjunto.

● Copiar el archivo en otra carpeta


(quizás con algún dato importante).

www.digitalhouse.com
Git: Introducción

Se ha consensuado una forma ordenada de realizar cambios durante el


desarrollo, este concepto de gestión se conoce formalmente como control
de versiones.

Existen varias implementaciones sobre estas gestiones, una


herramienta muy popular es Git.

Git es un programa diseñado para realizar el control de versiones en


sistemas distribuidos con eficiencia y velocidad en grandes escalas .

https://github.com/torvalds/linux

www.digitalhouse.com
Git : Funcionamiento

El flujo de trabajo en git esta estructurado en pasos secuenciales que vendrían a ser
representados por ramas (branches).

La rama principal es llamada MASTER , a partir de ese lugar pueden existir


bifurcaciones sobre el desarrollo principal.

www.digitalhouse.com
Git : Funcionamiento

¿Que sucede si desarrollo sobre master en este punto?


www.digitalhouse.com
Git : Funcionamiento

www.digitalhouse.com
Git : Funcionamiento

El potencial de git reside en la capacidad de manejar diferentes


ramificaciones durante el desarrollo.

A la vez que presenta herramientas para lidiar con las diferencias.

www.digitalhouse.com
Git: Uso

El uso de git se puede realizar mediante interfaces gráficas o por terminal.

Podemos utilizar una terminal desde jupyter.

También podemos realizar la ejecución de una terminal del contenedor desde kitematic.

En el contenedor de Data Science (digitalhouse/data en docker-hub) contamos con Git.

Panel de contenedores kitematic

Panel central jupyter


www.digitalhouse.com
Git: Uso

Git provee una serie de comandos para realizar el control de versiones.

Dentro de los mas utilizados encontramos:

clone : Copia de forma local un repositorio


add : Agrega un archivo(s) o cambio en un(os) archivo(s)
merge : Une los cambios efectuados, puede requerir hacerlos
manualmente.
commit : Corrobora los cambios efectuados.(almacena miento de
punto de control)
branche : Control sobre las bifurcaciones (ramas)
status : Realiza un chequeo sobre el estado de trabajo en un
repositorio.
Estos comandos presentan además subopciones, se pueden encontrar los
detalles en la documentación oficial de Git.
www.digitalhouse.com
Git: Uso

Ahora vamos a agregar una librería a nuestro contenedor:

Clonamos el repositorio desde el que se construye nuestra imagen.

$ git clone https://github.com/ds-dh/digital_data

Comprobamos que se haya realizado la descarga ( ls lista las carpetas).

$ ls

Observamos el estado del control de versiones.


$ git status

Ahora desde la ventana principal de jupyter (desde donde abrimos la


terminal), buscamos la carpeta donde se encuentra los archivos descargados.

www.digitalhouse.com
Git: Uso

A continuación buscamos el archivo pip_libs.txt y le hacemos click


desde el panel central de jupyter, si todo anda bien, nos abre el
archivo de texto para su edición.

A continuación vamos a agregar al final del archivo el nombre de una


librería, sklearn-deap , el nombre tiene que estar escrito tal como esta
acá, una vez realizado el cambio, guardar.
Vamos de vuelta a la terminal y tipeamos.

$ git status

¿Que sucedio?
Ahora vamos a indicarle a git que efectivamente modificamos pip_libs

$ git add pip_libs.txt

www.digitalhouse.com
Git: Uso

Nuevamente invocamos status para ver que paso.

Comentamos y corroboramos los cambios (-m de mensaje es


obligatorio )

$ git commit -m “agregue una libreria de busqueda


heuristica de hiperparametros”

Y finalmente vamos a realizar la instalación de esta nueva librería utilizando


un gestor de código python:

$ pip install -r pip_libs.txt

www.digitalhouse.com
GitHub

www.digitalhouse.com
GitHub

GitHub es un servicio de Hosting que soporta el control de versiones git.

Cuenta con interfaz web, con herramientas de búsqueda basadas en


features (FOSD),

Proporciona una serie de herramientas para el seguimiento de errores,


planificación, testing y presentación de documentación (markdown y
wiki)

Tiene cerca de 30 millones de usuarios, y mas de 50 repositorios

La mayoría del código en GitHub es público aunque ofrece un servicio


privado pago

www.digitalhouse.com
GitHub: Creando una cuenta

2 3

www.digitalhouse.com
GitHub: Creando un repositorio nuevo

www.digitalhouse.com
GitHub: Creando un repositorio nuevo

www.digitalhouse.com

También podría gustarte