Build, Ship and Run Any App, Anywhere
Docker is an open source container platform providing containers to build/develop, ship and run the widest array of applications from development to production.
Docker uses the resource isolation features to allow independent “containers” to run within a single Linux instance, avoiding the overhead of starting and maintaining virtual machines (VMs). Docker containers are so lightweight, a single server or virtual machine can run several containers simultaneously.
Docker can be integrated into various infrastructure tools, including Amazon Web Services, Ansible, Chef, Google Cloud Platform, Jenkins, Kubernetes, Microsoft Azure, OpenStack Nova, OpenSVC, Oracle Container Cloud Service, Puppet, Vagrant and VMware vSphere Integrated Containers.
Containers Vs. Virtual Machines
Containers are an abstraction at the app layer that packages code and dependencies together. Multiple containers can run on the same machine and share the OS kernel with other containers, each running as isolated processes in userspace. Containers take up less space and memory than VMs (container images are typically tens of MBs in size), and they can be created in a matter of seconds.
Virtual machines (VMs) are an abstraction of physical hardware turning one server into many servers. The hypervisor allows multiple VMs to run on a single machine. Each VM includes a full copy of an operating system, one or more apps, necessary binaries, and libraries – taking up tens of GBs. VMs can also be slow to boot.
Docker Engine is a client-server application which will install directly on the host operating system. It has with below major components.
A server which is a type of long-running program called a daemon process (the dockerd command).
A REST API which specifies interfaces that programs can use to talk to the daemon and instruct it what to do.
A command line interface (CLI) client (the docker command).
The Docker Engine has the capabilities of spinning multiple Docker containers as an individual process. Also, the docker engine takes care of resource allocation between docker containers.