Docker is an open-source virtualization technology that automates the deployment of Linux and Windows applications inside isolated software containers.
It wrap up a piece of software in a complete layered filesystem that contains everything it needs to run: code, runtime, system tools, system libraries, and basically anything you can install on a server.
This guarantees that it will always run the same, regardless of the environment it is running in, helping towards more reproducible runtime environment whatever its purpose is (development, testing, continuous integration, staging, production, ...)
Unlike other virtualization tools like Xen, VMWare or VirtualBox, Docker does not emulate a virtual hardware machine, all your container will run using the same kernel, but they won't see each other by default.
Docker uses the resource isolation features of the Linux kernel such as cgroups and kernel namespaces, and a union-capable file system (such as aufs) to allow independent "containers" to run within a single Linux instance, avoiding the overhead of starting and maintaining virtual machines.
The Linux kernel's support for namespaces mostly isolates an application's view of the operating environment, including process trees, network, user IDs and mounted file systems, while the kernel's cgroups provide resource limiting, including the CPU, memory, block I/O and network.