Qué es Docker?

Arquitectura

Virtual Machine vs Container

Virtual Machine

Docker

  • Virtualiza a nivel de hardware
  • ​Virtualiza a nivel 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/image
docker 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.py

Demo

Q&A

Contacto

@aalonzolu

Introducción a Docker

By Andy Alonzo

Introducción a Docker

  • 31