
Technical Overview
Fernando Sclavo / Lucas Campana Levy
09/12/2015 v1.0

Agenda
- Relevancia
- Que es Docker?
- Componentes
- Arquitectura
- VM vs Container
-
Que solución nos provee?
- Separation of concerns
- Importancia para desarrolladores
- Importancia para operaciones
- The matrix from hell
- Workflow
- Dockerfile
- Beneficios
- Ecosistema
- Q&A / Demo
Docker: Relevancia
13/03/2013
Lanzamiento de Docker
19/09/2013
Docker y Red Hat alianza (Fedora/RHEL compatibilidad)
OpenShift standard container
16/09/2014
Docker cierra $40M financiamiento
15/10/2014
Docker y Microsoft Partners para la adopción de apps distribuidas
13/11/2014
AWS anuncia EC2 Container Service para manejar Docker containers
31/12/2014
Docker alcanza 100M descargas de Containers
01/04/2015
Docker alcanza 300M descargas de Containers
14/04/2015
Docker asegura $95M financiamiento
22/06/2015
Open Container Project define el estandar de la industria

Milestones
Partners








Qué es Docker?



Developer
Standard
container
format
Ops



Docker Registry
CLI
Docker Daemon
Share applications
Automate workflow
Assemble apps from components
Componentes
Container combina
- Linux Cgroups
- Kernel Namespaces
- Docker Image
- Has a Lifecycle
Arquitectura

Virtual Machine vs Container
Virtual Machine
Docker
- Virtualiza a nivel de hardware
- Abstrae el SO a través del hardware
- Virtualiza a nivel del SO
- Abstrae la aplicación del SO
- Consume espacio de almacenamiento para cada instancia
- Utiliza un sólo espacio de almacenamiento, más pequeños deltas para cada capa por lo tanto son mucho más eficientes
- Bootea de acuerdo con el SO normalmente 20 segundos, dependiendo de la velocidad de almacenamiento
- Puede arrancar y ser app-ready en menos de 500ms y crea nuevas oportunidades para los diseños de escala rápida
- Tiene APIs de menor calidad, limitado para la orquestación de la nube
- Incorpora APIs de alto valor para la orquestación de la nube
Que solución provee Docker?



Devs
Infra
The matrix from hell
Ops
Separation of Concerns

Al desarrollador le preocupa:
-
que hay "dentro" del container:
- Su código
- Sus librerías
- Su package manager
- Sus apps
- Su data
- todos los servidores linux le parecen igual
Al ops le preocupa:
-
la "salida" del container:
- Logging
- Monitoreo
- Acceso remoto
- Configuraciones de red
- todos los containers tienen start, stop, attach, copy, migrate, etc. de la misma manera
Beneficios para Desarrolladores
Construye una vez ... (por fin) ejecuta en cualquier lugar*
- Un ambiente limpio, seguro, higiénico, portátil de tiempo de ejecución para su aplicación.
- No se preocupa por las dependencias, paquetes y otros puntos de dolor durante los deploy posteriores.
- Reduce/elimina las preocupaciones sobre la compatibilidad en diferentes plataformas, ya sea propia o de sus clientes.
- Tests automatizados, integraciones, empaquetado. Cualquier trabajo con scripts.
- Contenedores con penalización de cero para desplegar servicios. Una máquina virtual sin la sobrecarga de una máquina virtual. Repetición instantánea y restablecimiento de imagenes snapshot.
- Corre cada app en su propio container aislado, por lo tanto podes ejecutar varias versiones de librerías y otras dependencias para cada app sin preocupaciones.
* Donde "en cualquier lugar" significa un servidor x86 ejecutando un kernel Linux moderna (3.2+ general o 2.6.32+ para RHEL 6.5+, Fedora & relacionada)
Beneficios para Operaciones
Configura una vez ... corre lo que sea
- Hace el ciclo de vida más eficiente, consistente y repetible.
- Elimina las inconsistencias entre los entornos de desarrollo, prueba y producción de los clientes.
- Apoya a la separación de incumbencias.
- Mejora significativamente la velocidad y la fiabilidad de la implementación continua y sistemas de integración continua.
- Dado que los contenedores son muy ligeros, mejora significativamente rendimiento, costos, implementación y cuestiones de portabilidad normalmente asociados con las máquinas virtuales.
The matrix from hell

The matrix from hell (II)

Un motor que permite encapsular cualquier carga como un ligero, portátil, autosuficiente contenedor ...
... que puede ser manipulado usando operaciones estándar y ejecutar consistentemente en prácticamente cualquier plataforma de hardware
The matrix from hell (III)

Workflow
-
Buscar una imagen base en http://hub.docker.com
-
docker pull <image name>
Workflow(II)
- Construyo mi app a partir de esta imagen
-
commit del container de la nueva imagen
-
-
push de la imagen al docker registry (public or private)
-
docker commit <container id> user/imagedocker push user/imagedocker commit <container id> user/image
Workflow(III)
- La imagen en el repositorio ahora puede ser deployada en cualquier parte

Dockerfile
FROM ubuntu:15.10
# Update aptitude with new repo
RUN apt-get update
# Install software
RUN apt-get install -y git python3.5 redis-server wget vim curl
RUN ln -sf /usr/bin/python3.5 /usr/bin/python3 && ln -sf /usr/bin/pyvenv3.5 /usr/bin/pyvenv3
RUN wget --no-check-certificate https://bootstrap.pypa.io/get-pip.py
RUN python3 get-pip.py
# Expose ports.
EXPOSE 6379
# Make ssh dir
RUN mkdir /root/.ssh/
# Copy over private key, and set permissoins
ADD id_rsa /root/.ssh/id_rsa
RUN chmod 600 /root/.ssh/id_rsa
# Create known_hosts
RUN touch /root/.ssh/known_hosts
# Add bitbuckets key
RUN ssh-keyscan bitbucket.org >> /root/.ssh/known_hosts
# Clone the conf files into the docker container
RUN git clone git@bitbucket.org:cablevisionarq/cv-provisioning.git
# Set the timezone.
RUN echo "America/Argentina/Buenos_Aires" > /etc/timezone && dpkg-reconfigure -f noninteractive tzdata
# Place on provisioning path
WORKDIR /cv-provisioning
# Install provisioning dependencies
RUN pip install -r requirements.txt
# Starts provisioning process
CMD redis-server /etc/redis/redis.conf && python3 app.pyBeneficios
Ecosistema

Q&A
Demo
Contacto
Referencias
Text
- docker.io
- http://pointful.github.io/docker-intro/#
- http://www.slideshare.net/cm13/introduction-to-docker-48784005
- http://www.slideshare.net/dotCloud/why-docker?related=1
- http://www.slideshare.net/jpetazzo/introduction-docker-linux-containers-lxc
Introducción a Docker
By lukebell
Introducción a Docker
- 308