2015/05/10 - AWS - Manage Docker-Enabled Apps in EC2

47
©2015, Amazon Web Services, Inc. or its affiliates. All rights reserved Amazon EC2 Container Service: Manage Docker-Enabled Apps in EC2 Chris Barclay Principal Product Manager

Transcript of 2015/05/10 - AWS - Manage Docker-Enabled Apps in EC2

Page 1: 2015/05/10 - AWS - Manage Docker-Enabled Apps in EC2

©2015, Amazon Web Services, Inc. or its affiliates. All rights reserved

Amazon EC2 Container Service:

Manage Docker-Enabled Apps in EC2Chris Barclay

Principal Product Manager

Page 2: 2015/05/10 - AWS - Manage Docker-Enabled Apps in EC2

Agenda

Containers

EC2 Container Service

Common patterns

Demo

Q&A

Page 3: 2015/05/10 - AWS - Manage Docker-Enabled Apps in EC2

Containers

Page 4: 2015/05/10 - AWS - Manage Docker-Enabled Apps in EC2

What are containers?

OS virtualization

Process isolation

Images

Automation Server

Guest OS

Bins/Libs Bins/Libs

App2App1

Page 5: 2015/05/10 - AWS - Manage Docker-Enabled Apps in EC2

Container advantages

Portable

Server

Guest OS

Bins/Libs Bins/Libs

App2App1

Page 6: 2015/05/10 - AWS - Manage Docker-Enabled Apps in EC2

Container advantages

Flexible

Server

Guest OS

Bins/Libs Bins/Libs

App2App1

Page 7: 2015/05/10 - AWS - Manage Docker-Enabled Apps in EC2

Container advantages

Fast

Server

Guest OS

Bins/Libs Bins/Libs

App2App1

Page 8: 2015/05/10 - AWS - Manage Docker-Enabled Apps in EC2

Container advantages

Efficient

Server

Guest OS

Bins/Libs Bins/Libs

App2App1

Page 9: 2015/05/10 - AWS - Manage Docker-Enabled Apps in EC2

A container pipeline

IT Operations

Base

Image

PatchesUtilities

Page 10: 2015/05/10 - AWS - Manage Docker-Enabled Apps in EC2

A container pipeline

IT Operations

Base

Image

PatchesUtilities

Ruby

Redis

Logger

Page 11: 2015/05/10 - AWS - Manage Docker-Enabled Apps in EC2

A container pipeline

IT Operations Developer

Base

Image

PatchesUtilities

Ruby

Redis

Logger

App

Page 12: 2015/05/10 - AWS - Manage Docker-Enabled Apps in EC2

A container pipeline

IT Operations Developer

Base

Image

PatchesUtilities

Ruby

Redis

Logger

App

Page 13: 2015/05/10 - AWS - Manage Docker-Enabled Apps in EC2

Demo

Page 14: 2015/05/10 - AWS - Manage Docker-Enabled Apps in EC2

Server

Guest OS

Bins/Libs Bins/Libs

App2App1

Page 15: 2015/05/10 - AWS - Manage Docker-Enabled Apps in EC2

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

Page 16: 2015/05/10 - AWS - Manage Docker-Enabled Apps in EC2

EC2 Container Service Benefits

Page 17: 2015/05/10 - AWS - Manage Docker-Enabled Apps in EC2

Easily Manage Clusters for Any Scale

Nothing to run

Complete state

Control and monitoring

Scale

Page 18: 2015/05/10 - AWS - Manage Docker-Enabled Apps in EC2

Flexible Container Placement

Applications

Batch jobs

Multiple schedulers

Page 19: 2015/05/10 - AWS - Manage Docker-Enabled Apps in EC2

Designed for use with other AWS services

Elastic Load Balancing

Amazon Elastic Block Store

Amazon Virtual Private Cloud

AWS Identity and Access Management

AWS CloudTrail

Page 20: 2015/05/10 - AWS - Manage Docker-Enabled Apps in EC2

Extensible

Comprehensive APIs

Open source agent

Custom schedulers

Page 21: 2015/05/10 - AWS - Manage Docker-Enabled Apps in EC2

Common Patterns

Page 22: 2015/05/10 - AWS - Manage Docker-Enabled Apps in EC2

Pattern 1: Services and applications

Simple to model

Micro services

Blue / green deployments

Phong Nguyen, Founder at Gilt

Groupe, said, "As we Dockerize

all our services, it is very

important for us to have a

platform that can help us speed

up deployments, automate our

services, and gain greater

efficiencies. The new service

scheduler and ELB integration

make Amazon ECS an excellent

platform for our services.”

Page 23: 2015/05/10 - AWS - Manage Docker-Enabled Apps in EC2

Pattern 2: Batch jobs

Share resource pools

Ideal for bursty jobs

Spot instances

“We required a solution on which

we could securely and efficiently

deploy Docker containers to

encapsulate learner

programming assignment

submissions,” said Brennan

Saeta, Architect at Coursera. “We

are using Amazon EC2 Container

Service to power our new

programming assignments

infrastructure for next-generation

On-Demand course platform.”

Page 24: 2015/05/10 - AWS - Manage Docker-Enabled Apps in EC2

EC2 Container Service Terminology

Page 25: 2015/05/10 - AWS - Manage Docker-Enabled Apps in EC2

Amazon EC2 instances

Docker daemon

Amazon ECS agent

Key Components: Container Instances

Page 26: 2015/05/10 - AWS - Manage Docker-Enabled Apps in EC2

Regional

Resource pool

Grouping of Container Instances

