docker ecs en aws

49
© 2016, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Raúl Frías, Arquitecto de Soluciones Docker en AWS

Upload: amazon-web-services-latam

Post on 14-Apr-2017

735 views

Category:

Technology


0 download

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

¿Qué es Docker?

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

Ventajas de los contenedores

PortableServer

Guest OS

Bins/Libs Bins/Libs

App2App1

Ventajas de los contenedores

FlexibleServer

Guest OS

Bins/Libs Bins/Libs

App2App1

Ventajas de los contenedores

VelocidadServer

Guest OS

Bins/Libs Bins/Libs

App2App1

Ventajas de los contenedores

EficienteServer

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

Plataforma Docker

Plataforma Docker =

Motor Docker + Docker Hub

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

Administración de Clusters

Server

Guest OS

Bins/Libs Bins/Libs

App2App1

Administrar un recurso es sencillo

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 de Clusters

• Monitorear capacidad

• Crecer capacidad

• Seguridad

Amazon EC2 Container

Service

Arquitectura

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

Escalable

Colocación Flexible De Contenedores

Aplicaciones

Procesos Batch

Multiples Planificadores

Diseñado para AWS

Elastic Load Balancing

Amazon Elastic Block Store

Amazon Virtual Private Cloud

AWS Identity and Access Management

AWS CloudTrail

Extendible

APIs Integrales

Agente CLI Open Source

Planificadores Customizados

Amazon EC2 Container

Service - Conceptos

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

Componentes clave: definición de tareas

Volume definitions

Container definitions

Componentes clave: definición de tareas

Shared data volume

PHP app Time of day app

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

Demo

¡Gracias!