page_title: Understanding Docker page_description: Docker explained in depth page_keywords: docker, introduction, documentation, about, technology, understanding, Dockerfile
What is Docker? What makes it great?
Building development lifecycles, pipelines and deployment tooling is hard. It's not easy to create portable applications and services. There's often high friction getting code from your development environment to production. It's also hard to ensure those applications and services are consistent, up-to-date and managed.
Docker is designed to solve these problem for both developers and sysadmins. It is a lightweight framework (with a powerful API) that provides a lifecycle for building and deploying applications into containers.
Docker provides a way to run almost any application securely isolated into a container. The isolation and security allows you to run many containers simultaneously on your host. The lightweight nature of containers, which run without the extra overload of a hypervisor, means you can get more out of your hardware.
Note: Docker itself is shipped with the Apache 2.0 license and it is completely open-source — the pun? very much intended.
Docker has three major components:
Docker containers are like a directory. A Docker container holds everything that is needed for an application to run. Each container is created from a Docker image. Docker containers can be run, started, stopped, moved and deleted. Each container is an isolated and secure application platform. You can consider Docker containers the run portion of the Docker framework.
The Docker image is a template, for example an Ubuntu operating system with Apache and your web application installed. Docker containers are launched from images. Docker provides a simple way to build new images or update existing images. You can consider Docker images to be the build portion of the Docker framework.
Docker registries hold images. These are public (or private!) stores that you can upload or download images to and from. These images can be images you create yourself or you can make use of images that others have previously created. Docker registries allow you to build simple and powerful development and deployment work flows. You can consider Docker registries the share portion of the Docker framework.
Docker is a client-server framework. The Docker client commands the Docker daemon, which in turn creates, builds and manages containers.
The Docker daemon takes advantage of some neat Linux kernel and
operating system features, like namespaces
and cgroups
, to build
isolated container. Docker provides a simple abstraction layer to these
technologies.
Note: If you would like to learn more about the underlying technology, why not jump to Understanding the Technology where we talk about them? You can always come back here to continue learning about features of Docker and what makes it different.
In order to get a good grasp of the capabilities of Docker you should read the User's Manual. Let's look at a summary of Docker's features to give you an idea of how Docker might be useful to you.
Docker is made for humans.
It's easy to get started and easy to build and deploy applications with Docker: or as we say "dockerise" them! As much of Docker as possible uses plain English for commands and tries to be as lightweight and transparent as possible. We want to get out of the way so you can build and deploy your applications.
Dockerise And Go!
Docker containers are highly portable. Docker provides a standard container format to hold your applications:
Any machine, be it bare-metal or virtualized, can run any Docker container. The sole requirement is to have Docker installed.
This translates to:
No more resources waste.
Containers are lightweight, in fact, they are extremely lightweight. Unlike traditional virtual machines, which have the overhead of a hypervisor, Docker relies on operating system level features to provide isolation and security. A Docker container does not need anything more than what your application needs to run.
This translates to:
An amazing host! (again, pun intended.)
Docker isn't prescriptive about what applications or services you can run inside containers. We provide use cases and examples for running web services, databases, applications - just about anything you can imagine can run in a Docker container.
This translates to:
A wonderful guest.
Today, it is possible to install and use Docker almost anywhere. Even on non-Linux systems such as Windows or Mac OS X thanks to a project called Boot2Docker.
This translates to running Docker (and Docker containers!) anywhere:
A tool that you can trust.
Docker does not just bring you a set of tools to isolate and run applications. It also allows you to specify constraints and controls on those resources.
This translates to:
Without dealing with complicated commands or third party applications.
Docker knows that No One Is an Island.
Docker allows you to share the images you've built with the world. And lots of people have already shared their own images.
To facilitate this sharing Docker comes with a public registry and index called the Docker Index. If you don't want your images to be public you can also use private images on the Index or even run your own registry behind your firewall.
This translates to:
I suppose it is tempting, if the only tool you have is a hammer, to treat everything as if it were a nail. — Abraham Maslow
Docker containers are:
Docker containers are not:
Docker is a framework. As a result it's flexible and powerful enough to be used in a lot of different use cases.
Visit Understanding the Technology in our Getting Started manual.
Visit Working with Docker in our Getting Started manual.
Visit Get Docker in our Getting Started manual.