Software containers are like digital shipping containers. They hold everything that your application needs to work, from operating systems to configuration files, to libraries, application binaries, and more. Once your container has been defined, the image that you create can be used to develop additional containers that run in any environment, on-premise, or in the cloud, without any time-consuming changes.
Containers are very efficient, and many of them can run using the same machine, which is great for a developer. However, it can be difficult to manage many containers at once, and that's where orchestration engines come in. Orchestration engines are container technologies designed by companies in the technology industry. Major players like Amazon and IBM have created their own orchestration solutions, alongside start-ups and budding companies. Though the options can be overwhelming, the common feature sets for each tool often includes:
- Declarative system configuration
- Mechanisms for defining rules regarding container placement
- Launching and discovery features
- System monitoring and recovery
- Container provisioning
- Solutions for container performance
As with anything else in the world of container technology, it's worth noting that not all orchestration engines are created equal. Each comes with its own specific strengths and weaknesses to think about. Here, we'll cover just a few options and their benefits.
1. Docker Swarm
Docker Swarm is the Docker tool for orchestration and cluster management. Recently introduced to the Docker Engine in "swarm mode" with the latest update, the system adds support to the docker engine for multi-container and multi-host orchestration. Now, software developers and administrators alike can create and control a virtual system called a "Swarm" composed of numerous docker nodes.
The system allows developers to connect directly to the Docker API, for access to numerous tools such as Docker compose. The deployments for each container are often handled by the docker command line, or docker compose. According to the company, the software can handle up to 30,000 containers at once without any damage to performance.
2. HashiCorp Nomad
Nomad is an open-source free solution for orchestration developed by a company called Hashicorp. It's a schedule and management solution that's designed to help organise container clusters. While other offerings on the market are intended for specific types of container, Nomad is a more general solution that supports a range of applications that are containerised, virtualised, and available on a standalone basis.
Rather than using a container-centric abstraction like Docker Swarm, Nomad uses high-level abstraction where tasks can be grouped and assigned to certain jobs. The system was intended to be a self-reliant, lightweight and simple solution for container orchestration, and it can work alongside other kinds of Hashicorp software.
3. The Azure Container Service
Created by Microsoft for use with its cloud computing platform "Azure", Azure Container Service has only just reached general availability as of April 2016. ACS responds according to the open-source Mesos cluster manager Apache system and allows customers to choose between a range of three different tools for orchestration, including Kubernetes, Docker Swarm, and Apache Mesos.
The API endpoints for each orchestrator are exposed, which means that the software can speak to those endpoints more easily. Azure permits better portability by allowing users to access open-source components within their orchestration layers.
4. Amazon ECS
The Amazon container management service "EC2" is a container solution exclusively designed for use with Docker containers. Containers managed by the Amazon ECS can run only on instances of Amazon Web Services EC2. This means that there isn't any current support for external forms of infrastructure. However, although this can be a restrictive feature for some, it also means that you get access to a range of AWS benefits, like elastic load balancing, which allows you to re-distribute traffic from an application to improve performance under pressure.
The basic unit of Amazon ECS is tasks, and these can be grouped into services using the task scheduler application. You can also integrate persistent data storage features using the Amazon Elastic File system.
A high-performance open-source framework designed for container management and orchestration, Marathon is built around Apache Mesos and has been created work alongside services and applications that run over extended periods of time. Marathon is a REST-based strategy which can be operated through a user interface on the web. To reduce failure, Marathon can run multiple schedules at the same time, to ensure that the system keeps running if one feature crashes.
Similarly to the popular Kubernetes, Marathon allows users to run health checks regularly so that they can stay updated on the status of their applications. Additionally, Marathon is mature and stable, featuring a range of useful solutions like metrics, event subscriptions, and health checks.
Last, but not least, Kubernetes was designed by Google, and it is an open-source system for the orchestration and management of Docker containers. Using a single master server, Kubernetes manages multiple nodes with a command-line interface called "Kubectl". The basic unit for scheduling in Kubernetes is a "pod", which is often a group of one to five containers deployed within a single node for the execution of a specific task. Pods are temporary and can be generated and deleted at will while the system runs.
At will, customers can set up customised health checks, including container execution checks and HTTP checks to make sure that applications continue to run as they should.
Choosing the Right Solution for Container Orchestration
There is a wide range of orchestrations to choose from in today's marketplace. Ultimately, customers will need to make decisions based on which technology appeals most to them. Typically, it's a good idea to select an orchestration tool that can be bundled in with your platform for container management, like Docker, as this will help to simplify your workflow and reduce the risk of working with multiple vendors.
Of course, if you're looking for a tool that's smaller in scope, and provides solutions like scheduling and cluster management instead, then you may prefer using a solution such as HashiCorp Nomad.