Containers have been around for many, many years. The technology for containers has been inside of various Operating Systems for almost 15 years or more. In the past, we had one physical server and we would run one application on each physical server. Then the industry embraced server virtualization where many Virtual Machines (VMs) would run on one physical server. Initially, there was a host Operating System (OS) for each physical server and the hypervisor ran on top of that host OS. Organizations realized that they could eliminate that superfluous host OS and run the hypervisor on the “bare-metal”. Then came along the idea of using a software container to isolate the application. Applications are the new currency that fuel innovation in the cloud era. Using containers reduces the requirement to have a licensed OS for each application. This way, each application is managed in and of itself, gets only the resources it needs, and can be secured separately from other applications. Modern application patterns necessitates looking beyond existing extraction mechanisms meant to solve compatibility and hardware efficiencies. The pace of application innovation is much more rapid, requiring continuous release integration. Why containers? Containers provide repeatable execution, immutable environment, reusable and portable code (Build, Ship, and Run) consistency across development, test, & production. Its fast & agile app deployment, cloud portability, instant startup, density, partitioning, scale, diverse developer framework support and the ability to modernize with Microservices in containers. Containers are an increasingly popular method of separating an application from the operating system and the physical infrastructure it uses to connect to the network. Containers are revolutionizing the way that people build, package and deploy software. The container is instantiated within the kernel of the operating system and virtualizes the instance of the application. Containers deliver a fully self-contained abstraction mechanism. Each instance includes the application and a minimum set of OS components needed to run, thereby enabling lightweight, composable and portable applications. In effect, containers unlock the write once anywhere approach. Developers can target application deployment to any location without having to modify, re-write or re-configure code thereby maximizing productivity. There are 2 types of containers: OS containers and Application containers. Application containers are designed to package and run services as a single process, whereas in OS containers, multiple services and processes can run. To create OS containers, we can leverage container technologies like LXC, BSD Jails, OpenVZ, Linux VServer, and Solaris zones. Container technologies like Docker and Rocket (Rkt) are examples of application containers. Containers != Docker. But Docker has the mindshare right now. Docker Inc. did not invent containers but created an open source software to build and manage containers. What Docker has done is they’ve created a set of tools that make it easy to use them. Before, you needed to know a great deal about the operating system and the way things like Cgroups (Control Groups) in Linux worked or you needed to get down and dirty to use containers effectively. Dockers made it really simple. That’s why the hype has occurred. When you boil it down, Docker is really 2 things. It’s the tools they provide and it’s a packaging format for those containers. It’s a way of standardizing the containerization of applications. Docker is just one piece of the platform puzzle. The key thing about containers is they don’t define the language or the framework, as long as they run in a container environment. Windows and Azure are container ready. Windows Server Containers Windows based containers empower modern application development with enterprise grade control by providing 2 fully compatible deployment options – Windows Server Containers and Hyper-V Containers. Windows server containers maximize density and performance for variety of development scenarios in trusted environments. Hyper-V Containers Hyper-V containers provide great isolation and control which might be important in limited trust environments such as running containerized applications on shared multi-tenant infrastructure. Both of these containers provide the exact same development and management experience for the developer including Docker, Visual Studio and Powershell integration. This will spark a lot of innovation within the Windows developer ecosystem. Windows server also brings familiarity to IT operations including Nano Server, a minimum footprint OS optimized to run containers. Windows containers are richly integrated with Docker thereby enabling seamless application portability. Microsoft will continue to enable container technologies consistently across on-premises, hosted and Azure environments thereby giving customers full flexibility and choice in delivering application innovation to their businesses. Azure Container Service provides a way for us to have a cluster of hosts on which the containers are going to run. Container orchestrators like Kubernetes, DC/OS, Docker Swarm form the foundation for next generation platform as a service (PaaS). Cloud container as a service (CaaS) platforms like Azure Container Service, Amazon EC2 Container Service (ECS) and Google Container Engine (GCE) are becoming the new infrastructure layer that PaaS is built upon. The container image and container image build tooling has become the way to package up your applications. Container registries have become the way to distribute your application across the world. Reliable software rollout is achieved using orchestrator concepts like Deployment in Kubernetes, and service healing, auto-scaling and load-balancing are all properties of an application deployed in Kubernetes or any of the container orchestrators. Use Cases Applications are fueling innovation in today’s cloud-mobile world. Continuous Integration: From a Developer perspective, containers unlock ultimate productivity and freedom. They enable ‘write-once, run-anywhere’ apps and can be deployed as multi-tier distributed apps in IaaS/PaaS models. Containers offers powerful abstraction for microservices. From a DevOps perspective, it helps integrate people, process, and tools for an optimized app development process. Operations focus on standardized infrastructure, developers focus on building, deploying and testing apps, further accelerating app deployment, reducing efforts to deploy apps, streamlining development and testing. As a result, there’s lower costs associated with app deployment and increase server consolidation. Application Modernization: From an Operations perspective, it enhances familiar IT deployment models, provides standardized environments for development, QA, and production teams, abstract differences in OS distributions and underlying infrastructure. It enables rapid scale-up and scale-down in response to changing business needs.