2 | Introduccin
Marcos Nils Lilljedahl (@marcosnils)
Head of R&D en Mantika (http://mantika.ca)
3 | Introduccin
Notas
El hashtag oficial del curso es #PlatziDocker
4 | Introduccin
Mitos de docker
5 | Introduccin
Por qu Docker?
6 | Introduccin
Por qu Docker? (cont.)
7 | Introduccin
Por qu Docker? (cont.)
8 | Introduccin
Por qu Docker? (cont.)
9 | Introduccin
Por qu Docker? (cont.)
10 | Introduccin
Por qu Docker? (cont.)
11 | Introduccin
La misin de Docker
Anywhere
12 | Introduccin
Contenedores
13 | Introduccin
Contenedor
Los contenedores son
ms livianos que las VMs
No es necesario instalar
un OS por contenedor
Menor utilizacin de
recursos
Mayor cantidad de
contenedores por equipo
fsico
Mejor portabilidad
14 | Introduccin
Instalando docker.
https://www.docker.com/products/docker-toolbox
https://docs.docker.com/engine/installation/linux/
15 | Docker Engine
Instalando docker.
16 | Docker Engine
Instalando docker.
17 | Docker Engine
Instalando docker.
18 | Docker Engine
Instalando docker.
19 | Docker Engine
Instalando docker.
20 | Docker Engine
Instalando docker.
21 | Docker Engine
Instalando docker.
22 | Docker Engine
Docker engine.
23 | Docker Engine
Controlando las versiones.
`docker version`
CLIENTE
SERVICIO /
DEMONIO
24 | Docker Engine
Contenedores e imgenes
Imgenes
Plantilla de slo lectura para
crear nuestros contenedores
Creadas por nosotros u otros
usuarios de la comunidad
Se pueden guardar en un
registro interno o pblico
Contenedores
Aplicacin aislada
Contiene todo lo necesario para
ejecutar nuestra aplicacin
Basados en una o ms
imgenes.
25 | Docker Engine
Imgenes
Imgenes locales
26 | Imgenes
Imgenes - Formato
El formato de las
imgenes se
compone de
repositorio:tag
Una misma
imagen puede
tener mltiples
tags
El tag por
defecto de una
imagen es
latest
27 | Imgenes
Descargando imgenes
28 | Imgenes
Ciclo de vida de los contenedores
Ciclo de vida bsico
Se crea el contenedor a partir de una imagen
Se ejecuta un proceso determinado en el contenedor
El proceso finaliza y el contenedor se detiene
Se destruye el contenedor
Ciclo de vida avanzado
Se crea el contenedor a partir de una imagen
Se ejecuta un proceso determinado en el contenedor
Realizar acciones dentro del contenedor
Detener el contenedor
Lanzar el contenedor nuevamente
29 | Contenedores
Creando nuestro primer contenedor
30 | Contenedores
Listando los contenedores
31 | Contenedores
Contenedores interactivos
32 | Contenedores
ID de contenedores
33 | Contenedores
Listado con filtro de contenedores
La bandera --filter agrega condiciones de filtrado
Se puede filtrar basado en el cdigo de salida y estado del
contenedor
El estado puede ser
Restarting
Running
Exited
Paused
Para especificar mltiples condiciones utilizar la bandera --
filter por cada condicin
Otros filtros: id, label, name, exited, status, ancestor,
isolation
34 | Contenedores
Ejecutando contenedores de fondo
Utilizar la bandera -d
35 | Contenedores
Un caso prctico
36 | Contenedores
Vincularse a un contenedor
37 | Contenedores
Docker exec
38 | Contenedores
Logs del container
39 | Contenedores
Acciones sobre un contenedor
40 | Contenedores
Inspeccionando un contenedor
El comando docker inspect se utiliza para acceder a informacin
til de un contenedor
41 | Contenedores
Eliminando contenedores
42 | Contenedores
Creacin de imgenes
Sistema de capas entre
imgenes
43 | Dockerfiles
Formas de crear imgenes
Tres modos
Hacer `commit` de los contenidos de un contenedor
44 | Dockerfiles
Forma interactiva
Ingresar dentro del contenedor y realizar las modificaciones necesarias
45 | Dockerfiles
Dockerfiles
Provee una forma ms efectiva de generar imgenes en vez de utilizar
docker commit
46 | Dockerfiles
El build cache
Docker guarda un snapshot de cada imagen luego de cada instruccin
de build
Antes de ejecutar un paso, docker chequea si la instruccin se
encuentra en la cache teniendo en cuenta el orden original
Si la condicin anterior se cumple, docker utiliza la cache en vez de
ejecutar el paso nuevamente
Docker utiliza comparacin de strings exactas para chequear con la
cache
Simplemente cambiando el orden de las instrucciones la cache se invalida
Para deshabilitar la cache manualmente se puede utilizar la bandera --
no-cache
docker build --no-cache -t imagen .
47 | Dockerfiles
Historial de una imagen
48 | Dockerfiles
La instruccin CMD
49 | Dockerfiles
La instruccin ENTRYPOINT
50 | Dockerfiles
Copiando archivos
51 | Dockerfiles
Dockerizando nuestra aplicacin
52 | Dockerfiles
Especificando un directorio de trabajo
53 | Dockerfiles
La instruccin ADD
54 | Dockerfiles
Otras instrucciones
55 | Dockerfiles
Consejos y buenas prcticas para Dockerfiles
https://docs.docker.com/engine/reference/builder/
56 | Dockerfiles
Compartir nuestras imgenes
https://hub.docker.com
57 | Dockerfiles
Etiquetando las imgenes
Sintaxis:
docker tag [ID imagen] [repo:tag]
docker tag [local repo:tag] [repo:tag]
58 | Dockerfiles
Borrando imgenes
59 | Dockerfiles
Ejemplo
60 | Dockerfiles
Volmenes
Un directorio designado en el contenedor en el cual se persiste
informacin independientemente del ciclo de vida del contenedor
61 | Volmenes
Volmenes
Tienen mejor
performance ya que no
utilizan COW
62 | Volmenes
Utilizando volmenes
63 | Volmenes
Volmenes en el Dockerfile
Con este mtodo no se pueden mapear archivos del host (debido a que
el dockerfile puede ejecutarse en cualquier equipo)
64 | Volmenes
Contenedores de datos
Contenedor
Contenedor Contenedor de datos
65 | Volmenes
Ejemplo
66 | Dockerfiles
Modelo de Red de Docker
Cuando docker inicia, crea una interfaz virtual docker0 en el equipo de host
docker0 es asignado un rango de IP de la subnet privada definida por la
RFC 1918
67 | Redes
Modelo de Red de Docker
68 | Redes
El comando docker network
El comando docker network nos permite interactuar con las
redes en docker y los contenedores dentro de ellas
Los sub commandos son:
docker network create
docker network connect
docker network ls
docker network rm
docker network disconnect
docker network inspect
69 | Redes
Creando nuestra red
70 | Redes
Visualizando nuestra red
bridge0
mi_red
bridge0
71 | Redes
Exponiendo contenedores a una red externa
72 | Redes
Ejemplo
73 | Dockerfiles
Docker Machine
Docker machine es una herramienta para
provisionar hosts de Docker y configurar el Engine en
los mismos
Crea hosts de docker adicionales
en el entorno local
https://github.com/docker/machine/releases/
74 | Machine
Docker Machine
75 | Machine
Docker Machine - AWS
Para crear un host en AWS es necesario
AWS access key
AWS secret key
El VPC ID para la instancia donde correr docker
La imagen utilizada por defecto es Ubuntu 14.04 LTS
docker-machine create
--driver amazonec2 \
--amazonec2-access-key <AWS access key> \
--amazonec2-secret-key <AWS secret key> \
--amazonec2-vpc-id <VPC ID> \
testhost
Otros providers
DigitalOcean, GCE, Azure, SoftLayer, Rackspace,
VMware, Openstack
76 | Machine
Docker machine - extras
Existen 2 mtodos para conectarse a un host con docker-machine
Utilizar docker-machine ssh
Setear las variables de entorno para apuntar al host de docker
Hack: Usar la clave ssh manualmente (no recomendado)
77 | Machine
Microservicios con Docker
78 | Docker - Microservices
Microservicios con Docker
79 | Docker - Microservices
Docker y microservicios
container container
container
Accounting
Store front
service
container
container
mobile store Inventory
front Service
container
80 | Docker - Microservices
Docker Compose
Compose es una herramienta para crear y
administrar aplicaciones multi-contenedor
https://github.com/docker/compose/releases
81 | Compose
Docker Compose
docker-compose.yml define los servicios que componen la aplicacin
Cada servicio contiene las instrucciones para construir y ejecutar el
contenedor
Ejemplo
servicio api:
build: .
ruta build
command: node api.js
comando inicio
links:
link a contenedor
- redis
redis:
image: redis
imagen
82 | Compose
Docker Compose
Utilizar docker-compose up para iniciar nuestra aplicacin
El comando up:
Construye la imagen para cada servicio
Crea e inicializa los contenedores
Compose automticamente se da cuenta cuales contenedores iniciar
primero
83 | Compose
Docker Compose - extras
Muchos de los parmetros en el archivo docker-compose.yml tienen
su equivalente como instruccin utilizando el Docker engine
Las opciones especificadas en el Dockerfile son respetadas por
compose y no es necesario redefinirlas
Ejemplo
Exponemos el puerto 8080 en el Dockerfile utilizado por tomcat
Necesitamos correr tomcat meidnate un servicio via Compose
No es necesario especifica el parmetro ports siendo que se encuentra
definido en el Dockerfile
84 | Compose
Docker Compose - escalando servicios
En una arquitectura de microservicios, generalmente tenemos la
ventaja de poder escalar un servicio especfico para soportar la carga
Ejemplo: Si el servicio de Orders recibe demasiado trfico,
necesitamos escalarlo para satisfacer as la demanda.
Docker compose posee el comando scale convenientemente para tal
fin.
Sintaxis:
docker-compose scale <servicio>=<nmero_instancias>
85 | Compose
Ejemplo
86 | Dockerfiles
Multi-host networking
Los contenedores que corren en diferentes hosts
no pueden comunicarse entre s a menos que
expongan sus puertos mediante el host
Multi-host networking habilita a que contenedores
en diferentes hosts puedan comunicarse sin
necesidad de exponer sus puertos
El Docker engine permite realizar multi-host
networking nativamente mediante el driver overlay
de red
Los requerimientos para una red overlay son:
Acceso a un key-value store compartido
Todos los hosts deben soportar un kernel 3.16
o superior
El Docker Engine configurado correctamente
87 | Networking
Multi-host networking (ejemplo)
mh-consul
Docker
daemon
mh-demo0 mh-demo1
Docker Docker
daemon daemon
88 | Networking
Multi-host networking (red)
mh-consul
Docker
daemon Consul
mhl-network
mh-demo0 mh-demo1
Docker Docker
daemon daemon
89 | Networking
Docker swarm
Docker swarm permite formar clusters de Docker
hosts y decide dnde lanzar los contenedores
(scheduler)
90 | Swarm
Docker swarm
91 | Swarm
Docker swarm
Tiene 2 mtodos de instalacin
Instalar el binario de swarm
Utilizar la imagen oficial de swarm del hub
92 | Swarm
Docker swarm
swl-consul
Docker
daemon Consul
swl-cluster
swl-demo0 swl-demo1
Swarm node /
Swarm master agent
93 | Swarm
Docker swarm - Estrategias
Docker swarm rankea los nodos en funcin de diferentes estrategias /
algoritmos
Cuando se ejecuta un contenedor, Swarm lo correr en el nodo con
mayor ranking
El ranking se calcula en funcin de la estrategia seleccionada
Las estrategias son:
Spread (estrategia por defecto) - Rankea segn la cantidad de
contenedores
Binpack - Intentar llenar el nodo con menos recursos disponibles antes de
utilizar el siguiente (CPU/RAM)
Random
94 | Swarm
Docker swarm - Filtros
Los filtros se utilizan para indicar
a Swarm qu hosts utilizar para
lanzar los contenedores Docker
daemon
95 | Swarm
Docker swarm - Filtros
Swarm Master
constraint:
region==co
-p 80:80
affinity:
image==tomcat
Docker Docker
Docker
daemon daemon
daemon
region=co (mynginx) /
(port 80 free)
tomcat
96 | Swarm
Docker swarm - Composing
97 | Swarm
Ejemplo
98 | Dockerfiles
Docker swarm - Notas
Todas las redes creadas dentro de swarm, son multi-host por defecto
99 | Swarm
Muchas gracias!
@marcosnils
100 |