Optimizing AWS Costs: Step-by-Step Guide to Uploading Public Docker Images to Private ECR

Satish Rundla
Cypik
Published in
3 min readApr 15, 2024

A smarter approach is to store your Docker Hub images in the Amazon Elastic Container Registry (ECR), an AWS-managed Docker container registry. By doing so, you can significantly reduce data transfer costs when deploying containers on AWS services like Amazon Elastic Kubernetes Service (EKS) or Amazon Elastic Container Service (ECS). In this blog post, we’ll walk you through the steps to achieve this cost-saving strategy. For more info, you can check here See How AWS Calculates Data Transfer Cost

A more efficient strategy involves storing your Docker Hub images in the Amazon Elastic Container Registry (ECR), an AWS-managed Docker container registry. This approach allows for substantial reductions in data transfer costs when deploying containers on AWS services such as Amazon Elastic Kubernetes Service (EKS) or Amazon Elastic Container Service (ECS). In this article, we’ll guide you through the process of implementing this cost-saving tactic.

Why Move Docker Hub Images to ECR?

Before we dive into the “how,” let’s understand the “why.” Here are some compelling reasons to move your Docker Hub images to Amazon ECR:

  1. Reduced Data Transfer Costs: AWS services typically don’t incur data transfer charges when pulling images from ECR repositories within the same AWS region.
  2. Improved Latency: Storing images in ECR ensures faster container deployments since the images are located closer to your AWS resources.
  3. Increased Control: You have full control over image versions, access policies, and security in your ECR repository.

Now, let’s get started with the steps to migrate your Docker Hub images to ECR.

Step 1: Create an ECR Repository

Begin by creating a new ECR repository. You can do this through the AWS Management Console, AWS CLI, or an Infrastructure-as-Code (IaC) tool like AWS CloudFormation or Terraform. Here’s an example using the AWS CLI:

aws ecr create-repository --repository-name my-docker-repo

Replace my-docker-repo with a name that reflects the content of your Docker images.

Step 2: Log in to Docker Hub

Use the docker login command to log in to your Docker Hub account. You'll need this to pull images from Docker Hub.

docker login

Step 3: Pull the Docker Hub Image

Pull the Docker Hub image you want to migrate into your local environment.

docker pull dockerhubusername/imagename:tag

Replace dockerhubusername, imagename, and tag with your Docker Hub image details.

Step 4: Tag the Docker Image for ECR

Tag the Docker image with the ECR repository URI. Replace account-id, my-docker-repo, and my-tag with your AWS account ID, ECR repository name, and desired tag. Here's an example:

docker tag dockerhubusername/imagename:tag account-id.dkr.ecr.region.amazonaws.com/my-docker-repo:my-tag

Step 5: Push the Image to ECR

Push the Docker image to your ECR repository.

docker push account-id.dkr.ecr.region.amazonaws.com/my-docker-repo:my-tag

Step 6: Use ECR Image in Your AWS Services

Update your AWS services (EKS, ECS, etc.) to use the image from your ECR repository. Replace references to the Docker Hub image with the ECR image URI.

Step 7: Clean Up

You can now remove the local Docker image since it’s already pushed to ECR.

docker rmi dockerhubusername/imagename:tag

By following these steps, you’ve successfully migrated your Docker Hub image to Amazon ECR, saving data transfer costs and improving the efficiency of your container deployments.

Remember to set up appropriate IAM roles and permissions to allow your AWS services to access your ECR repository. Additionally, consider automating this process in your CI/CD pipeline for seamless image updates and deployments.

In conclusion, optimizing your container workflows in AWS is not just about functionality; it’s also about cost-efficiency. By moving your Docker Hub images to Amazon ECR, you can enjoy the benefits of AWS-managed container repositories while reducing data transfer costs.

Enjoy it! That’s It; we are done…

For hassle-free Cloud Management with DevOps at the center of the process, contact us at info@cypik.com
Cypik

About the author:
I’m Satish Chand Rundla, an experienced DevOps engineer at Cypik. With a strong focus on automating development processes, my expertise lies in the AWS cloud and Terraform platforms. Currently, I’m part of the team at Cypik, I strive to optimize software delivery and infrastructure management, aiming to increase efficiency and scalability in all aspects of our work.

--

--

Satish Rundla
Cypik
Writer for

DevOps Engineer || DevOps || Aws || Jenkins || Networking || Terraform || Github || Mysql || Ansible || Linux || Docker