Documente Academic
Documente Profesional
Documente Cultură
CTO
Microservicios DSLs
Corriendo en
Infraestructura cualquier conjunto
Física Monolítica de recursos
disponibles
(públicos/privados/
o virtualizados)
La nube
Nube = Commodity
Guerra de precios
A medio plazo concentración
Solo quedarán los grandes
El problema que solventa Docker
appropriately?
Static website postgresql + pgv8 + v8
Queue Analytics DB
interact
nginx 1.5 + modsecurity + openssl + bootstrap 2 hadoop + hive + thrift + OpenJDK
Redis + redis-sentinel
Web frontend
Background workers
Ruby + Rails + sass + Unicorn
Python 3.0 + celery + pyredis + libcurl + ffmpeg + libopencv + nodejs +
phantomjs API endpoint
Python 2.7 + Flask + pyredis + celery + psycopg + postgresql-client
Production Cluster
Development VM
Multiplicity of
environments
Public Cloud
smoothly and
hardware
Can I migrate
quickly?
QA server
Disaster recovery
Customer Data Center Contributor’s laptop
Production Servers
El problema que solventa Docker
Static website ? ? ? ? ? ? ?
Web frontend ? ? ? ? ? ? ?
Background workers ? ? ? ? ? ? ?
User DB ? ? ? ? ? ? ?
Analytics DB ? ? ? ? ? ? ?
Queue ? ? ? ? ? ? ?
? ? ? ? ? ? ?
? ? ? ? ? ? ?
? ? ? ? ? ? ?
? ? ? ? ? ? ?
? ? ? ? ? ? ?
Solución: El Container
Do I worry about
next to spices)
Multiplicity of Goods
A standard container that is
loaded with virtually any
goods, and stays sealed until
it reaches final delivery.
Can I transport
and transferred from one mode
train to truck)
of transport to another
Multiplicity of
methods for
transporting/storing
Docker
Static website User DB Web frontend Queue Analytics DB
Web frontend
Background workers
User DB
Analytics DB
Queue
App B’
App B’
App A’
App B’
App A
App B
Docker
Container
Hypervisor (Type 2) Bins/Libs Bins/Libs
Host OS Host OS
Server Server
¿Porqué son contenedores Docker son ligeros?
MVs Contenedores
App
App Δ
App App App
App
A’ A A
A A
Bins/
Bins/
Bins/ Bins/ Bins/
Libs Libs Libs Libs
Guest
Guest Guest OS
Guest
OS OS OS
App Original Copia de App Modificada
(Sin SO que tome espacio, App
recursos o requiera ser No SO. Copia con solo las
reiniciado) Puede compatir diferencias entre el
bins/libs contenedor A y A’
MVs
Cada pequeño cambio a una Aplicación
Require un nueva máquina virtual.
Funcionamiento básico
Push Docker
Container
Container A
Image
Registry
Search
Pull
Build Run
Dockerfile
For
A
Container B
Container A
Container C
Docker
Source
Code
Docker Engine
Repository
Host 1 OS (Linux)
Host 2 OS (Linux)
Cambios y actualizaciones
App Push
App Δ
A
Docker
Bins/ Container
Bins/
Libs Image
Registry
App Δ
Container Mod A’ Mod A’’
Update
Image
Bins/
App App
A’’ A
Bins/ Bins/
Bins/
Libs Libs
Git
Control de versiones: delta a las imágenes de
contenedores
V1 V2 V3 …
FROM ubuntu:14.04
EXPOSE 80
Es el porta-contenedores
Múltiples sabores: local, private cloud, public cloud. Virtual o físico.
Expone los recursos
Glosario Docker: Imagen
Fichero binario que contiene todo el
sistema de ficheros de un contenedor.
https://imagelayers.io
Glosario Docker: Volumen
Discos o directorios externos que
podemos montar en el
contenedor.
Registro publico
Compartidas por la comunidad
Libre acceso
Registro privado
Contenedores corporativos o
privados
https://hub.docker.com
Ciclo de vida de un contenedor
create rm
Stopped Deleted
Running
pause unpause
Paused
Ciclo de vida de una imagen
STDIN/
*.tar.gz Registry
STDOUT
load/save
import/export
pull/push
image deleted
build rmi
commit
Command Line Interface
Dockerfile. Referencia de comandos
FROM USER
MAINTAINER WORKDIR
LABEL VOLUME
ADD STOPSIGNAL
COPY ENTRYPOINT
ENV CMD
EXPOSE RUN
Reference: https://docs.docker.com/engine/reference/builder
docker. CLI. Referencia de comandos
help log
build exec
run cp
list images
ps rmi
kill pull / push
lm pause / unpause
Reference: https://docs.docker.com/engine/reference/commandline/cli
docker. CLI. Referencia de comandos
Networks
Reference: https://docs.docker.com/engine/reference/commandline/cli
Docker como fuente de software enjaulado
Lenguajes DBs
golang mongo
rails
node maria
php mysql
java postgres
erlang memcached
lisp
microsoft/aspnet redis
Docker como fuente de software enjaulado
CI Otros
jenkins consul
sjoerdmulder/teamcity
meteogroup/concourse-ci redis
prometheus
Project Management nginx
redmine
haproxy
jira
Docker como fuente de software enjaulado
Navajas suizas
busybox (1-5 Mb)
alpine (5 Mb)
Manos a la obra
Reference: https://docs.docker.com/compose/compose-file
docker-compose. CLI. Ref. de comandos
help etc…
build
up
scale
down
kill
log
Reference: https://docs.docker.com/compose/reference
Manos a la obra
Docker-Compose
Casos de Usos
CI & CD
Maquinas de desarrollo
Pruebas
Simular Entornos complejos
ARM versión
RAM limitada
Útil para proyectos embebidos
+info: http://blog.hypriot.com
Y mas allá…
Unikernels
Kernel de SO compilado de modo estático con tu aplicación.
Modular, pequeño, solo lo que se necesita.
Corriendo sobre un hiper-visor.
Y mas allá…
Amazon EC2 Container Service
Y mas allá…
Joyent TRITON
Y mas allá…
Kubernetes
Plataforma de orquestación de contenedores de Google
http://kubernetes.io
Apache Mesos
http://mesos.apache.org
Y mas allá…
HashiCorp Terraform
Infrastructure as Code
https://www.hashicorp.com/terraform.html
Referencias
Docker https://www.docker.com
Ejemplos https://github.com/pjmolina/docker-training
Contacto
¿Te gusto lo que viste o todo lo contrario?
En cualquier caso, ¡retroaliméntame!
Pedro J. Molina
pjmolina@gmail.com
@pmolinam