Thoughts on Windows & Orchestration Tools

Here are some thoughts I have had about Windows machines & a proper orchestration tool. I have deployed many web app and windows applications over the years, and it has always been a pain to deploy applications.
The problem is that I would get everything working on my local machine, and then I would have to redo everything for every machine I was deploying to. I think the main thing missing is the lack of command line package manager like apt-get for Ubuntu and a solid orchestration tool.
Recently, I have been playing around with Docker Containers and Ansible. Using the two technologies together, makes the deployments and app development so much easier. I wished we could have the same thing for windows.
The concept of docker containers makes the life so much easier, because we then just create a container (basically a low-level VM), that can be reused over and over again. I will do another post about how to get up and running with Docker and Ansible in Ubuntu. Windows needs to have a proper orchestation tool that works in similar ways.
I know Chef can be used as a windows client, but the problem with Chef is that you can't really deploy the code and you would have to pre-install the Chef Client on the box. You would have to use MSDeploy or other applications for deploying the code, but Ansible allows you to build the box and deploy the code over SSH. I know windows doesn't come with SSH by default, but we can always install Cygwin to get around that. In theory, it should be possible to spin up an EC2 windows box with Cygwin installed by default, and then try to install the packages and deploy the code, but we still have to deal with the lack of support for a proper package management solution.
In addition, having a Docker like solution for windows can empower us to create a default Sitecore or Umbraco container and then only add the code to run the application. When the time comes for deployment, since we are using the same container, it would just work, and we don't have to deal with any of those different versioning of the DLLs and frameworks, and setting up the environments. I realize that this is not possible with the any of these two huge CMS, because of the way the code is structured, but it could be possible for the new software we write from now on. Most of the .NET solutions I have dealt with, everything is so dependent and tangled together that it almost impossible to think of our application as layers. In Visual Studio world, we primarly look at our applications as one giant solution, instead of small layers that can work with each other.
I don't claim to be an expert in Docker, but from my experiences thus far, I am starting to look at web apps differntly, and I hope we can improve windows orchestration and code deployment in future.

comments powered by Disqus