A container is a package that contains an application, libraries, and file system required to run it. Containers run on a container engine that generally runs within a single OS, such as Linux. Containers provide the isolation benefits of virtualization but are more lightweight, allowing faster starts and more dense packing within a host.

A popular container engine is Docker, which is the basis for Elastic Container Service (ECS).

An image is a collection of file system layers. Docker file systems are differential — each layer stores differences from previous layers.


ECS is a managed container engine. It allows Docker containers to be deployed and managed within AWS environments. ECS can use infrastructure clusters based on EC2

or Fargate where AWS manages the backing infrastructure.



A logical collection of ECS resources — either ECS EC2 instances or a logical representation of managed Fargate infrastructure

Task Definition

Defines your application. Similar to a Dockerfile but for running containers in ECS. Can contain multiple containers.

Container Definition

Inside a task definition, a container definition defines the individual containers a task uses. It controls the CPU and memory each container has, in addition to port mappings for the container.


A single running copy of any containers defined by a task definition. One working copy of an application (e.g., DB and web containers).


Allows task definitions to be scaled by adding additional tasks. Defines minimum and maximum values.


Storage for container images (e.g., ECS Container Registry or Dockerhub). Used to download image to create containers.