To get the full benefit of Docker containers, you need software to move containers around in response to auto-scaling events, a failure of the backing host that runs the container, and deployment updates. This is container orchestration. In this article, I'll breakdown the top three Docker orchestration tools: Kubernetes, AWS Elastic Container Services (ECS), and Docker Swarm.
Kubernetes is undoubtedly the most hyped orchestration tool, and also the most feature-filled orchestration tool available. It has extremely strong community support across many different cloud platforms. Whether it's on OpenStack, AWS, or Azure, Kubernetes has powerful built-in container discovery and is a great way to handle a very large amount of undifferentiated compute.
- Pros: Large community of developers; powerful container discovery; ideal if you have very large amount of undifferentiated compute
- Cons: Complex install process; often more features than you actually need; you’ll likely need a Kubernetes expert to help you get started
AWS Elastic Container Service
AWS ECS, Amazon’s native container orchestration tool, focuses on just the things that you really need without any fluff. It integrates easily with other AWS tools, and for that reason, it is our top recommended tool for anyone running containers on AWS. We are eagerly looking forward to the release of AWS Elastic Kubernetes Service (currently in preview), but for our purposes here, we’ll just talk about Elastic Container Service.
- Pros: Highest capacity for scale; deeply integrated with the AWS ecosystem
- Cons: AWS only; limited container discovery options
Docker Swarm ships directly with Docker and is often high on our customers’ list of orchestration tools to investigate. Docker Swarm is particularly useful for people just getting comfortable with an orchestrated environment or who are operating on more than one cloud platform.
- Pros: Already deployed with Docker; simplest configuration; integrates with Docker-Compose
- Cons: Limited cloud integration; one ELB per cluster
High availability functionality
The key takeaway here is that for Docker Swarm and Kubernetes, the responsibility for managing the master tier is with you. That’s something you need to be comfortable with because you have to always have a quorum of those running at any time. With AWS Availability Zones and appropriate automation, this can be done very effectively in an AWS or another cloud environment. But keep in mind that it’s a whole level of work that needs to be done -- something you don't need to handle when you're working with AWS ECS, which has an entirely managed control plane.
Every orchestration tool has a capacity limit for number of nodes and number of containers. However, you should never make a decision about your orchestration tier solely based on capacity; instead, use this information to organize your clusters more intelligently.
In the case of Docker Swarm, because of its limitation of one ELB per cluster, it’s particularly well-suited to creating multiple clusters per software development lifecycle. So for each application, you would have a dedicated cluster. For Kubernetes, you can get away with a single large cluster that contains all of your software development lifecycle phases. In terms of organization, Kubernetes has a real edge in the sense that it supports namespaces. Whether you organize by Dev, QA, staging and production, or because you want to grant rights to individual people to manage certain applications, namespaces is one of the key benefits of using Kubernetes.
Docker Swarm leverages the Docker-Compose standard, a very popular tool for local development to specify your cluster configuration. Kubernetes has by far the largest number of deployment options, and allows you to build a very controlled method of allowing users to deploy to Kubernetes. In any given deployment, Kubernetes can include items like particular secrets or storage -- details that are often really tricky to control in a purely containerized environment.
Although AWS ECS doesn't attempt to try to define deployment in the same way Kubernetes does, it also doesn't really have to; it had such a deep integration with other AWS services that can be trivially invoked by the AWS API and even the Docker-Compose manifest itself.
Choosing the right tool
The right Docker orchestration depends on your team’s skills, the complexity of your applications, and your chosen cloud platform. AWS ECS and Docker Swarm are simple but effective tools; with Kubernetes, you’re exchanging simplicity for flexibility. Any DevOps engineer working in the cloud needs to be familiar with all three.
Jason McKay, Logicworks CTO, is responsible for leading Logicworks’ technical strategy including its software and DevOps product roadmap. Prior to joining Logicworks in 2005, Jason worked in technology in the Unix support trenches at Panix (Public Access Networks). Jason graduated from Bard College with a Bachelor of Arts and holds all five AWS associate and professional-level certifications.