docker ecs en aws
TRANSCRIPT
© 2016, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Raúl Frías, Arquitecto de Soluciones
Docker en AWS
Agenda
• Docker y contenedores
• Administración de Clusters
• Amazon EC2 Container Service
• Conceptos
• Demo
El Problema
Diferentes grupos de
aplicaciones
Ambientes de Hardware
diferentes
¿Cómo establecer algo de
consistencia entre ambientes?
¿Cómo migrar de un ambiente
a otro fácilmente?
Static website
Web fronted
Background workers
User DB
Analytics DB
Queue
Develop-
ment VM
QA
Server
Single
Prod
Server
Onsite
Cluster
Public
Cloud
Contributor’s
laptop
Customer
Servers
Static website
Webfronted
Background workers
User DB
Analytics DB
Queue
Develop-
ment VM
QA
Server
Single
Prod
Server
Onsite
Cluster
Public
Cloud
Contributor’s
laptop
Customer
Servers
La Solución
Unidad de Entrega de SW
Portátil, Ligero, Consistente
Ejecutar en cualquier lugar
Ejecutar cualquier cosa
Docker
Plataforma ligera de virtualización de contenedores
Herramientas para gestionar y ejecutar aplicaciones
Bajo la licencia Apache 2.0
Contruido por Docker, Inc.
¿Qué son los contenedores?
• Virtualización del S.O.
• Aislamiento de procesos
• Imágenes
• Automatización
Server
Guest OS
Bins/Libs Bins/Libs
App2App1
VMs vs. Contenedores
App A App B App C
Bins/Libs Bins/Libs Bins/Libs
Guest OS Guest OS Guest OS
Hypervisor
Host OS
Server (Host)
App A App A App B App B App C App C
Bins/Libs Bin/Libs
Content Manager (Docker)
Host OS
Server (Host)
VMs Contenedores
Motor Docker + Registro
Docker daemon
Docker client
Image source - https://docs.docker.com/engine/introduction/understanding-docker/
Client DOCKER_HOST Registry
docker build
docker run
docker pull
Docker daemon
Containers Images
Docker Daemon
Corre sobre un servidor o host
Construye imágenes
Ejecuta Contenedores
Usuarios interactúan con el proceso a través del cliente Docker
Cliente Docker
Binario, ejecutable Docker
Interfaz primaria para interactuar con Docker
Comunica ida y vuelta con el daemon Docker
Docker Hub
Registro basado en la nube propiedad de Docker
Librería de imágenes públicas (repositorios Oficiales)
Almacenamiento para sus imágenes (repositorios públicos/privados)
Contrucción automátizada de imágenes
Imágen Docker
Template de solo léctura
Utilizado para ejecutar un contenedor
Union file systems para combinar
varias capas en una sola imágen
Imágenes construidas de una imagen
base, instrucciones añaden capas superiores
Instrucciones almacenadas en el Dockerfile
bootfs
kernel
Imágen Base
Imágen
Imágen
Contenedor
Refiere a la
imagen
padre
Server
Guest OS
Bins/Libs Bins/Libs
App2App1
Administrar un recurso es sencillo
$ docker run myimage
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Server
Guest OS
Administrar un cluster no lo es tanto
• ¿Qué instancias están disponibles?
• ¿Qué recursos CPU/RAM están disponibles?
• ¿Cómo saber si un contenedor muere?
• ¿Cómo saber si una instancia muere?
• ¿Cómo integro otros recursos como un ELB?
Administración Clusters Sencilla
• No hay software que instalar o administrar
• Gestiona el estado del cluster
• Gestiona contenedores
• Control y Monitoreo
• Escalamiento de 1 a 1000´s de contenedores
Diseñado para AWS
Elastic Load Balancing
Amazon Elastic Block Store
Amazon Virtual Private Cloud
AWS Identity and Access Management
AWS CloudTrail
Instancias Amazon EC2
Docker daemon
Agente Amazon ECS
Componentes clave: Instancias para
Contenedores
Regionales
Colección de recursos
Grupo de instancias para contenedores
Escalamiento dinámico
Componentes clave: Clusters
Definición de Tareas
{
"environment": [],
"name": "simple-demo",
"image": "my-demo",
"cpu": 10,
"memory": 500,
"portMappings": [
{
"containerPort": 80,
"hostPort": 80
}
],
"mountPoints": [
{
"sourceVolume": "my-vol",
"containerPath": "/var/www/my-
vol"
}
],
"entryPoint": [
"/usr/sbin/apache2",
"-D",
"FOREGROUND"
],
"essential": true
},
{
"name": "busybox",
"image": "busybox",
"cpu": 10,
"memory": 500,
"volumesFrom": [
{
"sourceContainer": "simple-demo"
}
],
"entryPoint": [
"sh",
"-c"
],
"command": [
"/bin/sh -c \"while true; do
/bin/date > /var/www/my-vol/date; sleep 1; done\""
],
"essential": false
}
{
"environment": [],
"name": "simple-demo",
"image": "my-demo",
"cpu": 10,
"memory": 500,
"portMappings": [
{
"containerPort": 80,
"hostPort": 80
}
],
"mountPoints": [
{
"sourceVolume": "my-vol",
"containerPath": "/var/www/my-
vol"
}
],
"entryPoint": [
"/usr/sbin/apache2",
"-D",
"FOREGROUND"
],
"essential": true
},
Definición de Tareas[
{
"image": "mysql",
"name": "db",
"cpu": 10,
"memory": 500,
"essential": true,
"entryPoint": [
"/entrypoint.sh"
],
"environment": [
{
"name": "MYSQL_ROOT_PASSWORD",
"value": "pass"
}
],
"portMappings": []
}
]
Esencial para nuestra Tarea
Crear y montar volúmenes
Exponer puerto 80 del contenedorAl puerto 80 del host
10 Unidades de CPU (1024 100% CPU),500 MB de memoria
{
"name": "busybox",
"image": "busybox",
"cpu": 10,
"memory": 500,
"volumesFrom": [
{
"sourceContainer": "simple-demo"
}
],
"entryPoint": [
"sh",
"-c"
],
"command": [
"/bin/sh -c \"while true; do
/bin/date > /var/www/my-vol/date; sleep 1; done\""
],
"essential": false
}
[
{
"image": "tutum/wordpress-stackable",
"name": "wordpress",
"cpu": 10,
"memory": 500,
"essential": true,
"links": [
"db"
],
"entryPoint": [
"/bin/sh",
"-c"
],
"environment": [
…
],
"portMappings": [
{
"containerPort": 80,
"hostPort": 80
}
]
},
]
De Docker Hub
Montar volúmen de otro contenedor
Comandos a ejecutar
Definición de Tareas
Tareas
Instancia para Contenedores
Calendarizar
Volúmen Datos Compartidos
PHP App Time of day App
Shared Data Volume
PHP AppTime of day App
Unidad de trabajo
Agrupamiento de contenedores relacionados *
Corren en instancias para contenedores
Componentes clave: tareas
Componentes clave: Servicios
Para aplicaciones y servicios que
requieran ejecutarpor tiempoprolongado
Servicios
• Balancear tráfico entre varios contenedores
• Automáticamente recuperar instancias de fallas
• Descubrir servicios
Shared Data Volume
PHP AppTime of day App
Shared Data Volume
PHP AppTime of day App
Shared Data Volume
PHP AppTime of day App
Elastic Load Balancing
Actualizar Servicio
• Escalar para mayor o menor capacidad
Elastic Load Balancing
Shared Data Volume
PHP AppTime of day App
Shared Data Volume
PHP AppTime of day App
Shared Data Volume
PHP AppTime of day App
Shared Data Volume
PHP AppTime of day App
Actualizar Servicio
• Desplegar nueva versión
• Drenar conexiones
Elastic Load Balancing
Shared Data Volume
PHP AppTime of day App
Shared Data Volume
PHP AppTime of day App
Shared Data Volume
PHP AppTime of day App
Shared Data Volume
PHP AppTime of day App
Shared Data Volume
PHP AppTime of day App
Shared Data Volume
PHP AppTime of day App
Elastic Load Balancing
Actualizar Servicio
• Desplegar nueva versión
• Drenar conexiones
Shared Data Volume
PHP AppTime of day App
Shared Data Volume
PHP AppTime of day App
Elastic Load Balancing
Shared Data Volume
PHP AppTime of day App
• Desplegar nueva versión
• Drenar conexiones
Actualizar Servicio