With the growth of cloud computing and DevOps practices, optimising application delivery has accelerated in recent years. One such technology, containers, has risen in popularity and is now widely accepted as the shape of things to come. In this blog, I’ll be helping you understand the technology, it’s benefits and the options for running containers in Azure.
What are Containers?
A container is a readymade software environment that has the application code and its dependency’s preloaded within an image. You may be thinking “ah virtual machines?” however the technology has some fundamental differences.
Whilst machine virtualisation operates at the hardware level and provides a way to run multiple instances of an operating system, containers on the other hand share the host operating system and run using isolated processes.
The container engine allows each application (container) to run on top of the host operating system but remain isolated from each other.
What is a container Image?
A container itself is based on an image consisting of layers. Each layer represents a dependency for the application and the application code itself.
The base operating system is always the first layer, with additional layers then added to support the application, which in this windows container example, is a website using ASP.NET hosted on internet information services (IIS).
On each running instance of the image, a final container layer sits at the very top allowing read and write operations until the container is stopped. Images are immutable, so when a new container is provisioned it’s always a clean state.
Portability / Migration
Linux containers can be small, very small. The base Ubuntu image clocks in at 185MB with the smallest Windows equivalent being Nano server at 238MB, although Microsoft are making a lot of effort to reduce the sizes of their images.
If application modernisation is on your agenda, moving to containers can often be the path of least resistance. With all dependencies neatly packaged into the image, there is little concern for supportability on a new platform.
Less resource intensive
Reduced overhead means a more efficient use of compute power. Applications traditionally running on their own virtual machines can now be grouped together helping to reduce waste and save costs.
Fast start-up times
Due to their size and the fact the operating system is not loaded each time, some containers can start in under a second. This means faster deployments when introducing new features or fixing bugs.
Running multiple applications on the same server is no longer a concern with containers. Isolation means any application crashes are contained and have no effect on other services. Containers are also generally considered secure by default when referring to access boundaries.
Running Containers in Azure
The Azure container ecosystem as described by Microsoft incorporates a range of PaaS to IaaS services that often land somewhere in the middle.
There’s nothing to stop you just running a container in a virtual machine, but you won’t get the efficiency and administration benefits of a specialised service. Here are some more ‘managed’ paths to consider:
– Web app for containers
Web app for containers allows you to run your custom docker image in Azure App Service and take advantage of the managed platform service. This means you’re not required to patch or provision virtual machines and can utilise App Service features such as auto scaling, Azure active directory integration and custom domains.
When to use:
- If you need to take advantage of App Service features and run containers on a small scale.
– Azure Kubernetes Service (AKS)
Kubernetes is an open source container and cluster management tool that is often referred to as an orchestration system. AKS is Microsoft’s managed service for Kubernetes that reduces the configuration overhead of the cluster and integrated features such as identity, networking and monitoring. Kubernetes is now regarded as the standard in container orchestration.
When to use:
- if you’re looking to run containers at scale with flexible networking and customisation options.
– Azure Container instances (ACI)
ACI is a serverless offering, which means it’s billed on consumption rather than any pre-provisioned resources (virtual machines). It’s designed to be a simple and fast way to get started with containers and all underlying virtual machines are transparent, which means nothing to manage. ACI can also provide ‘virtual nodes’ to form the backbone of a serverless cluster within AKS.
When to use:
- If you’re looking to get started with containers or have simple requirements (Dev/Test, Small web app etc) and only want to pay based on consumption.
– Azure Service fabric
Azure Service fabric is a proprietary Microsoft stack that incorporates its own development framework, tooling, scaling and cluster management as a platform service. It can run guest executables as well as containers and was originally introduced to provide a platform for modernising windows .NET applications in Azure. With other services now supporting windows containers the relevance of Service Fabric to small- medium workloads is questionable.
When to use:
- Complex and large-scale deployments that require a high demand of native functionality.
How can Silversands help?
As with any new technology shift the adoption of the right migration path is critical. Silversands provides consultancy and development services to help organisations modernise their applications and take advantage of all the cloud has to offer.
You can also join one of our regular workshops and webinars providing the latest updates and expert advice about Microsoft 365, Cloud and Hybrid IT, security, compliance and partner tools. We also post regular blogs so please do follow us.