In our earlier post we kept things clinical and looked strictly at the cost differential between Linux and Windows. Comparing the 2 platforms based strictly on price is perhaps overly simplistic. The popularity of cloud has precipitated a natural evolution of the Windows and Linux. The differences between the two platforms is getting increasingly blurred, especially when it comes to deployment and monitoring.
Let’s talk Containers
Containers solve the fundamental problem of how to develop and deploy software so that it runs reliably when moving it from one computing environment to another.
Containers are virtualization at the operating system level rather than at the server level. Unlike virtualized environments where each virtual machine has its own copy of the operating system (OS), containers all share the same (read only) OS and then make use of their own libraries, binaries, configuration files to build out a run-time environment.
Container Image vs Container Instance
A “container image” defines the libraries, binaries, configuration files necessary to build out a full run-time environment for a container. In the simplest of terms, a container image is an installer.
A “container instance” is a set of isolated processes that deliver the run-time environment - leveraging the shared OS along with the container image that is pulled from a repository. Container instances processes are secure because they are isolated from both the processes on the host as well as other container instances
Although containers have gained steady popularity due to cloud adoption the concept is not new, in fact containers were implemented years back with FreeBSD Jails and Solaris Zones.
Docker has been quite effective at building out an entire container management ecosystem. The technology not only simplifies the creation of containers, it also makes their deployment and ongoing day-to-day management far simpler.
In the IT industry the pendulum constantly swings from one direction to the other. In the early days of Unix - the command line interface (CLI) was king and utilities with green screen user interface menus were usually relegated to use by the uninitiated.
Later, the popularity of the Windows interface and the Windows platform itself along with the relative stability of the server infrastructure surrounding it meant a graphical user interface was mandatory. In a traditional Windows environment there are a finite number of servers and much of the automation can be configured in a standardized way (i.e. clustering, vMotion, etc.).
The pendulum has now swung back to the command line interface. The driving force behind Docker and its CLI is the need to customize and script container deployments. Because cloud environments are more volatile, each deployment is unique to the applications being provisioned, which means scripting is a must.
Docker Containers – What does it mean for Windows and Linux?
As the marketplace and more importantly Microsoft further embrace Linux, the need for Windows and Linux to operate side-by-side becomes critical, and even abstracting the OS from the cloud equation.
Docker and Microsoft together have unlocked the OS - what is supposed to be heterogeneous is now seamless and homogeneous.
Launching a Windows container vs. a Linux container is pretty much the same CLI with the exception of specifying a different container image.
Ultimately developers and cloud administrators need not be concerned about the underlying operating systems that the containers are running, as long as the services provided by containers are reliable and can be quickly deployed.
Native support of Docker containers started with Windows Server 2016 / Windows 10 and was a game changer.
|Phase 1 - Windows and Linux Containers for Developers|
Windows Server containers run natively on a host and can also be further isolated via Hyper-V containers - the container runs inside of a dedicated Hyper-V machine on the host.
Linux Containers run inside of a Hyper-V machine with just enough OS to support the container, geared primarily for developers
Requires switching between running Windows or Linux Containers
Windows Server 2019 touts the mixing of Linux and Windows containers running in a production environment, all from a single host.
Phase 2 - Windows and Linux Containers for Production
LCOW not only simplifies the day-to-day management, it also collapses infrastructure costs as there is no longer the need to dedicate hosts based on operating system.
How is Windows is becoming more like Linux?
Cloud native applications are deployed as microservices – rather than an application running as a monolith, it is broken down into discreet reusable pieces - "microservices" - that communicate via APIs. A microservice can be deployed using single or multiple containers.
These microservices must be “orchestrated” to work together so that applications function properly. The most popular container orchestration tool is Kubernetes, it controls container deployment, automates updates, and provide resiliency with fail-over procedures.
Orchestration is especially important because containers are transient, (i.e. they can come and go based on load). Because microservices and their accompanying containers (which are themselves processes) must start up and shut down quickly the underlying OS must be lightweight and nimble. A small payload is an absolute must as speed is of the essence.
Docker, along with Kubernetes, has done much to make Microsoft quite competitive, especially in mixed OS environments, as the deployment, scaling, and administration of containers has now been standardized. In the end, the Docker and Microsoft relationship has abstracted the Windows and Linux operating systems in favor of microservices.
While an argument can certainly be made that container-based environments offer key benefits in terms of enhanced portability, scalability, and flexibility – there is no getting around it - working with microservices is operationally more complicated than a standard virtualized IT infrastructure. Cloud administration requires a fundamentally different set of skills and expertise both in terms of administration and management.
Monitoring containerized environments is also quite different from monitoring traditional virtualized infrastructures. The transient nature of microservices along with the sheer number of components to monitor (i.e. the containers themselves) can make monitoring a daunting task.
Transitioning to a cloud-native application is not for the faint of heart. There is a significant learning curve. Everything changes, including how you interact with the operating systems and how applications are actually deployed.
The approach an organization adopts in terms the deployment, management, and monitoring of its applications and supporting IT infrastructure may be as much dependent on the underlying competencies of the IT staff as it is the efficacy of the technology itself.
Want to Learn More:
Download our Red Hat Linux vs Windows price matrix. The matrix compares Reserved Instance Pricing for for Standard, Compute, and High Memory machine instance classes.
In addition the matrix examines pricing for the multiple vCPU configurations within an instance class