It works on my machine. – Dev.
!”#$%&”! the update broke my code. – Another Dev
I don’t have that version of the library. – Yet another Dev
If you are a SysAdmin or a DevOps in your company you’ve probably heard these words more than you should have. I hear you, been there.
The thing is that it can be really difficult to maintain the same environment throughout all the developer’s machines, the more specialized, the more specific the setup required, and every single developer has his perks and preferences regarding how to configure their own working environments. Don’t get me wrong, they totally should, but there comes a time when you have to unite everything and get it into production, that’s when the
nightmare fun begins.
Over the last couple of years one of the tools that has gained huge popularity and momentum is Docker, which in their own words is:
Docker is an open platform for building, shipping and running distributed applications. It gives programmers, development teams and operations engineers the common toolbox they need to take advantage of the distributed and networked nature of modern applications.
About the technical details of what is Docker you can see here, here or here. In short, docker is a way of running a lightweight virtual machine on your own computer, each Docker image contains a full Operating System in them.
You can actually see what the advantages of having a complete OS in an image are. And of course you can see how this fixes most of our problems with different environments, different OS’s. The range of things we can do is huge! You can have a look at Jessie Frazelle’s blog (huge fan) to see all kinds of containers she has made possible. You can run spotify in a container, you can run libreOffice, R, nginx, and the list goes on and on. You can build a Docker for your web-app, your API, pretty much everything you like.