Docker
ECS
Amazon Web Services
Deployment
Containerization

How do I deploy updated Docker images to Amazon ECS tasks?

System Design practice on Codemia

Work through 120+ system design problems with detailed solutions, from rate limiters to multi-region storage.

Practice system design

Amazon Elastic Container Service (ECS) is a highly scalable, high-performance container management service that supports Docker containers. Using ECS, you can easily run, stop, and manage Docker containers on a cluster of Amazon EC2 instances. When dealing with ECS tasks, deploying updated Docker images can be a critical part of maintaining modern microservices platforms. Below is a detailed guide on how to deploy updated Docker images to Amazon ECS tasks.

Prerequisites

Before we start, ensure you have the following:

  • An AWS account
  • AWS CLI configured on your local machine
  • Docker installed and running
  • An ECS cluster set up
  • A Docker image you want to update on ECS

Step-by-Step Guide on Deploying Updated Docker Images to ECS

1. Update Your Docker Image

First, ensure that your Docker image is updated with the necessary changes. For instance, if you are adding a new feature, modify your Dockerfile and then build the image:

bash
docker build -t myrepo/myapp:latest .

Verify that the updated image is as expected:

bash
docker run --rm myrepo/myapp:latest

2. Push the Updated Image to Amazon ECR

Once you are satisfied with your updated image, push it to Amazon Elastic Container Registry (ECR):

  • Authenticate Docker to your ECR:
bash
  aws ecr get-login-password --region <your-region> | docker login --username AWS --password-stdin <aws_account_id>.dkr.ecr.<your-region>.amazonaws.com
  • Tag the image for ECR:
bash
  docker tag myrepo/myapp:latest <aws_account_id>.dkr.ecr.<your-region>.amazonaws.com/myapp:latest
  • Push the image to ECR:
bash
  docker push <aws_account_id>.dkr.ecr.<your-region>.amazonaws.com/myapp:latest

3. Update the ECS Task Definition

ECS task definitions are metadata in JSON format that let you define various parameters for your containers. To deploy the updated image, create a new revision of your task definition.

  • Retrieve Current Task Definition:
bash
  aws ecs describe-task-definition --task-definition my-service
  • Update Image URI in Task Definition:
    Edit the task definition to contain the new image URI from ECR and save it to a new JSON file.

Example task definition update:

json
1{
2  "containerDefinitions": [
3    {
4      "name": "myapp",
5      "image": "<aws_account_id>.dkr.ecr.<your-region>.amazonaws.com/myapp:latest",
6      "memory": 512,
7      "cpu": 256,
8      ...
9    }
10  ],
11  ...
12}
  • Register New Task Definition:
bash
  aws ecs register-task-definition --cli-input-json file://path/to/updated-task-definition.json

4. Update the ECS Service to Use the New Task Definition

To deploy the new task definition, update the ECS service to use the new revision:

bash
aws ecs update-service --cluster my-cluster --service my-service --task-definition my-service

5. Verify Deployment

  • Check Service Status:
bash
  aws ecs describe-services --cluster my-cluster --services my-service
  • Confirm New Image is Running: Verify through the ECS console that the tasks within your service are running the newly updated Docker image.

Additional Tips

  • Automated Deployments:
    Use AWS CodePipeline and CodeBuild for continuous delivery, automating the build and deployment of Docker images.
  • Blue/Green Deployments:
    Consider using AWS ECS Blue/Green deployment strategy which leverages CodeDeploy to reduce downtime during deployments.
  • Monitoring and Logging:
    Integrate with AWS CloudWatch for monitoring and logging to quickly identify post-deployment issues.

Table of Key Steps

StepDescription
Update Docker ImageBuild and tag the new Docker image locally.
Push Image to ECRAuthenticate Docker to ECR and push the updated image.
Update Task DefinitionRetrieve, edit, and register a new revision of the task definition with the new image.
Update ECS ServiceUse the new task definition revision in your desired ECS service.
Verify DeploymentCheck the ECS service and tasks to ensure the new image is running successfully.

By following these steps, you can effectively deploy updated Docker images to your Amazon ECS tasks, ensuring your applications are running with the latest changes and improvements.


Related reading
Course
Beginner
27 lessons
10 hours
System Design Fundamentals

Build a strong foundation in designing scalable, reliable distributed systems.

View the course
Track what you have practised

A free account saves your progress, solutions and study plan across every problem on Codemia.

System Design practice on Codemia

Work through 120+ system design problems with detailed solutions, from rate limiters to multi-region storage.

Practice system design