Start empty, dynamically scalable

Key Components: Clusters

Page 27: 2015/05/10 - AWS - Manage Docker-Enabled Apps in EC2

Key Components: Task Definitions

Volume Definitions

Container Definitions

Page 28: 2015/05/10 - AWS - Manage Docker-Enabled Apps in EC2

Key Components: Task Definitions

Shared Data Volume

PHP App Time of day App

Page 29: 2015/05/10 - AWS - Manage Docker-Enabled Apps in EC2

Key Components: Task Definitions{

"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

}

Page 30: 2015/05/10 - AWS - Manage Docker-Enabled Apps in EC2

{

"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

},

Key Components: Task Definitions[

{

"image": "mysql",

"name": "db",

"cpu": 10,

"memory": 500,

"essential": true,

"entryPoint": [

"/entrypoint.sh"

],

"environment": [

{

"name": "MYSQL_ROOT_PASSWORD",

"value": "pass"

}

],

"portMappings": []

}

]

Essential to our Task

Create and mount volumes

Expose port 80 in container

to port 80 on host

10 CPU Units (1024 is full CPU),

500 Megabytes of Memory

Page 31: 2015/05/10 - AWS - Manage Docker-Enabled Apps in EC2

{

"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

}

Key Components: Task Definitions[

{

"image": "tutum/wordpress-stackable",

"name": "wordpress",

"cpu": 10,

"memory": 500,

"essential": true,

"links": [

"db"

],

"entryPoint": [

"/bin/sh",

"-c"

],

"environment": [

],

"portMappings": [

{

"containerPort": 80,

"hostPort": 80

}

]

},

]

From Docker Hub

Mount volume from other container

Command to exec

Page 32: 2015/05/10 - AWS - Manage Docker-Enabled Apps in EC2

Key Components: Tasks

Container

Instance

Schedule

Shared Data Volume

PHP App Time of day App

Shared Data Volume

PHP AppTime of

day App

Page 33: 2015/05/10 - AWS - Manage Docker-Enabled Apps in EC2

Unit of work

Grouping of related Containers

Run on Container Instances

Key Components: Tasks

Page 34: 2015/05/10 - AWS - Manage Docker-Enabled Apps in EC2

Key Components: Run a task

Good for short-lived

containers, e.g.

batch jobs

Page 35: 2015/05/10 - AWS - Manage Docker-Enabled Apps in EC2

Key Components: Create a Service

Good for long-

running applications

and services

Page 36: 2015/05/10 - AWS - Manage Docker-Enabled Apps in EC2

Key Components: Create Service

Load Balance traffic across containers

Automatically recover unhealthy containers

Discover services

Shared Data Volume

PHP

App

Time of

day

App

Shared Data Volume

PHP

App

Time of

day

App

Shared Data Volume

PHP

App

Time of

day

App

Elastic Load Balancing

Page 37: 2015/05/10 - AWS - Manage Docker-Enabled Apps in EC2

Key Components: Update Service

Scale up

Scale down

Elastic Load Balancing

Shared Data Volume

PHP

App

Time of

day

App

Shared Data Volume

PHP

App

Time of

day

App

Shared Data Volume

PHP

App

Time of

day

App

Shared Data Volume

PHP

App

Time of

day

App

Page 38: 2015/05/10 - AWS - Manage Docker-Enabled Apps in EC2

Key Components: Update Service

Deploy new version

Drain connections

Elastic Load Balancing

Shared Data Volume

PHP

App

Time of

day

App

Shared Data Volume

PHP

App

Time of

day

App

Shared Data Volume

PHP

App

Time of

day

App

Page 39: 2015/05/10 - AWS - Manage Docker-Enabled Apps in EC2

Key Components: Update Service

Deploy new version

Drain connections

Shared Data Volume

PHP

App

Time of

day

App

Shared Data Volume

PHP

App

Time of

day

App

Shared Data Volume

PHP

App

Time of

day

App

Elastic Load Balancing

Page 40: 2015/05/10 - AWS - Manage Docker-Enabled Apps in EC2

Key Components: Update Service

Deploy new version

Drain connections

Shared Data Volume

PHP

App

Time of

day

App

Shared Data Volume

PHP

App

Time of

day

App

Elastic Load Balancing

Shared Data Volume

PHP

App

Time of

day

App

Page 41: 2015/05/10 - AWS - Manage Docker-Enabled Apps in EC2

Demo

Page 42: 2015/05/10 - AWS - Manage Docker-Enabled Apps in EC2

Typical user workflow

I want to run a service

Page 43: 2015/05/10 - AWS - Manage Docker-Enabled Apps in EC2

Typical user workflow

Run Instances Amazon

EC2

Use custom AMI with

Docker support and

ECS Agent. Instances

will register with

default cluster.

Page 44: 2015/05/10 - AWS - Manage Docker-Enabled Apps in EC2

Typical user workflow

Create Task Definition

Declare resource

requirements for

containers

Shared Data Volume

PHP AppTime of day

App

Page 45: 2015/05/10 - AWS - Manage Docker-Enabled Apps in EC2

Typical user workflow

Create Service

Declare resource

requirements for

service

Shared Data Volume

PHP AppTime of day

App

Elastic

Load

Balancing

X 5

Page 46: 2015/05/10 - AWS - Manage Docker-Enabled Apps in EC2

Typical user workflow

Describe Service

Page 47: 2015/05/10 - AWS - Manage Docker-Enabled Apps in EC2

©2015, Amazon Web Services, Inc. or its affiliates. All rights reserved

Q&A