I'm looking for the easiest and fastest way to manage a microservices scalable infrastructure. I chose to use Docker.
But so far, I've faced some different ways to go.
AWS ECS
AWS Elastic Beanstalk
Docker Cloud
Which one would you go? Why?
There's no good answer, it depends on your infrastructure and costs.
AWS ECS: This is the AWS container offering.
Beanstalk: This is PaaS. If you're wanting microservices/scalability this may not be a good fit.
Docker Cloud: If you're an AWS shop I wouldn't go this route. I'm assuming you are since you didn't ask about Kubernetes, GCP, digital ocean, etc.
Edit:
You're not an AWS shop but you have credit. I'd go ECS. You can squeeze more applications out of a VM with docker than Beanstalk. And if you decide to move away from AWS you can take your containers with you. Not the configuration (task definitions are specific to AWS) but the containers themself can be rebuilt and pushed somewhere else.
Related
So I am reading about kubernetes and AWS service offerings. For example, one of the main advantages of kubernetes is load balancing but AWS has this too.
How do all these products tie in with one another? Are lots of them doing the same job? Is it just a case that there are so many tools out there now?
Maybe this isn't the correct forum for this question. If not I can remove, but just feel a bit overwhelmed with all the various options, and wondering if they are all completely different.
AWS offers much more services than load balancing, automating deployment, scaling, and management of containerized applications, which Kubernetes is.
If you mean Amazon EC2 Container Service (ECS), so both of them fast and scalable solutions for container management.
Actually, there is an managed Amazon Elastic Kubernetes Service also, which integrated with other AWS infrastructure, such as security, monitoring, etc.
So, it depends on your needs. You can read compare of AWS ECS and Kubernetes.
UPDATE
Here is a big comparison of managed Kubernetes services across Digital Ocean, Scaleway, OVHCloud and Linode.
Kubernetes is an infrasructure-agnostic framework for orchestrating containers. It can run on your laptop (Minikube), or installed on a couple of EC2 instances in AWS, or in a fully-managed offering from GCP, Azure and other cloud providers. Many users and organizations choose Kubernetes because of this portability.
AWS, OTOH, is a global cloud provider,or hyperscaler, with over 200 different services. It is impossible to cover them all. Nevertheless, if we narrow it to container-centric services: AWS offers its own proprietary orchestration tools: ECS and Fargate.
I understand that ECS has EC2 and Fargate launch types that differ in the control they offer over the underlying environment configuration.
Before Fargate, ECS was used to provide detailed control over the container environment, while Elastic Beanstalk was used to abstract those details and just run the containers.
In the FAQ section of AWS ECS it says:
For Beanstalk, You simply specify which container images are to be deployed, the CPU and memory requirements, the port mappings, and the container links. You can work with Amazon ECS directly if you want more fine-grained control for custom application architectures.
Now with Fargate, it seems that the offered functionality is quite similar. So what are the differences between Fargate and docker on Elastic Beanstalk?
Multi Container Elastic Beanstalk, actually uses ECS to provision your cluster, which make it operate as a Platform-As-A-Service (PaaS) model, as then you can run your images on the cluster it sets up.
Fargate runs on a fully managed server so you dont worry about the cluster or server as you would in Elastic beanstalk. You just manage the Docker container making it more of a Software-As-A-Service (SaaS) model.
Is it possible to have nested virtualization in AWS with the EC2 in order to use Docker or Kubernetes or should I rather use the ECS (elastic container service) for Docker or EKS ( elastic kubernetes service) for Kubernetes?
-The reason I am asking this question is first if is possible to run docker or kubernetes on EC2 and in case I can why there are such services as EKS and ECS?
Thank you in advance!
Yes, you can run a container on a VM. This is described in Docker's introductory documentation. ECS and EKS both have the option to run on EC2 instances. The reason to use ECS and EKS is to outsource the management of the orchestration tooling. Many people have and continue to manage the orchestration themselves for either control or cost savings, while many others look for opportunities to outsource these pieces.
I'm new to Docker and EB but not AWS. I've worked in environments where dedicated tenancy is a requirement, whether due to HIPPA or some other data protection requirements.
So far as I can tell, in order to deploy a Docker image, you must use Beanstalk, which means you aren't able to have a dedicated tenancy. I found this forum question that says if you create a VPC, you can have a dedicated Beanstalk. Is this correct? If so, will it work with Docker? If so any guides would be helpful.
Have you looked at Amazon's ECS service? It is a Docker container service that doesn't use Elastic Beanstalk.
You can also install Docker on any EC2 instance.
If you use a VPC then you can set the default tenancy to dedicated, which will result in dedicated tenancy instances being created by Beanstalk. You should be using a VPC already if you are concerned with HIPAA compliance, or if you want access to pretty much any of the new features released by Amazon in the last year.
Also, EBS stands for Elastic Block Storage, Elastic Beanstalk is usually abbreviated EB.
If you'd like to venture a bit more, you can also use other tools like
Kubernetes
Apache Mesos
RancherOS
For a more comprehensive list of Docker/Container related projects you can see this post:
How to scale Docker containers in production
You can run them all in EC2 with VPC, also using dedicated tenancy if you'd like to.
Have been running Docker with Elastic Beanstalk to deploy a relatively simple app, and it has been working great. Now with ECS on the horizon, I am interested to know what the differences are between the two services, and why one might use one over the other?
Amazon's documentation says the following:
Q: How is Amazon ECS different from AWS Elastic Beanstalk?
AWS Elastic Beanstalk is an application management platform that helps customers easily deploy and scale web applications and services. It keeps the provisioning of building blocks (e.g., EC2, RDS, Elastic Load Balancing, Auto Scaling, CloudWatch), deployment of applications, and health monitoring abstracted from the user so they can just focus on writing code. You simply specify which container images are to be deployed, the CPU and memory requirements, the port mappings, and the container links. Elastic Beanstalk will automatically handle all the details such as provisioning an Amazon ECS cluster, balancing load, auto-scaling, monitoring, and placing your containers across your cluster.
Elastic Beanstalk is ideal if you want to leverage the benefits of containers but just want the simplicity of deploying applications from development to production by uploading a container image. You can work with Amazon ECS directly if you want more fine-grained control for custom application architectures.