Se ha denunciado esta presentación.
Utilizamos tu perfil de LinkedIn y tus datos de actividad para personalizar los anuncios y mostrarte publicidad más relevante. Puedes cambiar tus preferencias de publicidad en cualquier momento.

Docker para Data Scientist - Master en Data Science URJC

1.070 visualizaciones

Publicado el

Presentación de Docker en el Master en Data Science de la URJC en la asignatura de Arquitecturas en la nube. En esta asignatura hablamos de AWS, Azure, Docker, Kubernetes, Mesos

Publicado en: Software

Docker para Data Scientist - Master en Data Science URJC

  1. 1. Tema III: Docker Arquitecturas en la nube
  2. 2. 2 Docker • Docker • Docker para DataScience • Docker en cluster • Docker Swarm • Popularidad de docker
  3. 3. 3 Docker • Los contenedores son una tecnología que ofrece unas ventajas similares a lasVMs pero aprovechando mejor los recursos: – Los contenedores tardan milisegundos en arrancar – Consumen únicamente la memoria que necesita la app ejecutada en el contenedor. UnaVMs reserva la memoria completa
  4. 4. 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. 5. 5
  6. 6. 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. 7. 7 Docker
  8. 8. 8 Docker MáquinasVirtuales Contenedores Más pesadas Más ligeras Varios procesos Un único proceso Conexió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. 9. 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. 10. 10 Docker • Formato de distribución y ejecución de servicios
  11. 11. 11 Docker • Docker es mucho más que contenedores: herramientas, servicios...
  12. 12. 12 Docker • La empresa Docker Inc. ofrece muchos servicios y herramientas relacionados con Docker
  13. 13. 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 deWindows Server – Una imagen linux no se puede ejecutar en windows (ni viceversa)
  14. 14. 14 Docker • Desarrollo con contenedores – Linux: Se usan contenedores de forma nativa – Windows y Mac: ● Se utiliza un linux virtualizado ● Existen dos versiones: – DockerToolbox: 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. 15. 15 Docker • Conceptos básicos docker
  16. 16. 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. 17. 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. 18. 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. 19. 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 lasVMs)
  20. 20. 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. 21. 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. 22. 22 Docker • Conceptos básicos docker – Docker Container: ● A diferencia de lasVMs, 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. 23. 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. 24. 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. 25. 25 Docker • Practicando con Docker Para información de referencia se puede consultar la documentación oficial ● https://docs.docker.com/
  26. 26. 26 Docker • Referencias y páginas de interés – Tutorial básico castellano ● https://www.adictosaltrabajo.com/tutoriales/d ocker-for-dummies/ – Página resumen ● https://github.com/wsargent/docker-cheat-s heet/blob/master/README.md
  27. 27. 27 Docker • Docker • Docker para DataScience • Docker en cluster • Docker Swarm • Popularidad de docker
  28. 28. 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. 29. 29 Docker para Data Science • Horton + Red Sqirl https://redsqirl.com/
  30. 30. 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. 31. 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. 32. 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. 33. 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. 34. 34 Docker para Data Science • Cloudera en Docker https://www.cloudera.com/documentation/enterprise/5-6-x/topics/quickstart_docker_container.html
  35. 35. 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. 36. 36 Docker para Data Science http://127.0.0.1:8888 User: cloudera Pass: 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. 37. 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. 38. 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. 39. 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. 40. 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-all pio status
  41. 41. 41 Docker • Docker • Docker para DataScience • Docker en cluster • Docker Swarm • Popularidad de docker
  42. 42. 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. 43. 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. 44. 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. 45. 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. 46. 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. 47. 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. 48. 48 Docker en cluster • Orquestadores de contenedores http://kubernetes.io/ http://mesos.apache.org/https://docs.docker.com/engine/swarm/
  49. 49. 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. 50. 50 Docker en cluster • Docker Swarm Docker en un servidor Docker en un cluster
  51. 51. 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. 52. 52 Docker en cluster • Kubernetes
  53. 53. 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. 54. 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 deVms – Uso de servicios de orquestación ofrecidos por el proveedor cloud
  55. 55. 55 Docker en cluster • Instalación de un orquestador de contenedores en un cluster deVMs – 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. 56. 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. 57. 57 Docker • Docker • Docker para DataScience • Docker en cluster • Docker Swarm • Popularidad de docker
  58. 58. 58 • Sólo está disponible en la versión linux (1.12) o en Docker forWindows o Docker for Mac • No está disponible en DockerToolbox Docker Swarm Worker Nodes Manager Nodes
  59. 59. 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. 60. 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. 61. 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. 62. 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. 63. 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. 64. 64 • Tipos de servicios Docker Swarm
  65. 65. 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. 66. 66 • Tareas Docker Swarm
  67. 67. 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. 68. 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. 69. 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. 70. 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:  pause ContainerSpec:    Image:       alpine    Args:        ping docker.com 
  71. 71. 71 • Controlar el servicio  Dónde se ejecuta: Docker Swarm docker service ps helloworld ID                         NAME          IMAGE   NODE           DESIRED STATE  CURRENT STATE           ERROR 7l2sro6xvka2xwdwddk56q4d7  helloworld.1  alpine  mica­portatil  Running        Running 12 minutes ago
  72. 72. 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  NAMES eedc91eea3a0        alpine:latest       "ping docker.com"   15 minutes ago      Up 15 minutes 
  73. 73. 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            ERROR 7l2sro6xvka2xwdwddk56q4d7  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. 74. 74 • Eliminar el servicio  Comando Docker Swarm docker service rm helloworld
  75. 75. 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. 76. 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. 77. 77 Docker • Docker • Docker para DataScience • Docker en cluster • Docker Swarm • Popularidad de docker
  78. 78. 78
  79. 79. 79 Popularidad de docker https://www.docker.com/survey-2016
  80. 80. 80 Popularidad de docker https://www.docker.com/survey-2016
  81. 81. 81 Popularidad de docker https://www.docker.com/survey-2016
  82. 82. 82 Popularidad de docker https://www.docker.com/survey-2016
  83. 83. 83 Popularidad de docker https://www.docker.com/survey-2016

×