I enjoy writing code and develop applications that solve real issues, but there are many things that developers need to do in order to deliver their applications to the world.
I my case coding is the fun part of the job, the one I enjoy more.
However applications do not run in magic boxes, but in servers (real ones or VPS) that need to be properly configured in order to run the applications.
There are two main issues that Docker solves making developers life easier:
To run a certain application in production, the host server needs to have the proper OS, with proper programming languages, frameworks, libraries and other tools, and all of them need to have the correct version and the correct configuration.
It is a demanding task. Surely once you do it, you'll search for a way to automate the process.
Developers need to run and test the applications in their development machines, usually laptops.
Therefore their laptops need to have a configuration theoretically identical to the production servers.
That is not so easy to achieve for two different reasons:
- often the developers work in different projects at the same time, and these can require different configurations
- the server and the local machine should stay in sync: if you even update just a library on your local machine but not on the server (or viceversa) you will stumble on the infamous issue:
... but it was working on my machine!
Docker helps to solve both issues. Thanks to concepts like images and containers it allows to create and run applications in isolated containers, that can be hosted in any laptops, servers or Cloud services as long as these support Docker.
Images can be easily distributed through services like Docker HUB.
Docker already changed the way developers and DevOps work with applications. I knew about it, but only started to learn and use it a couple of months ago.
Learning the basic of Docker it's not complicated, and certainly it's worth the time and effort.
In the next post I'll write an FAQ that answers all the questions that I had before learning and using Docker.