Few other technologies have penetrated technology companies as rapidly as Docker (or more generally, containers). It seems like the majority of developers and companies are using containers in one way or another. Many use containers to simplify the setup of local development environments, but more and more companies are starting to completely re-architect their infrastructure and deployment processes around containers. In this post I’m hoping to provide a brief overview of the current state of the ecosystem.
Engines / Runtimes
Container Engines are the core piece of Container technology. The engine builds and runs containers, typically based on some declarative description, such as a Dockerfile. When people talk about Docker, they typically refer to the Docker Engine, and not necessarily the rest of the ecosystem.
- Docker Engine is the current industry standard and the by far most popular engine.
- rkt is an open-source initiative to take on the Docker Engine, lead by the CoreOS team.
Cloud Services with built-in Docker support
Cloud providers have been quick in offering solutions to run containers on top of their platforms. Some built solutions in-house, and others rely on open source software. Of course, one could manually install Docker an run containers on any server, but most cloud providers go a step further and provide user interfaces that make managing containers easier.
- Amazon EC2 Container Service allows running containerized applications on existing EC2 instances. ECS itself is free, you only pay for the EC2 usage.
- Google Container Engine is built on top of Kubernetes, an open-source container orchestration project started by Google.
- Azure has announced support for Docker containers on top of Mesos
- Stackdock provides hosting for Docker containers.
- Tutum provides hosting for Docker containers.
- GiantSwarm is a cloud platform for defining and deploying microservice architectures running inside containers.
- Joyent Triton provides hosting and monitoring for Docker containers.
- Jelastic Docker provides cloud hosted orchestration for container deployments.
Container Orchestration is one of the most contended areas right now. Working with a few containers is easy, but scheduling, managing and monitoring containers at scale is extremely challenging. Container Orchestration software handles a variety of tasks, such as finding the best place/server to run a container, handling failures, sharing storage volumes, and creating load balancers and overlay networks to allow communication between containers.
- Kubernetes is an open source effort started by Google. Kubernetes is based on Google’s internal container infrastructure, and in terms of features it is the most advanced orchestration platform currently available.
- Docker Swarm allows scheduling containers on a cluster of Docker hosts. It is tightly integrated with the rest of the Docker ecosystem.
- Rancher manages application stacks (linked containers) on a cluster of machines. Rancher features an intuitive user interface, excellent documentation, and runs inside a container itself.
- Mesosphere is a general purpose datacenter operating system. It was not specifically built for Docker, but it includes primitives that make it easy to run containers, or other orchestration systems like Kubernetes, next to traditional services like Hadoop .
- CoreOS fleet is part of the CoreOS operating system and manages the scheduling of arbitrary commands (such as running Docker/rkt containers) within a CoreOS cluster.
- Nomad is a general-purpose application scheduler with built-in support for Docker.
- Centurion is a deployment tool internally used and developed by Newrelic.
- Flocker assists with data/volume migration among containers running on different hosts.
- Weave Run provides service discovery, routing, load balancing, and address management for microservice architectures.
You can run containers on any operating system, but companies are increasingly moving towards containerizing their whole infrastructure. As such, it makes sense to to run a minimal operating systems optimized for Docker and related services.
- CoreOS is designed for automatic updates and focuses on running containers across cluster of machines. It ships with fleet, a scheduler inspired by systemd, but also supports other orchestration systems.
- Project Atomic is a lightweight operating system that runs Docker, Kubernetes, rpm and systemd.
- Rancher OS is a 20MB Linux distribution that runs the entire operating system within containers. It differentiates between “system containers” and “user containers”, each running in a separate Docker daemon.
- Project Photon is an open source effort from VMWare.
Container Image Registries
Image Registries are the “Github for container images” and allow you to share container images with your team, or the world.
- Docker Registry is the most popular open source registry. You can run it on your own infrastructure or use Dockerhub.
- Dockerhub provides an intuitive UI, automated builds, private repositories, and a large number of official images maintained directly by the authors of the software.
- Quay.io is a container registry developed by the CoreOS team.
- CoreOS Enterprise Registry focuses on providing fine-grained permission and audit trails.
Containers write log files that can be ingested into any existing log collection tool. Container monitoring software typically focus on resource usage (CPU, memory) broken down by container.
- cAdvisor is an open source project by Google. It analyzes resource usage and performance characteristics of running containers and optionally uses InfluxDB as a storage backend for analytics.
- Datadog Docker is an agent that collects statistics of running Docker containers and sends them to Datadog for further analysis.
- NewRelic Docker send container statistics to NewRelic’s cloud service.
- Sysdig can also monitor container resource usage.
- Weave Scope automatically generates a map of your containers, helping you understand, monitor, and control your applications.
- AppFormix provides real-time infrastructure monitoring that works with Docker containers.