Sashkin - Fotolia
Generally speaking, containers are a part of the OS rather than a separate layer, like with the hypervisor. But effective and portable container use relies on a common tool set and mechanism for packaging and distribution, so organizations must adopt a container platform for that task.
Docker is probably the most recognized and widely used open source application container platform. Docker was originally designed to run on Linux, but it has since been extended to support Windows Server 2016 and OS X through a Linux VM. Docker automatically packages and configures the container environment, ensuring that all of the libraries and dependencies needed to run the application in Linux or Windows Server are included in the container. Developers can build, test, iterate and deploy container applications to clusters without worrying about issues like language conflicts or version compatibility problems. It's this standardized packaging that makes Docker containers readily portable, sparking a renewed interest in container technology.
Windows Server and Hyper-V containers
The release of Microsoft Windows Server 2016 included Windows Server Containers, which are designed to extend the Docker API and tools to Microsoft Windows environments. Windows Server 2016 also provides Hyper-V containers. Although this isn't platform-compatible yet -- Linux containers won't run on a Windows Server host and vice versa -- the Docker client can manage Linux, Windows Server Containers and Hyper-V containers. Windows Server containers are similar to Linux containers, with fast startup and kernel sharing, but they should only host applications that the OS trusts. Hyper-V containers essentially create a VM and then run containers within that VM. This provides more isolation and is usually best when running sensitive or critical workloads.
There are other lesser-known container platforms. CoreOS Rocket -- commonly referred to as rkt -- is a command line-based application container platform for Linux. Though Docker has the lion's share of the container market, rkt is one of the largest competitors to Docker. Rkt can run Docker and Open Container Initiative images and is noted for security with support for Security-Enhanced Linux and trusted platform management. Rkt integrates with system, upstart, multiple execution engines and cluster orchestration tools, like Kubernetes and Nomad.
Other container platforms
Other container platforms include Linux Containers (LXC), LXD and OpenVZ. Docker was originally based on LXC, but LXC is now an aging Linux-only platform that was never truly popular in production environments. LXD is a little younger. Canonical -- and its Ubuntu Linux version -- is the main sponsor for LXD, building on LXC and integrating with OpenStack to provide a system container that can host a complete OS inside a container. This makes LXD closer to a hypervisor like KVM, but Docker containers can be run atop that OS within the container. Finally, OpenVZ was developed by Virtuozzo and is probably the oldest of the system container platforms.
Choosing a platform depends on careful consideration of OS support, security, portability, community support and other factors. But don't make decisions based on descriptions or reputation alone. Hands-on testing and evaluation are central parts of container platform adoption. Test each candidate in a lab environment, try a variety of applications, see how each application runs and moves between platforms and evaluate the ecosystem to determine vendor and community support.
Decide between bare metal or VMs for Docker containers
Backup and restore data with Docker containers
Run containers using hyper-converged infrastructure
Dig Deeper on Application virtualization
Related Q&A from Stephen J. Bigelow
Navigating data center malfunctions when hardware is off premises can be tricky. Organizations must have strong SLAs with their colo provider to ... Continue Reading
Regression tests and UAT ensure software quality and both require a sizeable investment. Learn when and how to perform each one, and some tips to get... Continue Reading
Learn the meaning of functional vs. nonfunctional requirements in software engineering, with helpful examples. Then, see how to write both and build ... Continue Reading