Está en la página 1de 52

Contenedores con

Dr. Pedro J. Molina


Desarrollador Independiente
@pmolinam
Agenda
1. Introducción a Docker (teórica)
2. Introducción a Docker (práctica): manos a ello
3. Docker files
4. Docker CLI
5. Docker-Compose
6. Casos de uso
7. Y más allá…
¿A qué me dedico? Desarrollador Independiente
Colaboro con: http://www.formacion.lemoncode.net
 Domain Specific Languages
 Generación de código Anteriormente:

 CTO
 Microservicios  DSLs

 JavaScript, TypeScript, C#  App Builders

 Backends  Project Manager


 Arquitectura de Software
 Despliegues en nube  DSLs

 Arquitectura de Software  DSLs


 Generación de código
 Consultoría
Evolución: Aplicaciones
1995 2015 Aplicación ligera en
Aplicación cliente- un móvil o tablet.
servido pesada sobre
cliente pesado.

Stack estandarizado: Ensamblada por


- SO desarrolladores
- Runtime usando los mejores
- Middleware servicios
disponibles.

Corriendo en
Infraestructura cualquier conjunto
Física Monolítica de recursos
disponibles
(públicos/privados/
o virtualizados)
La nube

 Llego para quedarse

 CPD caros para PYMEs

 Nube = Commodity
 Guerra de precios
 A medio plazo concentración
 Solo quedarán los grandes
El problema que solventa Docker

Do services and apps


User DB
Multiplicity of Stacks

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 ? ? ? ? ? ? ?

Development Single Prod Onsite Contributor’s Customer


QA Server Public Cloud
VM Server Cluster laptop Servers
Do I worry about Can I transport quickly
how goods interact and smoothly
(e.g. coffee beans (e.g. from boat to train
next to spices) to truck)
Símil: Transporte en antes de los años 60 Multiplicity of Goods
transporting/storing
methods for
Multipilicity of
Problema N x M  No escala
? ? ? ? ? ? ?

? ? ? ? ? ? ?

? ? ? ? ? ? ?

? ? ? ? ? ? ?

? ? ? ? ? ? ?

? ? ? ? ? ? ?
Solución: El Container

how goods interact


(e.g. coffee beans

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.

…in between, can be loaded and


unloaded, stacked, transported

quickly and smoothly


efficiently over long distances,

(e.g. from boat to

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

Do services and apps


Multiplicity of Stacks interact
An engine that enables any appropriately?
payload to be encapsulated
as a lightweight, portable,
self-sufficient container…

…that can be manipulated using


Multiplicity of standard operations and run
hardware consistently on virtually any
environments hardware platform
Can I migrate
smoothly and
quickly
Development QA server Customer Data Public Cloud Production Contributor’s
VM Center Cluster laptop
Docker elimina el problema estandarizando
Static website

Web frontend

Background workers

User DB

Analytics DB

Queue

Development Single Prod Onsite Contributor’s Customer


QA Server Public Cloud
VM Server Cluster laptop Servers
Beneficios para desarrolladores
 Entornos limpios, seguros y portables.
 Despliegues reproducibles (sin perdida de dependencias)
 Aislamiento de aplicaciones
 Tests, integración, empaquetado automatizado
 Menores problemas de compatibilidad
 Despliegues rápidos y baratos

 Una Maquina Virtual sin la penalización de una MV


Beneficios para devops
 Configura una vez, corre cientos
 Despliegues estandarizados y repetibles
 Elimina inconsistencias entre entornos (devel, qa, prod,
etc.)
 Permite segregación de responsabilidades
 Mejora la velocidad de CI y CD
 Más ligeros que una MV
Separación de Responsabilidades (SoC)
 Alicia, la Desarrolladora
• Carmen, la Devop
 Precupada por “que hay
• Preocupada por lo que
dentro” del container. hay fuera del contedor
 Su código • Logging
 Sus librerias • Acceso Remoto
 Su gestor de • Monitorización
paquetes • Configuración de Red
 Sus Apps
 Sus datos • Todos los contenedores
se arrancan, para,
 Todos los Servidores copian, mse migran del
Linux son iguales mismo modo.
Docker: Las tripas
¿Porqué? ¿Qué es?
• Corre en cualquier sitio (Linux) • Alto Nivel – MV ligera
• Sin importar version del kernel 2.6.32+ • Espacio de proceso propio
• Configuración de red propia
• Sin importar distribución
• Puede correr como root
• Físico, virtual, nube o no. • Puede tener su propio /sbin/init
• Container & Arquitectura de Host deben
emparejar
• Bajo Nivel – chroot con esteroides
• Puede no tener su propio /sbin/init
• Corre cualquier cosa: • Contenedor = proceso aislado
• Si corre en el host, corre en el container • Comparte Kernel con el host
• Si corre en un kernel Linux, correrá • No emula dispositivo
Contenedores vs Maquinas Virtuales
App App App Los contenedores están aislados,
A A’ B
pero comparten SO y
Bins/ Bins/ Bins/
Libs Libs Libs
opcionalmente binarios y librerías
VM Da como resultado despliegues mas
Guest Guest rápidos, con menos sobrecoste, más
OS OS facilites de migrar y reiniciar.
Guest Guest Guest
OS OS OS

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

Base Container Container

App Δ
Container Mod A’ Mod A’’
Update
Image

Bins/
App App
A’’ A

Bins/ Bins/
Bins/

Libs Libs

Docker Engine Docker Engine


Host is now running A’’
La tecnología bajo Docker
 Linux Kernel
 Servicios de aislamiento de recursos cgroups
 Kernel namespaces
 Union file-systems aufs
 Libvirt, LXC

 Git
 Control de versiones: delta a las imágenes de
contenedores
V1 V2 V3 …

 Registro (Docker Hub)


Glosario Docker:

 Veamos algo de jerga.


Glosario Docker: Dockerfile

# A basic apache server.

FROM ubuntu:14.04

MAINTAINER Kimbro Staken version: 0.1

RUN apt-get update && apt-get install –y apache2

ENV APACHE_LOG_DIR /var/log/apache2

EXPOSE 80

CMD ["/usr/sbin/apache2", "-D", "FOREGROUND"]


Glosario Docker: Container
 Contenedor

 La aplicación paquetizada, aislada


Glosario Docker: Host (anfitrión)

 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.

 Sistema de ficheros Union.

 Estructurado en capas (layers) por


delta.

 https://imagelayers.io
Glosario Docker: Volumen
 Discos o directorios externos que
podemos montar en el
contenedor.

 Recursos externos (alojados en el


host) que sobreviven al Datos
contenedor

 Configuración / Datos / Recursos Conf.


Glosario Docker: Registro
 Biblioteca de imágenes de
contenedor
 Listas para ser usadas

 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

run / start restart stop/kill

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

 docker network create


 docker network rm

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

git clone https://github.com/pjmolina/docker-training

 Un primer container con Docker


docker-compose.yml. Ref. de comandos
version: '2'
services: web
web:
build: .
depends_on: redis
- db
- redis
redis:
image: redis db
db:
image: postgres

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

 Sistemas en Producción (¡¡¡casi!!!)


Raspberry PI 3
 ¡¡Corre docker!!

 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