Fundamentos

Agenda

  • Antecedentes

  • ¿Qué es Docker?

  • Vista general de la plataforma y terminología

  • Beneficios

  • Demo

En un principio todo era oscuridad…

Aplicaciones monolíticas:

 

  • Lentitud en los despliegues
  • Altos costos
  • Difícil de escalar
  • Difícil de migrar
  • Atados a un fabricante

Después vinieron las máquinas virtuales...

y con ellas:

•Un servidor físico puede contener varias máquinas virtuales

•Cada aplicación puede correr en su propia máquina virtual

•Mejor distribución de recursos

•Fácilmente escalable

Pero...

  • Cada una requiere provisionar:
    • CPU
    • Almacenamiento(Muuuuucho)
    • RAM
  • Un sistema operativo completo
  • Cada sistema operativo guest es un desperdicio de almacenamiento
  • No se garantiza que la aplicación sea portable

Virtualización basada en contenedores.

  • Hace uso del kernel de la maquina host para ejecutar múltiples instancias guest las cuales son llamadas contenedores:

    Cada contenedor cuenta con:
    • Sistema de archivos

    • Procesos

    • Memoria

    • Dispositivos

    • Puertos de red

 

Contenedores vs Virtual Machines

  • Son mas livianos(Muuuuucho mas livianos)
  • No se necesita instalar el sistema operativo
  • Consumen menos CPU, RAM y almacenamiento
  • Si hacemos las matemáticas, podemos tener muchos mas contenedores por maquina que maquinas virtuales
  • Nos permiten mas portabilidad de nuestras aplicaciones

 

¿Qué es Docker?

  • Una plataforma abierta para construir, distribuir y ejecutar aplicaciones distribuidas usando virtualización basada en contenedores
  • Consiste en multiples productos y/o herramientas
    • Docker Engine
    • Docker Hub
    • Docker Machine
    • Docker Swarm
    • Docker Compose
    • Kitematic

 

Vista general de la plataforma y terminología

  • Docker Engine
  • Images
  • Containers
  • Registry
  • Repositories
  • Docker Hub
  • Docker Tools

 

Vista general de la plataforma y terminología

  • Docker Engine
    Es el programa que permite construir, desplegar y ejecutar los contenedores. Hace uso de los namespaces y los control groups del Kernel de Linux

 

Vista general de la plataforma y terminología

  • ​Images
    Templates de solo lectura que permiten crear contenedores, pueden ser creadas por nosotros o cualquier usuario de la plataforma y pueden ser guardadas en el Docker Hub o en un registro local
     
  • Containers
    Proveen la plataforma para el aislamiento de las aplicaciones, basados en una o mas imágenes, contienen todo lo necesario para correr nuestra aplicación

Vista general de la plataforma y terminología

  • ​Registry
    Sitio donde se crean los repositorios para subir o guardar las images Podemos tener nuestro propio Registry o podemos usar el de Docker(Docker Hub)
     
  • Repository
    Repositorio para subir las images

 

Vista general de la plataforma y terminología

  • Docker Hub
    ​Registry público
     
  • Docker Tools
    • Docker Machine: Herramienta para provisionar hosts con la plataforma Docker instalada
    • Docker Swarm: Herramienta para crear clústeres de Docker Engines
    • Docker Compose: Herramienta para crear aplicaciones multi-container

 

Beneficios

  • Separación de responsabilidades
  • Los desarrolladores podemos enfocarnos en solo construir nuestras aplicaciones
  • Los administradores de TI se enfocan solo en el despliegue
  • Ciclos de desarrollo mas rápidos
  • Permite distribuir aplicaciones de forma fácil y rápida.
  • Permite empaquetar la aplicación con todas sus dependencias y configuraciones.
  • Mayor portabilidad
  • La aplicación funciona de la misma forma independiente del ambiente o la infraestructura
  • Facilidad de mantenimiento
  • Fácilmente escalable
  • Mejor administración de recursos(Mas aplicaciones por host)

 

Demo time!

Instalación

Containers

Crear un Container

 

  • Sintáxis
    Sudo docker run [options] [image] [command] [args]
    [image] está especificado por repository:tag

 

Container con opciones

 

Con Terminal

  • Usar –i y –t con el docker run
  • -i le indica a docker que se conecte al STDIN del container
  • -t indica que debe obtener una pseudo-terminal


Se necesita especificar un proceso de terminal como comando(ej. /bin/bash)

 

 

Procesos en los containers

 

  • Un container permanece activo solo mientras el proceso con el cual se ejecutó(docker run [command]) este corriendo
  • Dicho comando siempre tiene asignado el PID 1 en el container

 

 

Listar los containers

 

  • El comando docker ps se usa para listar todos los containers que se estan ejecutando
  • El parámetro –a se usa para listar  todos los containers incluidos los que ya no están ejecutando

 

 

Ejecutar containers in background

 

  • También llamado ejecutar en modo “detached”.
  • Para observar el output usamos el comando “docker logs [container id]”

 

 

Images

Images

  • Estan definidas por repository:tag
  • Una misma imagen puede tener multiples tags
  • El tag por defecto es latest
  • Pueden estar compuestas por una o múltiples capas
  • Cada imagen contiene una capa base
  • Una capa es sólo otra imagen
  • Las capas son de solo lectura

 

Crear images

Flujo normal

Crear images

Dockerfile

¿Q and A?

Algunas referencias...

Docker

By AresDev

Docker

  • 245