Docker is an open platform for developing, shipping, and running applications.
In lay mans language i would define docker as a platform that enables you build once and deploy everywhere.Docker enables you to separate your applications from your infrastructure, therefore you wont have to set up all the dependencies your apps need all over again and again as you migrate between different environments
Before proceeding further it is important to highlight some important concepts that you will commonly hear of in the docker world .This are:
A Docker image is a lightweight, standalone, executable package of software .For example we have a
mysql image which includes everything needed to run mysql: code, runtime, system tools, system libraries and settings
The hub is a repository where container images are stored. You can get public images as well as store your own private images.
Docker images become containers when they run on Docker Engine.
Docker Engine is the runtime environment for all containers. Docker engine can be used in both linux and windows based infrastructure. A docker application can easily be run in any environment as long as there is a docker engine.
This solves the “dependency hell” for developers and operations teams, and eliminating the “it works on my laptop!” problem.
Before understanding the difference between Docker and Virtual machines its important to understand Operating systems. Operating systems have an application and kernel layer
Docker virtualizes the application layer and use the kernel of the host while a virtual machines virtualizes both
Docker size is small a couple of megabytes while a
virtual machine size is large a couple of gigabytes .
Docker is faster while a
virtual machines size is slower.