Many to choose from
There are quite a few options for running container workloads today, but they come with many different configurations. Especially between different vendors. And these vendors are working hard in this area to provide us with even more products and services to choose from. So many, that choosing one over the other can feel a bit overwhelming. At least it did for me in a recent project where a customer asked me to suggest a product, service or vendor to run the companies containerized production app. As a resolution I decided to score the vendor options along different topics and plot the results for quick reference.
Disclaimer: cloud container services are a rapidly moving field. As the technology evolves, so do the products and this blogpost will require frequent updates. Make sure you check with the vendor for the current state of the offerings. Every service, every vendor is different and that makes it somewhat hard to compare the different options. This guide suitable for high level comparisons only. Links to vendor information are provided as part of this guide.
With that out of the way, onwards
There are a couple of well-known vendors and they usually have several service offerings (Microsoft has at least 5 different products that can be used for running containers!):
- Amazon Docker on AWS EC2
- Amazon Elastic Container Service
- Amazon Elastic Container Service for Kubernetes
- Docker Cloud
- Google Containers on Compute Engine
- Google Kubernetes Engine
- Microsoft Container Instances
- Microsoft Web App for Containers
- Microsoft Azure Container Service
- Microsoft Azure Container Service – AKS
- Microsoft Azure Service Fabric
Scroll down for more info on vendor and services
The scoring is done on high level product-, or service characteristics only, so for the more detailed comparisons you would need to visit the vendor websites.
Does the offering include running workloads by providing nodes, virtual machines or instances? If so, is it targeted at running single container workloads or more at multi-node, clustered and maybe even orchestrated configurations?
(1) Bring Your Own Host
Docker may have led the way to containers, but there are other formats now that can be considered. But are there hosting options that support other formats besides the usual Docker images?
Production apps typically require multiple images, load balancing/ failover, scalability and a specific network configuration. Orchestration enables you to support complex scenarios and usually comes with vendor specific tools and APIs. More dots: better features or more choices.
A registry is used to manage and distribute container images. It allows you to control access, versions and metadata on images. Typically available as private or public registry.
Container image lifecycle features may include things like build/ test support, release pipelines and development tools. More dots means more tools and better support.
Advanced service features may include the creation of a virtual network between nodes or hosts and making sure containers can reach each other on any port. These solutions can be as simple as an overlay network or as complex as network virtualization with policy enforcement, real time analytics and your choice of routers and switches. The scoring is done on the available features.
This topic is scored by the flexibility in pricing models, not the actual costs of using the service.
The vendors and their services
Amazon Docker on AWS EC2
This is one of the simplest ways of running docker containers in the cloud. You just “docker run” your images on EC2 instances. Pricing and scalability all based on the EC2 service. I would only use this for simple/ single workloads. More info
Amazon Elastic Container Service
If you are serious about running containers on Amazon, this is where you probably should start looking. It is a highly scalable, high performance container management service that supports Docker containers and allows you to easily run applications on a managed cluster of Amazon EC2 instances. The service makes use of EC2 instances behind the scenes and there is no additional licensing or pricing; you pay for used resources like EC2 instances.
Targeted at multiple container workloads, but currently only Docker images are supported! More info
Amazon Elastic Container Service for Kubernetes
This is the managed service that makes it easy for you to run Kubernetes on AWS without needing to install and operate your own Kubernetes clusters. It has full support for Kubernetes applications and should even run with other container technologies (although official support from Amazon is not clear). It targets the more complex workloads and orchestrations.
Currently in preview and pricing is not available yet! More info
Docker Cloud is a service aimed at the lifecycle and delivery of containerized applications. It does not provide you with nodes to run your application, so you either have to use a supported cloud provider (AWS, Azure) or bring your own nodes. It does support container lifecycle management and advanced features like orchestration using Docker Cloud Beta Swarm Mode and built-in API and features. Comes with full registry support, but only for Docker images.
Pricing is done via monthly subscriptions but does not include the costs for running the nodes on AWS or Azure. More info
Google Containers on Compute Engine
You use this to deploy and run your container on a Google Compute Engine VM or a managed instance group. It targets simple/ single Docker container workloads and is currently in beta. No SLA or pricing information available yet.
Google Kubernetes Engine
Google Kubernetes Engine runs on the Google Cloud Platform and is Googles managed environment for deploying containerized applications. It is powered by Kubernetes, the industry-leading open source container orchestrating software.
Targeted at running complex workloads and packed with all kinds of additional features like advanced networking, auto repairing, auto scaling, etc.
Pricing is based on Google Compute Engine instances, so you only pay for the compute resources on a per second basis. More info
Microsoft Container Instances
Probably the easiest way to start running containers in the cloud. Targeted at test and development scenarios and suitable for simple/ single workloads. More info
Microsoft Web App for Containers
Containers are deployed to Azure App Service running on Linux. A very simple solution, mostly used for simple apps that do not require extensive infrastructure control.
Pricing is based on App Service plans (ranging from free plans to isolated plans) and billed on a per second basis. More info
Microsoft Azure Container Service
Azure Container Service (ACS) provides a way to simplify the creation, configuration, and management of a cluster of virtual machines that are preconfigured to run containerized applications. It supports Docker images and is compatible with Kubernetes, DC/OS (powered by Apache Mesos), or Docker Swarm for the orchestration.
ACS runs on Linux virtual machines and pricing is based on the compute instances and Azure resources used. More info
Microsoft Azure Container Service – AKS
This service is currently in preview and focused at providing managed Kubernetes services. Although Kubernetes support is also available with the original Azure Container Service, Microsoft expects Kubernetes customers to choose for AKS.
Currently in preview and pricing is done on consumed compute only. The service itself is free and you will not be charged for the management of the service.
Microsoft Azure Service Fabric
Suitable for microservices running with Windows or Linux containers and targeted at running complex workloads reliably while scaling up to thousands of nodes. Includes resource management, orchestration and can be used for mission critical applications.
Pricing is based on the used components. More info
I tried to be as complete and correct as possible but it still felt a bit like comparing apples and oranges. This field is relatively new, so I expect things to clear out as vendors and services mature.
Did I miss anything? Any feedback? Please let me know, thanks!