docker para data scientist - master en data science urjc

Post on 15-Jan-2017

367 Views

Category:

Software

4 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Tema III: Docker

Arquitecturas en la nube

2

Docker

• Docker

• Docker para DataScience

• Docker en cluster

• Docker Swarm

• Popularidad de docker

3

Docker

• Los contenedores son una tecnología que ofrece unas ventajas similares a las VMs pero aprovechando mejor los recursos:– Los contenedores tardan milisegundos en

arrancar– Consumen únicamente la memoria que

necesita la app ejecutada en el contenedor. Una VMs reserva la memoria completa

4

Docker

• Es la tecnología de contenedores más popular, (aunque sólo tiene 3 años)

• Es para linux, aunque dispone de herramientas para desarrolladores en windows y mac

• Existe un repositorio de imágenes (hub) con contenedores públicos

https://www.docker.com/

5

6

Docker

• ¿Por qué son tan eficientes los contenedores?– Para ejecutar un contenedor no se necesita

hypervisor porque no se ejecuta un sistema operativo invitado y no hay que simular HW

– Un contenedor es un paquete que contiene una app y todo el sw necesario para que se ejecute (python, Java, gcc, libs….)

– El contenedor es ejecutado directamente por el kernel del host como si fuera una app más pero de forma aislada del resto

7

Docker

8

Docker

Máquinas Virtuales ContenedoresMás pesadas Más ligerasVarios procesos Un único procesoConexión por ssh (aunque esté en local)

Acceso directo al contenedor

Más seguridad porque están más aisladas del host

Potencialmente menor seguridad porque se ejecutan como procesos en el host

Principales diferencias

9

Docker

• Formato de distribución y ejecución de servicios– Cada sistema linux tiene su propio sistema de

distribución y ejecución de servicios– Las apps comparten recursos del servidor sin ningún

tipo de aislamiento entre ellas– Un servicio depende de las versiones concretas de

librerías instaladas (problemas de compatibilidad)– Los contenedores se pueden ver como un estádar

empaquetado y ejecución de servicios en linux

10

Docker

• Formato de distribución y ejecución de servicios

11

Docker

• Docker es mucho más que contenedores: herramientas, servicios...

12

Docker

• La empresa Docker Inc. ofrece muchos servicios y herramientas relacionados con Docker

13

Docker

• Ejecución de contenedores– Linux

● Tecnología muy madura● Disponible en cualquier distribución linux

– Windows● Tecnología preliminar (publicado hace un mes)● Disponible en la última versión de Windows Server

– Una imagen linux no se puede ejecutar en windows (ni viceversa)

14

Docker

• Desarrollo con contenedores– Linux: Se usan contenedores de forma nativa– Windows y Mac:

● Se utiliza un linux virtualizado● Existen dos versiones:

– Docker Toolbox: basada en VirtualBox– Docker for windows o mac: Mucho más integrada

en el sistema), pero sólo funciona en versiones muy recientes

https://docs.docker.com/engine/installation/

15

Docker

•Conceptos básicos docker

16

Docker

•Conceptos básicos docker– Docker Engine:

● Servicio que permite la gestión de imágenes y contenedores

● Se puede gestionar ese servicio usando el comando docker o con una API REST

● Puede gestionar docker localmente, en una VM o en la nube

17

Docker

•Conceptos básicos docker– Docker Image:

● Plantilla básica para un contenedor● Normalmente contiene el SO (ubuntu),

libs (Java) y la app (webapp.jar)● Se utiliza para ejecutar un contenedor● Hay muchas imágenes en el Docker Hub

https://hub.docker.com/

18

Docker

•Conceptos básicos docker– Docker Container:

● Se crea partiendo desde una imagen● Es el equivalente a una VM● Cuando se escriben o modifican ficheros

en el contenedor, no se modifica la imagen original, se modifica el contenedor

19

Docker

•Conceptos básicos docker– Docker Container:

● Un contenedor se pueden iniciar, parar, mover y borrar

● Cuando se reanuda la ejecución, se conservan los cambios (en disco) de la ejecución anterior

● No se pueden pausar y mantener la memoria (como si se hace en las VMs)

20

Docker

•Conceptos básicos docker– Docker Container:

● Contenedores para servicios: Se ejecutan constantemente y puede tener sentido detener y reanudar después

