Docker is an open source project that automates the development and deployment of applications inside software containers, by providing an additional layer of abstraction and automation of operating system level virtualization on Linux. Docker extract its component to accelerate the innovation across the ecosystem and donated it to open foundation. Docker is both a daemon and a client command. Docker is great at setting up a local development environment because it easily adds the running process without duplicating the virtualized resource. Docker is spinning out a component of a platform that called container runtime, as high level abstraction of docker architecture is an integration of many different components and together. That includes everything we need to develop an application, building and deploying them, managing them, etc.
Docker is a two part shell/management layer for building and running virtual linux containers. Therefore, it gives the advantages to both dev as well as ops teams who want to build something productive by resolving more problems. And Container is an execution environment to run application that shared the same underlying Operating System (OS) of the host. Examples of container include: Docker Containers, Linux Containers (LXC), Microsoft Windows Containers etc. Containers allow developers to bundle up an application with all of the parts it needs, such as libraries and other dependencies, and ship it as one package. The great thing about Docker is that it is light-weight because it relies on shared-kernel linux containers which easily allowing the running and management of applications with different requirements side by side in isolated containers. It also makes it easy to run multiple versions or instances of the same program without configuration headaches and port collisions. Docker uses a client-server architecture. Developers can focus on writing code without worrying about the system on which their code will run with docker.