Amazon EC2 Container Service
-
Upload
amazon-web-services -
Category
Technology
-
view
415 -
download
0
Transcript of Amazon EC2 Container Service
©2015, Amazon Web Services, Inc. or its affiliates. All rights reserved
Amazon EC2 Container Service:
Manage Docker-Enabled Apps in EC2
Jafar Shameem
Agenda
• Containers
• EC2 Container Service
Containers
What are containers?
• OS virtualization
• Process isolation
• Images
• Automation Server
Guest OS
Bins/Libs Bins/Libs
App2App1
Container advantages
PortableSame Immutable Images. Run anywhere.
FlexibleCreate Modular Environments. Decompose Apps
FastSpeeds up build and release cycle
EfficientOptimize resource utilization
Server
Guest OS
Bins/Libs Bins/Libs
App2App1
A container pipeline
Base
image
Patches
IT Operations
Utilities
A container pipeline
Base
image
Patches
IT Operations
Ruby
Redis
Logger
Utilities
A container pipeline
Base
image
Patches
IT Operations Developer
Ruby
Redis
Logger
Utilities
App
A container pipeline
Base
image
Patches
IT Operations Developer
Ruby
Redis
Logger
Utilities
App
Server
Guest OS
Bins/Libs Bins/Libs
App2App1
$ docker run myimage
EC2 Container Service
Easily Manage Clusters for Any Scale
• Nothing to run
• Complete state
• Control and monitoring
• Scale
ECS List* and Describe* API actions
Flexible Container Placement
• Applications
• Batch jobs
• Multiple schedulers
Designed for use with other AWS services
• Virtual Private Cloud
• Elastic Load Balancing
• Elastic Block Store
• IAM
• CloudTrail
Extensible
• Comprehensive APIs
• Open source agent
• Custom schedulers
Common Patterns
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.”
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.”
EC2 Container Service Terminology
• Regional
• Resource pool
• Grouping of Container Instances
• Start empty, dynamically scalable
Key Components: Clusters
• Amazon EC2 instances
• Docker daemon
• Amazon ECS agent
Key Components: Container Instances
Key Components: Task Definitions
Volume definitions
Container definitions
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
}
{
"environment": [],
"name": "simple-demo",
"image": “amazon/amazon-ecs-sample",
"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
{
"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
• Unit of work
• Grouping of related Containers
• Run on Container Instances
Key Components: Tasks
Key Components: Tasks
Container
Instance
Schedule
Shared data volume
PHP AppTime of day
App
Key Components: Run a task
Good for short-lived
containers, e.g.
batch jobs
Key Components: Create a Service
Good for long-
running applications
and services
Key Components: Create Service
• Load Balance traffic across containers
• Automatically recover unhealthy containers
• Discover services
Elastic Load Balancing
Key Components: Update Service
• Scale up
• Scale down
Elastic Load Balancing
Key Components: Update Service
• Deploy new version
• Drain connections
Elastic Load Balancing
Key Components: Update Service
• Deploy new version
• Drain connections
Elastic Load Balancing
Key Components: Update Service
• Deploy new version
• Drain connections
Elastic Load Balancing
More resources
• Service Discovery via Consul with ECS:– https://aws.amazon.com/blogs/compute/service-discovery-via-
consul-with-amazon-ecs/
• Running an Amazon ECS Task on every instance:– https://aws.amazon.com/blogs/compute/running-an-amazon-ecs-
task-on-every-instance/
• Set up a build pipeline with Jenkins and ECS:– https://blogs.aws.amazon.com/application-
management/post/Tx32RHFZHXY6ME1/Set-up-a-build-pipeline-with-Jenkins-and-Amazon-ECS
©2015, Amazon Web Services, Inc. or its affiliates. All rights reserved
Thank You