“Containers, containers, containers” — this is the mantra of DevOps these days, and enterprise adoption of containers is set to soar. When one begins to consider the myriad of options available, it becomes difficult to decide which way to go. The tensions that exist with many enterprises is multi-dimensional.
1. Legacy applications on legacy systems
2. Existing CI/CD pipelines
3. Existing cloud investments
4. Future states of applications and migration pathways.
5. Many, many more…
This list grew out of a desire to collate and comment on many of the popular options available. It is by no means exhaustive, but can help serve as a starting place for those wanting explore containers and the myriad of options and pathways available.
Here is a summary table outlining the following containers options.
ECS Container Services (ECS) is Amazon’s flagship container service. It uses AWS CloudFormation Templates along with the Amazon CLI for orchestration. Each instance of ECS runs on top of a EC2 elastic scale set and use to its tight integration with ECS, it can take advantage of many of the value-added services offered by Aws. that allows the ECS to scale up or down automatically depending on load and desired performance metrics.
Elastic Beanstalk is essentially the same thing as ECS, except it is intended for smaller loads. Elastic beanstalk abstracts away the underlying virtual machine so the container instance is presented as a more managed platform as a service. Elastic Beanstalk does not have the level of flexibility that ECS has such as more complex network settings. For simpler deployments, though, Elastic Beanstalk offers a great deal of relative ease compared to ECS.
Docker for AWS deploys Docker to AWS using CloudFormation templates. This service, however, is not a native AWS service, rather is from Docker. It contains the full Docker stack running on EC2 virtual machines and uses Docker Swarm for orchestration. This option offers native Docker components running on AWS so the Docker tools for building and managing containers can be used to manage containers running on AWS.
Azure Container Services is Microsoft’s flagship container service on Azure. It runs on an Azure VM Scale Set. Likewise, ACS is a first-class citizen on Azure so deployments can be deployed and managed using Azure Resource Manager templates, Azure API, and the Azure CLI. ACS has three option for orchestration including Swarm, Kubernetes, and DC/OS which are deployed when an instance is created. ACS gives a great deal of flexibility to organizations wanting to use familiar open source tools but also not have to reinvent the wheel for deploying.
Service Fabric is a microservice framework for deploying all sorts of microservice applications including containers on premise or in the cloud. The framework itself is intended to help bridge the gap between on premise datacenters and cloud computing while allowing for more modern programming methodologies. Another key feature of Service Fabric is that it can run both Windows and Linux containers. The combination of these features makes Service Fabric an attractive option for Enterprises with hybrid clouds and mixed application workloads.
Azure Batch is another service worth mentioning. Batch as the name implies is used for batch computing on x86 or Nvidia Cuda architecture. Batch jobs can be deployed in virtual machines or in containers with Batch Services. VM’s and containers are deployed either on schedules or ad hoc, run a job, then shut down. This style of computing allows for large, long running jobs to be run on leased compute space without having to own the equipment only use what they pay for. This option is attractive for researchers needing high performance computing in the cloud.
Docker For Azure deploys Docker to Azure using ARM templates. This service, however, is not a native Azure service, rather is from Docker. It contains the full Docker stack running on Azure virtual machines and uses Docker Swarm for orchestration. This option offers native Docker components running on Azure so the Docker tools for building and managing containers can be used to manage containers running on Azure.
Containers on Compute Engine from Google uses the popular Kubernetes orchestration engine for managing containers workloads on Google Compute virtual machines. Google compute is not nearly as popular as AWS or Azure, but it’s maturity and close affinity with Kubernetes makes it an attractive option for those already using Kubernetes in other environments.
Containers on Windows Server is one of the hottest container development. It Windows applications to be containerized and deployed on Windows Servers as containers, so windows Applications can now take full advantage of DevOps practices that containerization offers as well as enabling isolation for Windows apps without the need to a plethora of virtual machines. This option appeals to Enterprises looking to containerize existing applications as well as deploy new ones on Windows. Windows Containers also come with support from Docker.
Docker EE, also known as Enterprise Edition, is a native offering from Docker with commercial support and a plethora of advanced features. Docker EE is a pure Docker experience, so all the familiar Docker tools can be used with Docker EE.
Docker CE is the community edition of Docker that is typically deployed on already existing servers such as CentOS or Ubuntu. Docker CE uses the same container engine the enterprise edition uses, but itself doesn’t have support. Otherwise, all the familiar Docker tools can be used with Docker CE.
vSphere Integrated Containers from VMWare allows containers to be run on existing VMWare infrastructure and use familiar VMWare tools like vSphere for orchestration. This option is attractive for enterprises and businesses that are looking for a way to leverage what they already have without having to retool or redeploy to a new technology stack.
An honorable mention because of its cool factor is Docker on the Raspberry PI. Many Pi enthusiasts have built Docker Swarm Clusters on arrays of Raspberry Pi’s. The distinction between Docker on Pi’s as opposed to most other options is its ARM architecture. Containers originally were x86 only technology, but increasingly containers are find their way on to architectures like ARM and nVidia. The high visibility of Raspberry Pi’s makes Docker on Raspberry Pi’s an interesting project.