● Contenedores para comandos: Se ejecutan para ejecutar un comando y los resultados del comando se guardan en el host. Se borran al finalizar la ejecución

21

Docker

•Conceptos básicos docker– Docker Container:

● Contenedores para servicios: Son accesibles mediante un puerto (en una IP local o directamente en localhost)

● Contenedores para comandos: Obtienen ficheros del host, los procesan y el resultado queda en el host

22

Docker

•Conceptos básicos docker– Docker Container:

● A diferencia de las VMs, los contenedores no ocupan apenas espacio en disco porque no se copia la imagen por cada contenedor

● Se lee directamente desde la imagen y sólo se guardan los nuevos ficheros o las modificaciones que se hacen sobre la imagen

● Esto se consigue gracias al union-file-system

23

Docker

•Conceptos básicos docker– Docker Registry:

● Repositorio de imágenes Docker● Las imágenes se guardan en repositorios● Se pueden tener repositorios públicos o

privados● El registro público es Docker Hub. Cualquiera

puede hacerse una cuenta y subir imágenes.● Se puede instalar un registro privado

24

Docker

•Practicando con Docker– Para experimentar con docker vamos a seguir un

tutorial oficial● https://github.com/docker/labs/tree/master/beginner

– Otros tutoriales oficiales más avanzados● https://docs.docker.com/engine/tutorials/dockerizing/● https://docs.docker.com/engine/tutorials/usingdocker/● https://docs.docker.com/engine/tutorials/dockerimages/● https://docs.docker.com/engine/tutorials/networkingcontainers/● https://docs.docker.com/engine/tutorials/dockervolumes/● https://docs.docker.com/engine/tutorials/dockerrepos/

25

Docker

•Practicando con DockerPara información de referencia se puede consultar la documentación oficial

● https://docs.docker.com/

26

Docker

•Referencias y páginas de interés– Tutorial básico castellano

● https://www.adictosaltrabajo.com/tutoriales/docker-for-dummies/

– Página resumen● https://github.com/wsargent/docker-cheat-s

heet/blob/master/README.md

27

Docker

• Docker

• Docker para DataScience

• Docker en cluster

• Docker Swarm

• Popularidad de docker

28

Docker para Data Science

• Docker tiene las siguientes ventajas para los desarrolladores en Data Science:– Te permite tener en un entorno local todo el

software necesario (Cloudera, prediction.io...) para el procesamiento de datos de forma sencilla

– Te permite empaquetar tu aplicación con todo lo necesario para que se pueda ejecutar sin problemas en servidores

29

Docker para Data Science

• Horton + Red Sqirl

https://redsqirl.com/

30

Docker para Data Science

• Hortonworks + Red Sqirl

– Execute the script: /usr/local/bin/create_cluster.sh– When it says installation complete, type: Ctrl-Z bg then

Ctrl-L or clear– Wait that hadoop is online, it could take several minutes,

the command hadoop fs -ls / should execute. While everything is being installed you will get "command not found" then "ConnectionRefused" errors.

– Puertos: Ambari 8080, Yarn 8088

https://hub.docker.com/r/redsqirl/hortonworks-hdp/

docker run ­i ­t ­p 8842:8842 ­p 8080:8080 ­p 8088:8088 \    redsqirl/hortonworks­hdp /usr/local/bin/bootstrap.sh

31

Docker para Data Science

• Cloudera en Docker– Cloudera tiene una imagen oficial para

probar en local– No se recomienda para producción

https://www.youtube.com/watch?v=lq6Yr6i33i8

32

Docker para Data Science

• Cloudera en Docker– La imagen de cloudera incluye la

distribución open-source con CDH y Cloudera Manager

– Se puede descargar la imagen con

– Ocupa 4.4Gbytes, así que paciencia descargando

https://www.cloudera.com/documentation/enterprise/5-6-x/topics/quickstart_docker_container.html

docker pull cloudera/quickstart:latest

33

Docker para Data Science

• Cloudera en Docker– Se puede ejecutar cloudera con el siguiente

comando

– Inicia todos los servicios CDH y arranca una shell dentro del contenedor

https://www.cloudera.com/documentation/enterprise/5-6-x/topics/quickstart_docker_container.html

docker run --hostname=quickstart.cloudera --privileged=true \ -t -i -p 8888:8888 -p 80:80 \ --name cloudera cloudera/quickstart \ /usr/bin/docker-quickstart

