Done. You've been working to build that new feature and move your backlog item to done. You're happy with the level of unit testing and some functional testing, you have confidence you've built something that works. But wait, you're not actually done because it's not yet in production.
Done Done. Now starts the laborious job of packaging up components, setting the correct configuration settings, and begin deploying. Right, files have been copied so you begin testing only to discover something is wrong and immediately you're thinking "but it worked on my machine." Which file did we forget to copy or remove? Was there a dependency that should have been installed? More often than not it's a mistake involving a human.
Maybe you're using a Continuous Integration sever to build, test and package your application binaries. Striving to deploy the same set of binaries to each of your environments (if you're doing an xcopy-style, manually copying files to a server, then you're doing it wrong). Containers can help. Simply it is a package of your application files and their dependencies which will run almost anywhere, consistently.
The value proposition for Containers is driven by the reliability of packaging and deploying a known quantity.
A Container is made up of your application files, dependant libraries and configuration of its operating environment. These three things are packaged using a layered file-system and stored as an image in a public or private registry. To run our application we create an instance of our Container using the registry image and we're in business.
Some of the benefits of using Containers you can look forward to include:
- Package your application and its dependencies into one logical unit making running and deploying a whole lot easier
- Better utilisation of your hardware and host operating system due to a higher density of running applications
- Ready for scale-on-demand, horizontal\cloud scaling, by simply running multiple instances of your container
Over the coming weeks I'd like to share with you how to get started with Windows Containers and the types of common patterns you'll employ when shifting your .NET applications to this paradigm.
A flavour of the topics will include:
- Building & debugging inside a Container
- Container Patterns: Service, Task, Tools
- Composing applications using Docker Compose
- Setting up a CI\CD pipeline
I hope you'll join me and if there are any particular topics you'd like to see please feel free to leave a comment below.