Documente Academic
Documente Profesional
Documente Cultură
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
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
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/hortonworkshdp /usr/local/bin/bootstrap.sh
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
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
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
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
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 SWMTKN149nj1xv8rssmk743ojnwacrr2e7c \
192.168.99.100:2377
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 micaportatil 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 micaportatil Running Running 17 minutes ago
ce51o29ahtf5x0livwe9jk9xp helloworld.2 alpine micaportatil Running Running 3 seconds ago
ch9muwzzfwffwzd1jss9fto4f helloworld.3 alpine micaportatil Running Running 3 seconds ago
a6qsw3rb05pmaudwvb6ate0af helloworld.4 alpine micaportatil 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