34

Docker para Data Science

• Cloudera en Docker

https://www.cloudera.com/documentation/enterprise/5-6-x/topics/quickstart_docker_container.html

35

Docker para Data Science

Con Docker Toolbox hay que cambiar 127.0.0.1 por la IP de la máquina virtual. Además, hay que abrir los puertos en Virtualbox en “Settings > Network > Advanced > Port Forwarding”

http://127.0.0.1/

36

Docker para Data Science

http://127.0.0.1:8888

User: clouderaPass: cloudera

Con Docker Toolbox hay que cambiar 127.0.0.1 por la IP de la máquina virtual. Además, hay que abrir los puertos en Virtualbox en “Settings > Network > Advanced > Port Forwarding”

37

Docker para Data Science

Con Docker Toolbox hay que cambiar 127.0.0.1 por la IP de la máquina virtual. Además, hay que abrir los puertos en Virtualbox en “Settings > Network > Advanced > Port Forwarding”

38

Docker para Data Science

• Cloudera en Docker– Parar el contenedor:

● exit en el contenedor● docker stop cloudera en el host

– Salir de la shell sin parar el contenedor: Ctrl+p seguido de Ctrl+q en el contenedor

– Borrar el contenedor (una vez parado): docker rm cloudera en el host

https://www.cloudera.com/documentation/enterprise/5-6-x/topics/quickstart_docker_container.html

39

Docker para Data Science

• Prediction.io en Docker– Apache Prediction.io es un servidor de machine

learning open source

http://predictionio.incubator.apache.org/

40

Docker para Data Science

• Prediction.io en Docker– Este contenedor incluye Apache Spark, HBase and

Elasticsearch– Iniciar contenedor

– Luego arrancar los servicios

https://github.com/sphereio/docker-predictionio

docker run -it -v $HOME/MyEngine:/MyEngine -p 8000:8000 \ sphereio/predictionio /bin/bash

pio-start-allpio status

41

Docker

• Docker

• Docker para DataScience

• Docker en cluster

• Docker Swarm

• Popularidad de docker

42

Docker en cluster

• Servicios y contenedores– Un contenedor con todos los servicios: Una

aplicación se puede empaquetar como una imagen docker con todos los servicios incluidos (web, BBDD, caché, etc…).

– Un contenedor por servicio: También puede empaquetarse como muchas imágenes diferentes. Al arrancar habrá varios contenedores comunicados entre sí por red

43

Docker en cluster

• Un contenedor con todos los servicios– Ventajas

● Más fácil de crear y probar (sólo un Dockerfile)● La comunicación de los servicios es siempre por

localhost (más sencilla)● Se descarga de forma automática con un comando

(ideal para distribuir)

44

Docker en cluster

• Un contenedor con todos los servicios– Desventajas

● Un contenedor sólo puede escalar verticalmente (con una máquina más potente), pero no horizontalmente (usando varias máquinas)

● No es tolerante a fallos (un error en un servicio afecta a todos los demás)

45

Docker en cluster

• Un contenedor por servicio– Ventajas

● Las aplicaciones pueden escalar horizontalmente en un cluster

● Cada contenedor puede estar en una máquina diferente

● Se pueden clonar servicios que necesitan más potencia de cómputo en varias máquinas (web, servicios statless)

● Es tolerante a fallos (un servicio se cae y se puede reiniciar)

46

Docker en cluster

• Un contenedor por servicio– Desventajas

● Puede ser más difícil de crear si tu código está en varios contenedores

● Para webs sencillas se puede tener un contenedor para la BBDD y otros para la web (o varios)

● Existen muchas formas diferentes de gestionar una aplicación formada por varios servicios

– Una sola máquina: docker-compose– Cluster: orquestadores de contendores

● Muchas formas de distribución del “conjunto”

47

Docker en cluster

• Orquestadores de contenedores– Software encargado de gestionar la ejecución de

contenedores en un cluster de máquinas– Pueden tratar varios contenedores como una

única unidad lógica (aplicación)– Redes aisladas para contenedores de la misma

app– Políticas de reinicio en caso de caída del servicio– Políticas de replicación de contenedores por carga

48

Docker en cluster

• Orquestadores de contenedores

http://kubernetes.io/ http://mesos.apache.org/ https://docs.docker.com/engine/swarm/

49

Docker en cluster

