Docker is an open source software platform to create, deploy and manage virtualized application containers on a common operating system (OS), with an ecosystem of allied tools. Docker Inc., the company that originally developed Docker, supports a commercial edition and is the principal sponsor of the open source tool.
Docker is a tool that packages, provisions and runs containers independent of the OS. Container technology is available through the operating system: A container packages the application service or function with all of the libraries, configuration files, dependencies and other necessary parts to operate. Each container shares the services of one underlying operating system.
Docker was created to work on the Linux platform, but has extended to offer greater support for non-Linux operating systems, including Microsoft Windows and Apple OS X. Versions of Docker for Amazon Web Services (AWS) and Microsoft Azure are available.
Docker advantages and disadvantages
Docker has emerged as a de facto standard platform that allows users to quickly compose, create, deploy, scale and oversee containers across Docker hosts. Docker allows a high degree of portability so that users can register and share containers over various hosts in private and public environments. Docker benefits include efficient application development, lower resource use and faster deployment compared to VMs.
There are also potential challenges with Docker. The sheer number of containers possible in an enterprise can be difficult to manage efficiently. Security can also pose a problem. Despite excellent logical isolation, containers share the host's operating system. An attack or flaw in the underlying operating system can potentially compromise all of the containers running atop the OS. Some organizations run containers within a VM, although containers do not require virtual machines.
Docker consists of several major components. Docker Community Edition is open source, while Docker Enterprise Edition is a version offered by Docker Inc. Enterprise Edition versions include Basic, Standard and Advanced.
The Docker Engine is the underlying client-server tool that supports container technology to handle the tasks and workflows involved in building container-based applications. The engine creates a server-side daemon process that hosts images, containers, networks and storage volumes. The daemon also provides a client-side command-line interface (CLI) that allows users to interact with the daemon through the Docker application programming interface. Containers created by Docker are called Dockerfiles. Docker Compose files define the composition of components in a Docker container.
Docker Hub is a software-as-a-service tool that enables users to publish and share container-based applications through a common library. The service touts more than 100,000 publically available applications, as well as public and private container registries.
Docker swarm mode in Docker Engine supports cluster load balancing for Docker. With Docker swarm mode, multiple Docker host resources are pooled together to act as one, which enables users to quickly scale up container deployments to multiple hosts.
In the current version offered by Docker Inc., Docker Enterprise 1.13, Compose files deploy swarm mode services, allowing users to specify the number of desired instances for each service, implement rolling updates across the cluster, and apply limits on services. The newer Docker CLI can handle older Docker daemons. Version 1.13 also features cleanup commands that help users manage Docker's disk space and delete unneeded data or volumes. The CLI's command lists are organized to show functional relationships. In this version, service logs help troubleshoot and debug services. Docker pulls logs from all related containers and shows them in a single console. Build enhancements simplify the way that file system elements are added to containers.
Docker alternatives, ecosystem and standardization
There are third-party tools that work with Docker for tasks such as container management and clustering. The Docker ecosystem includes a mix of open source and proprietary technologies such as open source Kubernetes, Red Hat's proprietary OpenShift packaging of Kubernetes and the Canonical Distribution of Kubernetes referred to as pure K8s. Docker competes with proprietary application containers such as the VMware vApp and infrastructure abstraction tools, including Chef.
Docker is not the only container platform available, but it holds the vast majority of the container marketplace. CoreOS rkt, pronounced rocket, is one of the largest competitors to Docker. Rkt is noted for its security with support for SELinux and trusted platform management. Other major container platforms include LXD, which is from Canonical (and its Ubuntu Linux version), and OpenVZ, the oldest of the system container platforms, originally developed by Virtuozzo. OpenVZ combines the small size and high speed of standard containers with the additional security of an abstracted OS layer.
Docker is currently open source and community-supported, but there is an initiative to more formally standardize container packaging and distribution. The principal effort is embodied in the OCI, established to foster a common container format and runtime environment. Docker Inc. has a leading role in the OCI, but shares membership with over 40 other container industry vendors, including CoreOS, AWS, Intel, Red Hat, Virtuozzo and others.