DevOps with Containers

Recently I did a video series for Microsoft Channel9 on DevOps with Containers (thanks to Lex Thomas and Chris Caldwell for recording these). The idea was simple- show and tell how container technology can help in improving the DevOps experience.

Its a ~2-hour long recording (divided into three parts for easy viewing) covers topics including containerization of applications, continuous integration and deployment of containerized applications using Visual Studio Team System, Azure Container Services, Docker Swarm, DC/OS and monitoring containers using Operations Management Suite and 3rd party tools.

Here is the break down of each session. If you’re interested in looking at the sample application that I have deployed in the last session (asp net core web app and ape) its available on my Git repo.

Part 1 – Getting Started with Containers

In the first part focus is to introduce the basic concepts of container and the process of application containerization. I did target Windows Containers in this part though later parts do show how to leverage multi-container application based on ASP.NET Core using Linux container. If you wanted to try Windows Containers I have provided this link that will allow you to automatically provision Windows Server 2016 Virtual Machine with containers support (including docker-compose). Also, the Azure ARM Template that actually provision the virtual machine is available here.

  • [2:01] What is a Container and how can it benefit organizations?
  • [5:20DEMO: Windows Containers 101- Basics and Overview
  • [9:33DEMO: How to create a Container on Nano Server
  • [15:39DEMO: Windows Server Core and Containers
  • [19:36DEMO: How to containerize legacy ASP.NET 4.5 application
  • [43:48DEMO: Running  Microsoft SQL Server Express inside Container

Part 2 – Building CI/CD pipeline with VSTS and Azure Container Service

The second part focus on building a Continuous Integration (CI) and Continuous Deployment (CD) pipeline for multi container application using Visual Studio Team System (VSTS) with deployment target of Azure Container Service (ACS) hosting DC/OS and Docker Swarm.

I developed a sample application that represents a canonical web app and ape (in this case I used ASP.NET Core 1.1 but really can be NodeJS, Python , Java etc.). Then demos show workflow that starts by submitting code along with Dockerfile and docker-compose that actually will be used by VSTS build to create a new container image every time build is run {container name:buildnumber} format. Containers are hosted in Azure Container Registry which is a private DTR (docker trusted registry). After container image is ready the continuous deployment happens and VSTS kicks the release which targets both DC/OS and Docker Swarm that are actually hosted on Azure Container Service (ACS).

  • [2:54] The Big Picture – Making DevOps successful
  • [6:34DEMO: Building a Continuous Integration and Continuous Deployment system with Azure Container Service and Visual Studio Team System
    • Multi-Container Application | ASP.NET Core
    • Container Images Storage | Azure Private Docker Registry
    • Build & Release Deployment | Visual Studio Team System

Part 3 (Final) – Monitoring and Analytics

This is the final part which focuses on doing Monitoring and Analytics of container applications running on Azure Container Service. Microsoft Operations Management Suite (OMS) is the primarily service used in the demos but I did mention 3rd party services that are supported on Azure Container Service and provide monitoring, analytics and debugging functionality

  • [3:20] Does Orchestration = Containers?
  • [5:40] DEMO: Monitoring and Analytics

Final Thoughts

Containers are massively useful technology for both Green Field and Brown field based application development. Also, organizations today have various level of maturity level when it comes to DevOps and containers provide them with great option to enable DevOps in an effective way. Off course there are considerations like learning curve, lack of proven practices and reference architectures compare to traditional technologies. However, this is going to be lesser concern as with time the knowledge gap going to be filled and reference architectures will emerge.

Finally, you should also broaden your design choices to include combination of containers with server less computing (e.g. Azure Function which actually runs inside a container itself!). This is particularly interning option when your service is mainly state less. This is something I would like to cover in future blog post.

How To Set Custom Resolution On MacBook Pro Retina

I recently experience an inconvenience when I discovered that on MacBook Pro Retina running OS X El Captain (and even few of its predecessors as I found out) you cannot set custom resolution. Well long story short for recording a video I need to set resolution to 1270×720 which was not among the preset choices of resolution that apple provides. You can see available choices in the screen shot below (click on the image to see it in higher resolution)

MacBook Pro Retina Display Settings

As someone who regularly use Windows OS this came across as limitation in the Apple operating system.

I manage to find a working solution to this problem. Apparently there is a software Retina DisplayMenu that provides list of most common resolutions to select for and it works perfectly. You can see all the available resolutions in the screen shot below (click on the image to see it in higher resolution)

Retina DisplayMenu Resolutions

Retina DisplayMenu is available for download here. Please note that I do not own this software nor can vouch for its quality so please use it at your own discretion.