Docker is really efficient when using your system’s resources to help you isolate and manage your application. For eg. Docker lets you run your application on a specific machine where it won’t effect other resources on the same machine. This machine could be your development laptop or a cloud server.
Imagine you’ve 10 different applications with each having approximately 10 different framework agnostic dependencies.
VM waste a lot of resources. People often use vagrant to isolate apps. But it also utilises VM to allocate resources, yet the wastage is still there as vagrant lets you manage VMS on the command line.
Lets say you’re using vagrant for those 10projects. And each application is approx. 700MB of size. That will make around 7 gb of HDD space. Well docker solves this issue for you.
Docker will intelligently share the common stuff between these applications & end up with the space necessary for package dependencies and unique set of data which saves around 10x of disk space savings.
There are cases when some application is working on your machine and causing issues on your team partner’s machine. Consider you’re using a diff version of OS or a step ahead or behind in installed dependencies. Well obviously things will not be the same for your other team members.
Docker eliminates that problem by putting your application into an special kind of a package which will ran under the type of environment you choose which is called a Docker File. It will run your apps in a controller environment whether your machine running docker is windows, linux or macOS.
Less_burdens === more_flexibility
New development environments can be discouraging and takes hours or sometimes days to setup. Well docker empowers you here and lets you experiment with the frameworks and services without having to bear the pain of installing every little dependency.
In short, docker is an awesome toolset for both developing & deploying applications.