• Docker Swarm– Orquestador oficial del creador de Docker– Un poco inmaduro: Publicado en Julio de 2016– Posibilidad de gestionar clusters de máquinas

virtuales en AWS y Azure– Conceptos y comandos similares en local y en el

cluster

https://docs.docker.com/engine/swarm/

50

Docker en cluster

• Docker Swarm

Docker en un servidor Docker en un cluster

51

Docker en cluster

• Kubernetes– Desarrollado principalmente por Google basado

en sus sistemas internos de orquestación (Borg)– Muy maduro. El más utilizado y con más futuro– Disponible de forma sencilla en Google Cloud

Platform y se puede instalar en local, AWS, etc– Conceptos y comandos diferentes a docker en

local

http://kubernetes.io/ https://www.cncf.io/

52

Docker en cluster

• Kubernetes

53

Docker en cluster

• Apache Mesos– Desarrollado en la fundación Apache– Se usa sobre todo como una plataforma para

gestionar las máquinas del cluster como una unidad

– Permite ejecutar Hadoop, Kafka, Spark en el mismo cluster y también contenedores

– Cada vez se parece más a kubernetes

http://mesos.apache.org/

54

Docker en cluster

• Existen diversas formas de ejecutar contenedores en un proveedor cloud– Ejecución manual de contenedores en una

VM (IaaS)– Instalación de un orquestador de

contenedores en un cluster de Vms– Uso de servicios de orquestación ofrecidos

por el proveedor cloud

55

Docker en cluster

• Instalación de un orquestador de contenedores en un cluster de VMs – Kubernetes

● Se puede instalar en AWS y Azure

● Se ofrece como servicio en Google Cloud

– Docker Swarm● Se podrá instalar de forma sencilla en AWS y Azure

(todavía en beta)https://blog.docker.com/2016/06/azure-aws-beta/

http://kubernetes.io/docs/getting-started-guides/aws/ http://kubernetes.io/docs/getting-started-guides/azure/

56

Docker en cluster

• Muchos proveedores PaaS están ofreciendo la posibilidad de ejecutar la app como un contenedor docker

Amazon EC2 Container Service

(ECS)

Google Container Engine (GKE)

Orquestación propietaria

Basadas en kubernetes

57

Docker

• Docker

• Docker para DataScience

• Docker en cluster

• Docker Swarm

• Popularidad de docker

58

• Sólo está disponible en la versión linux (1.12) o en Docker for Windows o Docker for Mac

• No está disponible en Docker Toolbox

Docker Swarm

Worker Nodes

Manager Nodes

59

• Los hosts con el servicio de docker (Docker Engine) que participan en un cluster swarm se dice que corren en modo swarm

• Swarm es un cluster de máquinas corriendo Docker Engine

• Sobre este cluster se pueden desplegar servicios

• Cuando se utiliza Docker Engine sin swarm, se ejecutan comandos Docker

• Cuando se utiliza Docker Engine en modo swarm, se orquestan servicios

Docker Swarm

60

• Estructura de un cluster– Node

● host corriendo Docker Engine en modo swarm

– Manager node● Nodos del swarm que reciben descripciones de servicios y

eligen cómo desplegarlos en el cluster (dispatching)● El dispatching se realiza enviando unidades de tareas a los

worker nodes● Entre todos los manager nodes se elige a un líder,

encargado de la orquestación● Responsables de mantener los servicios funcionando

Docker Swarm

61

• Estructura de un cluster– Worker node

● Reciben las tareas de los manager nodes● Notifican a los manager nodes de cambios en las tareas del

worker node

– Managers como workers● Por defecto los manager nodes son también worker

nodes, pero podrían dejarse exclusivamente como manager nodes

Docker Swarm

62

• Servicios Definición de las tareas a ejecutar en los worker nodes Principal medio de interacción con el cluster por parte

del usuario Cuando se crea un servicio se especifican

Imágenes docker a utilizar Comandos a ejecutar dentro de dichas imágenes

Docker Swarm

63

• Tipos de servicios Servicios simples: definen un conjunto de tareas que se

ejecutarán en los worker nodes determinados por el orquestador

Servicios replicados: el orquestador debe garantizar que las tareas del servicio están replicadas el número de veces especificado

Servicios globales: el orquestador debe garantizar que cada tarea del servicio se está ejecutando en cada worker node del cluster

Docker Swarm

64

