Sunteți pe pagina 1din 83

Tema III: Docker

Arquitecturas en la nube
Docker
• Docker
• Docker para DataScience
• Docker en cluster
• Docker Swarm
• Popularidad de docker

2
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

3
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/
4
5
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
6
Docker

7
Docker
Principales diferencias
Máquinas Virtuales Contenedores
Más pesadas Más ligeras
Varios procesos Un único proceso
Conexión por ssh (aunque Acceso directo al
esté en local) contenedor

Más seguridad porque Potencialmente menor


están más aisladas del host seguridad porque se
ejecutan como procesos en
el host

8
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
9
Docker
• Formato de distribución y ejecución de servicios

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

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

12
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)
13
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/
14
Docker
• Conceptos básicos docker

15
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
16
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/
17
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
18
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)

19
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

20
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

21
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
22
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
23
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/

24
Docker
• Practicando con Docker
Para información de referencia se puede
consultar la documentación oficial

https://docs.docker.com/

25
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

26
Docker
• Docker
• Docker para DataScience
• Docker en cluster
• Docker Swarm
• Popularidad de docker

27
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

28
Docker para Data Science
• Horton + Red Sqirl

https://redsqirl.com/
29
Docker para Data Science
• Hortonworks + Red Sqirl
docker run ­i ­t ­p 8842:8842 ­p 8080:8080 ­p 8088:8088 \
    redsqirl/hortonworks­hdp /usr/local/bin/bootstrap.sh

– 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/
30
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 31
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
docker pull cloudera/quickstart:latest

– Ocupa 4.4Gbytes, así que paciencia


descargando
https://www.cloudera.com/documentation/enterprise/5-6-x/topics/quickstart_docker_container.html
32
Docker para Data Science
• Cloudera en Docker
– Se puede ejecutar cloudera con el siguiente
comando
docker run --hostname=quickstart.cloudera --privileged=true \
-t -i -p 8888:8888 -p 80:80 \
--name cloudera cloudera/quickstart \
/usr/bin/docker-quickstart

– 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
33
Docker para Data Science
• Cloudera en Docker

https://www.cloudera.com/documentation/enterprise/5-6-x/topics/quickstart_docker_container.html
34
Docker para Data Science
http://127.0.0.1/

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”
35
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”
36
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”
37
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
38
Docker para Data Science
• Prediction.io en Docker
– Apache Prediction.io es un servidor de machine
learning open source

http://predictionio.incubator.apache.org/
39
Docker para Data Science
• Prediction.io en Docker
– Este contenedor incluye Apache Spark, HBase and
Elasticsearch
– Iniciar contenedor
docker run -it -v $HOME/MyEngine:/MyEngine -p 8000:8000 \
sphereio/predictionio /bin/bash

– Luego arrancar los servicios


pio-start-all
pio status

https://github.com/sphereio/docker-predictionio
40
Docker
• Docker
• Docker para DataScience
• Docker en cluster
• Docker Swarm
• Popularidad de docker

41
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

42
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)

43
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)

44
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)
45
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”
46
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
47
Docker en cluster
• Orquestadores de contenedores

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

48
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/

49
Docker en cluster
• Docker Swarm

Docker en un servidor Docker en un cluster

50
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/
51
Docker en cluster
• Kubernetes

52
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/
53
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

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

Se puede instalar en AWS y Azure
http://kubernetes.io/docs/getting-started-guides/aws/
http://kubernetes.io/docs/getting-started-guides/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/
55
Docker en cluster
• Muchos proveedores PaaS están ofreciendo la
posibilidad de ejecutar la app como un
contenedor docker Basadas en kubernetes
Orquestación propietaria
Google Container
Engine (GKE)
Amazon EC2
Container Service
(ECS)

56
Docker
• Docker
• Docker para DataScience
• Docker en cluster
• Docker Swarm
• Popularidad de docker

57
Docker Swarm
• 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

Manager Nodes

Worker Nodes

58
Docker Swarm
• 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

59
Docker Swarm
• 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
60
Docker Swarm
• 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

61
Docker Swarm
• 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

62
Docker Swarm
• 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

63
Docker Swarm
• Tipos de servicios

64
Docker Swarm
• 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

65
Docker Swarm
• Tareas

66
Docker Swarm
• 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

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

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

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


como managers
68
Docker Swarm
• Desplegar un servicio
 Ejecutar el comando:
docker service create ­­replicas 1 \
   ­­name helloworld alpine ping docker.com

 Comprobar que está corriendo con el comando:


docker service ls

69
Docker Swarm
• Controlar el servicio
 Inspeccionar el servicio:
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 

70
Docker Swarm
• Controlar el servicio
 Dónde se ejecuta:

docker service ps helloworld

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

71
Docker Swarm
• 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 ps

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

72
Docker Swarm
• Escalar el servicio
 Podemos replicar los contenedores por el cluster

docker service scale helloworld=4

docker service ps helloworld

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   

73
Docker Swarm
• Eliminar el servicio
 Comando

docker service rm helloworld

74
Docker Swarm
• Servicio con puertos públicos
 Comando
docker service create ­­name web \
    ­­replicas 3 ­­publish 9999:80 nginx

 Abrir en el browser

http://127.0.0.1:9999/

75
Docker Swarm
• Docker compose y swarm
 Servicios multicontenedor definidos con docker
compose se pueden desplegar en un cluster swarm
 Documentación

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

76
Docker
• Docker
• Docker para DataScience
• Docker en cluster
• Docker Swarm
• Popularidad de docker

77
78
Popularidad de docker
https://www.docker.com/survey-2016

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

S-ar putea să vă placă și