Analysis
Containers are lightweight, virtual, runtime environments for deploying applications. They offer many of the same advantages as virtual server products such as VMware vSphere or Citrix Xen Server. There are a number of companies that produce containers. Some, such as wrecker and Docker require an additional licensing fee for more than a trial. Linux Containers (LXC), on the other hand, is licensed using GNU LGPL v.2.1 and is free. Like a virtual server, containers provide resource isolation while maintaining high capacity utilization of server resources. Unlike virtual servers, containers themselves use fewer server and storage resources since they don’t require an entire operating system stack for each application in order to maintain isolation. Instead, most containers run multiple applications on a single OS kernel namespace providing logical isolation. Lack of duplicate operating system images also saves on operating system licensing. Containers can also be used to migrate applications from one platform environment to another. If the platform supports the container runtime environment, it will run the applications in the container. This makes containers a handy way to move an application from a local server to a cloud server instance or between cloud server instances. However, there are some shortcomings to containers. Containers allow application density to get quite high. This can lead to overcommitted hardware. This is especially true for network connections as each container requires one or more IP address. Managing container environments is also more difficult. As a technology, containers are still early in their development and the ecosystem immature. There are fewer products available that help to monitor and manage containers than exist for virtual servers. Finally, different containers support different runtime stacks but never all of them. Finding a container that supports common enterprise stacks such as .Net or Java is difficult. On the other hand, support for open source stacks such as PHP or JavaScript is widely available. The same is true for other elements of runtime stacks such as databases and middleware.
Guidance
Any IT organization that maintains its own data centers and has more than a few server-based applications should consider using containers. They achieve the same type of resource virtualization that virtual servers do without the additional OS licensing, overhead, and complexity. This is not to say that server virtualization has no place in the data center. It is conceivable that both will co-exist with several virtual servers hosting many application containers. Use of containers for production systems should be approached cautiously. The technology is still maturing and the ecosystem is not as well developed as it is for virtual server technology. It is especially important to understand what runtime stacks are supported by a container.
Conclusion
Containers have the potential to provide higher capacity utilization than server virtualization while maintaining resource isolation and ease of migration. The newness of the technology means a cautious approach is in order. As container technology matures and the ecosystem expands, expect that containers will become a regular part of the IT toolkit. This Research Brief can be downloaded as a PDF: 2014-08-18 – Containers – The New Way to Deploy Applications.