• Tipos de servicios

Docker Swarm

65

• Tareas– Son la unidad mínima en swarm– Formada por

● Imagen docker● Comandos a ejecutar dentro del contenedor

– Una vez que una tarea se asigna a un worker node, no se puede mover

● O el contenedor se ejecuta o falla● Si falla, la tarea podría ser asignada a otro worker node

Docker Swarm

66

• Tareas

Docker Swarm

67

• Balanceo de carga Los servicios se pueden exponer hacia el exterior

Swarm puede utilizar un puerto por defecto (Published Port)

El usuario puede escoger un puerto determinado en el rango 30,000-32,767

Swarm utiliza ingress load balancing para dirigir el tráfico hacia el contenedor Cualquier nodo del cluster puede recibir peticiones

(aunque no esté ejecutando el servicio) Todos dirigirán las peticiones hacia los nodos que tengan

la tarea

Docker Swarm

68

• Creación de un docker Swarm en un cluster– Se instala docker en cada nodo del cluster– En un nodo se ejecuta el comando

– Salida:

– Los demás nodos se pueden añadir como workers o como managers

To add a worker to this swarm, run the following command:     docker swarm join \         ­­token SWMTKN­1­49nj1xv8rssmk743ojnwacrr2e7c \         192.168.99.100:2377 

Docker Swarm

docker swarm init

69

• Desplegar un servicio Ejecutar el comando:

Comprobar que está corriendo con el comando:

Docker Swarm

docker service create ­­replicas 1 \   ­­name helloworld alpine ping docker.com

docker service ls

70

• Controlar el servicio Inspeccionar el servicio:

Docker Swarm

docker service inspect ­­pretty helloworld

ID:            9uk4639qpg7npwf3fn2aasksr Name:          helloworld Mode:          Replicated   Replicas:    1 Placement: UpdateConfig:   Parallelism: 1   On failure:  pauseContainerSpec:   Image:       alpine   Args:        ping docker.com 

71

• Controlar el servicio Dónde se ejecuta:

Docker Swarm

docker service ps helloworld

ID                         NAME          IMAGE   NODE           DESIRED STATE  CURRENT STATE           ERROR7l2sro6xvka2xwdwddk56q4d7  helloworld.1  alpine  mica­portatil  Running        Running 12 minutes ago

72

• Controlar el servicio Para tener un control más preciso del servicio hay

que conectarse al nodo donde está el servicio y ejecutar el comando:

Docker Swarm

docker ps

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS          PORTS  NAMESeedc91eea3a0        alpine:latest       "ping docker.com"   15 minutes ago      Up 15 minutes 

73

• Escalar el servicio Podemos replicar los contenedores por el cluster

Docker Swarm

docker service scale helloworld=4

ID                         NAME          IMAGE   NODE           DESIRED STATE  CURRENT STATE           ERROR7l2sro6xvka2xwdwddk56q4d7  helloworld.1  alpine  mica­portatil  Running        Running 17 minutes ago  ce51o29ahtf5x0livwe9jk9xp  helloworld.2  alpine  mica­portatil  Running        Running 3 seconds ago   ch9muwzzfwffwzd1jss9fto4f  helloworld.3  alpine  mica­portatil  Running        Running 3 seconds ago   a6qsw3rb05pmaudwvb6ate0af  helloworld.4  alpine  mica­portatil  Running        Running 3 seconds ago   

docker service ps helloworld

74

• Eliminar el servicio Comando

Docker Swarm

docker service rm helloworld

75

• Servicio con puertos públicos Comando

Abrir en el browser

Docker Swarm

docker service create ­­name web \    ­­replicas 3 ­­publish 9999:80 nginx

http://127.0.0.1:9999/

76

• Docker compose y swarm Servicios multicontenedor definidos con docker

compose se pueden desplegar en un cluster swarm Documentación

Docker Swarm

https://docs.docker.com/compose/swarm/

77

Docker

• Docker

• Docker para DataScience

• Docker en cluster

• Docker Swarm

• Popularidad de docker

78

79

Popularidad de docker

https://www.docker.com/survey-2016

80

Popularidad de docker

https://www.docker.com/survey-2016

81

Popularidad de docker

https://www.docker.com/survey-2016

82

Popularidad de docker

https://www.docker.com/survey-2016

83

Popularidad de docker

https://www.docker.com/survey-2016

top related