Earlier this week, Docker pushed Docker for AWS into public beta. Originally announced earlier this year, the offering lets users “quickly set up and configure a working Docker 1.13 swarm-mode install on Amazon Web Services and on Azure,” according to official documentation.
This is not the first time that Docker-powered container solutions have found their way onto Amazon—some are from Amazon’s own branded services, such as Amazon EC2 Container Service and Amazon Elastic Beanstalk. But what does Docker’s solution have that the others don’t?
Docker for AWS uses one of Amazon’s infrastructure services, CloudFormation, to provision a set of autoscaling EC2 instances that run a Docker Swarm cluster. The setup process also provisions other AWS-related resources related to the cluster: networking, load balancing, message-queuing services, access management controls, CloudWatch logging, and so on.
Many of the outward behaviors of the cluster are controlled through AWS services; scaling, for instance, is controlled by changing AWS Auto Scaling settings. But all the tasks handled by Docker at the micro level—deployment of apps or distributed application bundles, for instance—are done through the familiar Docker CLI. Clustering itself is provided by Docker Swarm.
The biggest clue as to who Docker for AWS is aimed at: its use of CloudFormation as its interface to AWS. CloudFormation was created to allow AWS services to be stood up as a single unit, without the user needing intimate knowledge of how to configure each piece. Configuring services like Elastic Load Balancing or CloudWatch isn’t a trivial process, and most AWS components have a learning curve associated with them.
Docker for AWS reduces the overall learning curve for those who want to use Docker—and Docker Swarm—on AWS. But users can also manually configure a setup later on if the need arises.
Containers, at your service
Two other Amazon-branded services also deal with containers: Amazon EC2 Container Service and Amazon Elastic Beanstalk.
With EC2 Container Service (ECS), the emphasis is on the word service. When Amazon first rolled it out at the end of 2014, the company made a point of emphasizing that management tasks associated with container cluster management were available as high-level, Amazon-style API calls.
But unlike Docker for AWS, Docker Swarm is not used; Amazon has its own cluster management technology. Still, third-party scheduling tools like Marathon can be integrated if need be. The overriding idea is to allow those familiar with AWS metaphors—especially its API set—to spin up a container set and get running.
Amazon also does hands-off container management by way of AWS Elastic Beanstalk. Because it was originally developed as a generic app-deployment framework, Elastic Beanstalk’s metaphors seemed like a natural fit for running Docker containers, especially since the framework has been upgraded many times to accommodate everything from .Net applications to Node.js. Again, the emphasis is on hands-off deployment and an API-based management style that hearkens back to other AWS products.
Pick your path
To sum up: EC2 Container Service and Elastic Beanstalk are intended more for the AWS maven who doesn’t know containers but wants to use them. Docker for AWS is the obverse; it’s for the container pro who doesn’t know AWS but wants to use its containers.
One area where all three solutions are currently on the same footing is pricing. EC2 Container Service, Elastic Beanstalk, and Docker for AWS all cost nothing; the only costs are those incurred by using AWS resources like EC2 or EBS.
That said, Docker for AWS is still officially in beta, and the licensing could change once it becomes a proper release. It’s more likely Docker will use the same pricing model as Amazon, in order to remain competitive.