VMs and thus Azure VMs, in particular, allow you to abstract hardware offering an easy way to spin up a machine environment with a unique OS. But in scenarios where you need to run multiple instances of your application at the same time on the same machine, you will need to spin up multiple VMs. To address this need, the industry has come up with a solution called Containers. Containers allow you to go one more level down in abstraction, by abstracting the OS so that you can run multiple application containers within a VM. One of the main tools that allow you to manage the creation and management of containers is Docker and Azure offers Docker support allowing you to set up and manage your containers.
Azure offers Azure Container Instances (ACI) and Azure Kubernetes Service (AKS) to offer the container orchestration service which is simply put the automation, managing, and interaction with a large number of containers. Kubernetes is basically one of the industry-leading options to automatically manage container-based workload with its variety of APIs and inherent pod management at its nodes. Nodes contain pods that can contain one or more containers. You can automatically scale in or out the nodes based on your needs.
Azure containers and Kubernetes are particularly useful when your application is built using a microservices architecture. Microservices architecture involves architecting your application as small chunks of services/APIs that are independent of each other but could communicate and synergetically function as one application. Microservices architecture is useful in scenarios where multiple teams work on developing various parts of the application and has the autonomy to choose what platform and tools they use to develop and run it. This use case is a perfect fit where each microservice can be published and managed in separate Kubernetes pods and orchestrated together to offer a scaled out/in functionality based on load.