Author: Matthew Simon, Technical Director, Cloud & Infrastructure Center of Excellence
Octo teams often hear from customers, “We want to use containers.” And why not? Containers are the next evolution in optimizing compute power after virtualization. With containers, we can run more on a single physical machine and optimize processes, and we can put a container anywhere in a system; however, containers are not all the same, and different container types require different infrastructure. Thus, there is much confusion on how containers work when it comes time to make critical decisions on solutions.
Where the confusion starts
When agencies decide they need to turn to containers, they sometimes reference Docker and Kubernetes. There is much more to containers than these popular solutions, and there is a lot of confusion in understanding the various terms and how each component works. Critical to decision making is an understanding of containers themselves, container orchestration, and microservices. Here we will touch on the definition of a container running on a platform like Docker and container orchestration like Kubernetes. We will also look briefly at microservices.
What is a container?
According to Docker, “A container is a standard unit of software that packages up code and all its dependencies, so the application runs quickly and reliably from one computing environment to another.” Containers run on top of the operating system and can be made secure, even in a cloud environment. (For security, functions can be limited to avoid vulnerabilities, and developers can further lock down containers with additional layers of security This is known as secure computing mode or SecComp, a powerful security layer that can be added on top of containers.)
What is container orchestration?
Container orchestration is the automatic process of managing or scheduling the work of individual containers for applications. This is one of the components microservices are dependent on to work. Kubernetes is the industry leading platform for container orchestration.
What is a microservice?
A microservice is a software architecture that breaks up pieces of an application into a series of smaller, specialized parts that run independently of each other. Each part communicates across common application programming interfaces (APIs). Each microservice tends to manage its own database, generate its own logs, and handle user authentication. Compare this to the old-fashioned way of developing monolith applications, which were single, autonomous units. If the developer had to make changes to a monolith application, they basically had to rebuild the entire piece of software and deploy a new version. Microservices solve this problem by allowing developers to make changes to the smaller units and deploy the new unit independently, often without affecting overall service.
As you can see, containers, orchestration, and microservices are three very different things. When they are confused from the start, it’s difficult to understand the necessary components that allow containers to work correctly, complicating decision making.
In Part II of this series, we’ll take a look at how microservices, containers, and container orchestration interact and how that can contribute to the infrastructure decisions you should be making within your organization.