Docker ecosystem tools
When you think “containers” these days, chances are Docker comes to mind. Docker is the self-proclaimed “world’s leading software containerization platform” — a claim few would disagree with. The Docker container engine — software in a complete filesystem that contains everything needed to run: code, runtime, system tools, system libraries — is ubiquitous, and, according to a 2016 report from DevOps.com and ClusterHQ, 94% of respondents list Docker as their container technology of choice
But “container technology” can be a bit of a misnomer. Docker is synonymous with containers and the container engine, but as operating system virtualization (e.g. “containers”) has matured, the ecosystem of tools and supporting software that surrounds it has grown exponentially. It’s not enough to merely say “containers” anymore; from the operating system to the engine to orchestrators, there are now many choices to help make container implementations successful.
Containers sit on top of a physical server and its host OS, e.g. Linux or Windows. Each container shares the host OS kernel and, usually, the binaries and libraries, too. Shared components are read-only; writing to each container is possible through a unique mount. This makes containers exceptionally “light” — containers are only megabytes in size and take just seconds to start, versus minutes for a VM. There are three main container engines to choose from (and a smattering of other offerings): Docker, CoreOS’s Rocket, and Linux Containers.
Here are the advantages of each one.
- Docker: Docker is based on Linux Containers (another engine in our list), and its first software release was in March 2013, with subsequent releases occurring roughly once every three months. Because the Docker engine is a tidy package created to build, ship, and run applications, software developed and deployed in a container will always run the same, regardless of its environment.
- CoreOS rkt (Rocket): Created by CoreOS in late 2014, project Rocket is different than Docker, primarily around a lack of daemon. Rocket does not have a daemon, so it is executing directly underneath an initial process. Docker container images can be converted into app container images to work around the lack of a daemon. Additionally, the app container runtime runs multiple processes inside a container.
- Linux Containers: LXC (Linux Containers) was initially released in 2008. Both it and Docker are container engines that use kernel namespaces to provide end-user containers. Similar to Rocket, LXC supports running multiple process inside a container, owing to the fact that many tools and applications are optimized for multi-process environments. Docker’s Supervisor tool has been its answer to those software development teams looking to run multiple processes in a single container.
Because containers share a common operating system, only a single operating system needs care and feeding (bug fixes, patches, etc.). There have been several container-optimized operating systems — providing features such as self-updating and self-healing — that have come to market. Containers work in Linux and Windows environments, with Linux overwhelmingly being the OS of choice. Distributions from Ubuntu and Red Hat work well with containers, but CoreOS is one of the first purpose-built container operating systems.
- CoreOS: CoreOS is an open-source project for Linux containers. Initially released in late 2013, applications on CoreOS can and should be run in containers. CoreOS was designed to be managed and run at massive scale, with minimal operational overhead — it’s specifically built for large-scale container deployments, running in a cloud. CoreOS lacks many of the features and functionalities of traditional Linux distributions, given the expectation that most application dependencies will be included in the container in which it is running.
- VMWare Photon OS: Launched in 2015, Photon is VMWare’s Linux-based operating system optimized for cloud- native applications. Photon is optimized for VMware properties vSphere and vCloudAir, but it also offers support for popular Linux containers, such as Docker and Rocket. Running containers inside of virtual machines is not uncommon, especially when there’s a need to run containers of different operating systems on the same physical host. PhotonOS was created to help VMWare customers embrace new workload technologies such as containers without disrupting existing operations.
- RancherOS: RancherOS is a minimalist Linux distribution for running Docker containers. Rancher runs the Docker container engine directly on top of the kernel and delivers Linux services as containers. It also removes what it considers unneeded libraries and runs the latest version of Docker by default. Rancher helps stand up, deploy, and manage Kubernetes, Mesos, or Docker Swarm tools (compute, networking, service delivery, load balancing, monitoring, and scheduling) inside of a containerized environment.
In a container environment, tools that are aware of the underlying resources and can place tasks across the environment, in an automated and policy-driven manner, are essential. It’s not enough to have hundreds to thousands of containers, you need a way to effectively manage the resources those containers run on. Various flavors of Mesos are current marketing leading offerings in the container scheduler space.
- Apache Mesos: First presented in 2009, Mesos is an open source cluster manager that sits between applications and their underlying operating system. Mesos began as a research project at the University of California, Berkeley, and it provides a way to share resources across distributed applications, also known as “frameworks.” Mesos is responsible for allocating resources to frameworks, and frameworks handle determining which resources to actually utilize. Common frameworks include Spark, Hadoop, Storm, Ruby on Rails, and others.
- Mesosphere DC/OS & Open DC/OS: Founded in 2013, Mesosphere is a commercialized version of Mesos. Mesosphere describes its own Data Center Operating System (DC/OS) as “Mesos for mere mortals” — folks looking to utilize Mesos frameworks but without the requisite Ph.D. Mesosphere’s Enterprise DC/OS is an enterprise grade data center-scale operating system, providing a single platform for running containers, big data, and distributed apps in production. In April 2016, Mesosphere released Open DC/OS, an open-source version of the Data Center Operating System.
- OpenStack: OpenStack can be a complementary scheduler to another scheduler (like Mesos). Whereas OpenStack splits a physical cluster across virtual machines — most often KVM-based — schedulers such as Mesos and Mesosphere combine all resources, whether they’re virtual machines and/or bare metal, and can present them as a single entity. If your environment contains no bare metal, OpenStack can be your resource scheduler of choice. But if your environment contains bare metal, you’ll need to go with another scheduler or deploy a mix of OpenStack and “other.”
- Amazon EC2 Container Service (ECS): Not to be outdone, Amazon has introduced their own scheduler for customers running completely in AWS. ECS is a scalable, high-performance container management service that supports Docker containers and allows applications to be run on a managed cluster of Amazon EC2 instances. Amazon ECS eliminates the need to install, operate, and scale other cluster management infrastructure.
If schedulers manage stitching together data center resources to present to distributed applications (that often run in containers), orchestrators handle the organizing of the containers themselves. Because containers often run at scale — hundreds to hundreds of thousands — having tools that can manage all of them is essential. The most commonly used orchestrator currently is Kubernetes (known informally as k8s).
- Kubernetes: Google created Kubernetes in 2014 and donated it to the Cloud Native Computing Foundation shortly thereafter. Kubernetes groups containers that make up an application into logical units for easy management and discovery. Kubernetes can be run anywhere, from public cloud to private on-premises cloud, and provides basic ways to deploy, maintain, and scale applications that reside in containers. According to DevOps.com/ClusterHQ’s report on container adoptions, 43% of respondents cite Kubernetes as their container orchestration tool of choice.
- Red Hat OpenShift: OpenShift is Red Hat’s commercial Kubernetes-only platform that clients can buy instead of build. For those looking for more than open-source community support with standing up, deploying, and managing large-scale containers in production, OpenShift can a viable solution.
- Docker Swarm: Docker may be ubiquitous as a container engine, but it also plays strongly in the container orchestration space. Swarm provides native clustering for Docker, turning a pool of Docker hosts into a single, virtual Docker host. At DockerCon in June 2016, Docker announced several key improvements to Swarm, ostensibly designed to make Swarm a viable alternative to Kubernetes. Most notably, Docker’s 1.12 release enabled One command on each node to join engines to Swarm, eliminating a previous 40+ step workflow.
- Marathon: Marathon is the tool in Mesos/Mesosphere that creates a container orchestration system scaling to thousands of physical servers. Marathon itself is a framework, but can be used to start other frameworks. Marathon has some additional features when it’s run in DC/OS, including virtual IP routing, which enables the allocation of a dedicated, virtual address to an application, and authorization, which provides each user or group access to their own applications and groups.
- OpenStack Magnum: OpenStack, too, has a Big Tent project that addresses container Magnum is the OpenStack API service that makes container orchestration engines such as Docker Swarm, Kubernetes, and Apache Mesos available as first class resources in OpenStack. According to OpenStack’s Project Navigator, as of late 2016 Magnum sees just 11% adoption among OpenStack users and is rated 1 out of 8 for project maturity.
The foundation (e.g.. infrastructure)
While the bulk of container ecosystem tools are of a software variety, infrastructure players are part of the action, too, from servers to storage, all optimized for container environments.
- Docker-ready servers: Both HPE and Microsoft now provide Docker-ready servers, which come preconfigured, integrated, and validated with commercially supported Docker Engine out of the box.
- Persistent storage plug-ins: Prior to Docker 1.8, persistent storage with Docker was clunky and manual. But 1.8 introduced the concept of storage plug-ins. Storage systems can now create a plug-in, whereby volume or LUN creation on persistent storage can be managed through the Docker engine and the docker volume set of commands. Tools such as ClusterHQ’s Flocker and Rancher’s Convoy had acted as plug-ins, prior to Docker formally supporting native plug-ins. With the announcement of Docker 1.8, many storage companies have eliminated the need for intermediary plug-ins by simply creating their own native ones instead.
But what about public cloud offerings?
Docker takes a very infrastructure-agnostic approach to where and why containers are deployed. From on-premises clouds and hybrid clouds to public clouds, Docker’s stated goal is to ensure that applications will always run the same, regardless of its environment. To that end, Docker also has burgeoning relationships with two leading public cloud providers: Amazon Web Service and Microsoft Azure. Docker stated four goals with the AWS and Azure program:
- Deploy a standard Docker platform to ensure teams can seamlessly move apps from developer laptops to Docker staging and production environments, without risk of incompatibilities or lock-in.
- Integrate deeply with underlying infrastructure to make sure Docker takes advantage of the host environment’s native capabilities and exposes a familiar interface to administrators.
- Deploy the Docker platform to all the places where you want to run containerized apps, simply and efficiently and at no extra cost.
- Make sure the latest and greatest Docker versions are available for the hardware, OSs, and infrastructure you love, and provide solid upgrade paths from one Docker version to the next.
Operating system virtualization — containers — provide a way to virtualize an OS in order for multiple workloads to run on a single OS instance. Containers’ speed, agility and portability make them yet another tool to help streamline software development. As more and more companies adopt containers and move them into production, it was natural that surrounding ecosystem software and tools would spring up to unlock the promise of this new, disruptive way to develop and deploy software.