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