SQL Server 2017 was released in October 2017, and with that release, came new changes (as per usual with SQL), including improved support for running SQL Server on Linux and Docker containers. Microsoft also updated the SQL Licensing brief to explicitly call out how licensing works with virtual containers.
How do these changes affect me?
Let’s start by first answering the question - what are containers? It’s easiest to contrast this new virtualization technology with virtual machines: with VMs you are virtualizing the hardware which an OS and its applications run on, however with containers – all you are virtualizing is the applications and their dependencies which are isolated and held within the virtual ‘container’. This has several benefits: it is much quicker to spin up containers as well as less resource-intensive to virtualize. Containers are also OS and hardware agnostic which means you can easily migrate containers from an on-premise Linux or Windows environment to different cloud platforms with minimal effort. Containers are also more-secure as they are isolated from other applications and the OS so if they are compromised, it’s much harder to gain access to other systems.
Docker is the most widely known containerization platform and has pretty good Windows support, but Kubernetes which is primarily used with Linux is known for more robust configuration options (which also means it’s a bit less friendly to use). There are other container platforms but these are the two main competitors in the space. Google was an early-adopter of container technology and runs everything using its own container platform, and it creates and destroys billions of containers every week. When you open up YouTube – that’s a separate container that was spun up milliseconds ago and will die when you close it. It’s very likely we will see more and more containerization in the future due to all of the benefits available with this technology, especially as it matures.
What is the takeaway?
The good news is that from a licensing standpoint, If you understand how to license SQL within a traditional Virtual Machine environment, then you will be glad to know that SQL licensing running in containers works exactly the same (With SQL Server Enterprise you have the option of licensing individual containers with a 4-core minimum or license the Entire host to cover all VMs on the host, and with Standard you can license individual-containers).
From a discovery and management standpoint, however, one thing to keep in mind is not many software discovery tools have the ability to see what is running inside of containers, and those that would, would need additional configuration and access. All you would be able to see when scanning a machine is that Docker is running. The other point to keep in mind is that when you are provisioning a VM you are explicitly asked to assign the number of virtual processors and cores, but with containers – you have to go out of your way to limit the cores used. By default, containers use all available cores so I expect when we do see containers they will be configured to use all of the cores on the host which may have unexpected licensing consequences.