Docker is a tool designed to make it easier to create, deploy, and run applications by using containers. Building and deploying new applications is faster with containers. Docker containers wrap up your application and everything it needs such as dependencies and libraries into one package. This guarantees that your application will always run the same way regardless of the environments(Mac, Linux, Unix, Windows, etc). If the docker engine is installed on the environment your application will work. By doing this, you the developer can rest assured that your application will run on your local, Dev, QA, and production environment.
In a way, Docker is like a virtual machine. a virtual machine creates a whole virtual operating system, a docker container uses the same underlying operating system (Linux kernel) as the server that it is running on. Docker only requires applications to be shipped with things not already running on the host server. This gives a significant performance boost and reduces the size of the application.
Without docker containers, your application can behave differently in different environments. I have seen applications working on my local machine but not on my dev environment. One of the most frustrating things of deployment is when you have a working application on your local machine, but you deploy it to production and it does not work. Trust me I have seen this mess more than once. With Docker containers, you are confident that your applications will work on local, Dev, QA, and production.