Running Docker In Production Using Amazon ECS
I’m sure you’ve heard about the “Docker hype” in the tech industry these days. Docker has made running applications on any kind of environment super easy. Do you know what makes Docker even more efficient? Using it with Amazon’s ECS. This article on Amazon ECS gives a detailed explanation of using Docker in production using Amazon ECS.
Agenda For This Article:
- Introduction to Docker
- Introduction To Amazon ECS
- How ECS works
- Features And Benefits of using ECS
- Demo: Run A Docker Image In Production Environment Using Amazon ECS
Introduction to Docker
Docker is a software development platform. It’s based on the concept of containerization. It wraps the application along with all its dependencies into a single container image. This container can be deployed on any platform to run that application. So basically these applications run exactly the same regardless of where they are running or on what system they’re running on. It uses an online cloud repository called DockerHub to store all these container images.
Introduction to Amazon ECS
Now that you’ve understood Docker, let’s have a look at ECR. As part of container services platform, AWS provides Amazon EC2 Container Registry (Amazon ECR). Its a fully managed docker container registry.
Now you have your containers, all you need is a platform to host them. This is where ECS come into the picture.
ECS stands for Elastic Container Service. It’s a container management service. Running, stopping or managing Docker containers on an ECS cluster is like taking a walk in the park. You can launch, stop or scale any container-based applications by just making a few simple API calls.
I’m sure you guys would have heard the term microservices which is pretty hot in the tech market right now. Amazon ECS can let you create consistent deployment by building sophisticated application architectures on the microservices model.
ECS also keeps a track of your instances along with their resources. In the above diagram, There is a request to run two containers. ECS will look for instances that have the resources to run these containers, download the containers from the registry and deploy them on the containers accordingly.
How ECS Works
Now that you’ve understood the theoretical concepts let’s dig a little deeper into how ECS works. Let’s take a very common scenario, say you’re running an application that uses two docker container. For instance, one container has the actual application and the other has all the dependencies. You need both of these to successfully run the application.
Amazon ECS consists of the following:
Task Definition
Task definition is basically the blueprint describing the docker containers that are used to run the application. In our case, it will be the two docker containers, details of the images used, the CPU memory to be allocated, environment variables to be declared and used, ports to expose, etc.
Task
A task is an instance of the task definition. It runs the container along with the container details mentioned in the task definition. Multiple tasks are created by a single class definition as and when required.
Service
Service defines the minimum and the maximum tasks that are running from a single task definition at any given point. In our example, if there is one task running from a task definition and if the CPU gets maxed out, ECS adds another task. At the point, the service would be 2 as two tasks are running from one task definition.
ECS Container Instance And ECS Container Agent
Every docker container will run on an EC2 instance. Such EC2 instances are called ECS Container Instance.
Every ECS container instance will have an ECS Container Agent running on it. This agent communicates between the instance and ECS which helps in managing the running containers or even adding new ones.
Cluster
We now have the task definition, tasks, and services. All we need is a platform to hosts these. That platform is the cluster. A cluster is a group of ECS container instances. A cluster can run many services. For instance, you have multiple applications as a part of your project, you can run several of them on a single cluster. This reduces the wastage of the resources and indirectly saves your money.
Features And Benefits Of Using ECS
- It lets you run application containers in a highly available manner across multiple Availability Zones within a Region
- It lets you use containers without infrastructure management.
- You can containerize anything and everything and let ECS manage it.
- It’s super secure as you can store your container images on EC2 container registry which is very safe as your images are encrypted at rest.
- Another amazing feature of ECS which I honestly love is that it keeps the IAM roles separate for every task. The control access to every task is very guided.
Demo: Run A Docker Image In A production Environment Using Amazon ECS
In this demo, I’m going to show you how to use Amazon ECS and run a docker image on it. Let’s get started.
Go to Amazon’s login page and sign in if you already have an account. If you don’t, then go ahead and create a free account. This is the console that you’ll see once you’ve logged in.
Type in “ECS” and click on that service. You’ll see a Get started button if you haven’t created a cluster before. Go ahead by clicking on Get Started.
Running a docker image on AWS ECS has 4 main steps, Container definition, Task definition, Service, Cluster.
Configure Container Definition: Select an image for your container. You have 4 options — A sample application image, Nginx image, tomcat-webserver, and a custom image.
For this demo, I’ve chosen the sample-app.
Click on edit on the top right corner if you wish to change the configuration.
You can edit the container name, the image to use, Memory limits, Port mappings, Health check configurations, Environment configurations, Container timeout configurations, Network settings, Storage and Logging configurations, Resource limits, and Docker Labels. For this demo, I’ve used all the default configurations.
Configure Task Definition: It consists of Task definition name, Network mode, Task execution role, capabilities, task memory, and Task CPU.
You can click on Edit on the top right corner and configure according to your needs. For this demo, I’m using all the default configurations. Once you’re done, click on Next on the bottom right corner.
Configure Service: You can go ahead and change the Service name, Number of desired tasks, Security Group and Select the Load balancer type. For this demo, I haven’t used a load balancer. Click on Next.
Configure Cluster: Configure your cluster by adding a Cluster name and click on Next.
Review: Once you’ve configured everything, you should see something like this.
Review everything and click on Create on the bottom right corner. All the services will now get created. This might take about 10 mins.
Once everything has the completed status, click on View Services
You’ll see something like this. It’s going to show you your cluster details, task definition and an option to delete and update it.
You can check further details like the VPC, Subnets, Tasks, Events, Autoscaling, Deployments, Metrics, Tags and Logs.
Now go ahead and click on task to check out the deployed container.
Click on the task name as shown below.
Click on ENI Id under the Network section.
You’ll be taken to the Network Interface page which would look like this:
Scroll down and you’ll see your IPV4 Public IP. Copy it.
Paste it on any browser like a URL. You’ll see the docker container output there. You’ll see your sample-app.
This was just a sample-app. You can run any kind of application or any kind of Docker image in just a few steps.
This brings us to the end of this Amazon ECS article. I hope you have a better understanding of how Docker works on Windows. Stay tuned for more blogs on the most trending technologies. If you wish to check out more articles on the market’s most trending technologies like Artificial Intelligence, Python, Ethical Hacking, then you can refer to Edureka’s official site.
Do look out for other articles in this series which will explain the various other aspects of DevOps.
2. Git Tutorial
9. How To Orchestrate DevOps Tools?
13. Continuous Delivery vs Continuous Deployment
14. CI CD Pipeline
15. Docker Compose
16. Docker Swarm
18. Ansible Vault
19. Ansible Roles
20. Ansible for AWS
21. Jenkins Pipeline
23. Git vs GitHub
24. Top Git Commands
25. DevOps Interview Questions
28. Git Reflog
29. Top DevOps Skills That Organizations Are Looking For
31. Maven For Building Java Applications
34. Ansible Interview Questions And Answers
35. 50 Docker Interview Questions
37. Jenkins Interview Questions
40. Linux commands Used In DevOps
42. Nagios Interview Questions
44.Difference between Jenkins and Jenkins X
46.Git vs Github
Originally published at https://www.edureka.co on May 31, 2021.