There are times when you want to reproduce your software like it used to be at a certain time in the past. Maybe you want to make sure that you can reproduce every version of your software at a later point in time. Or you want to replicate the production system on a local machine to investigate some problems with the production system.
Those problems are related to each other. Without Docker this can be really hard, sometimes impossible. With Docker you not only have your code under version control, but also part of your infrastructure to run your code.
Sometimes you ask yourself:
How exactly was the state of our system on that first Wednesday three years ago?
(You probably only ask this yourself if you are sued or audited by someone ;-) )
If you have a source code management system (like Git) and a Docker configuration you can reproduce the system exactly as it used to be on that point in time.
You can checkout the version of your code on said day and build your Docker image. You start your image on your local machine and voilà, you have exactly the software that run on that day.
Without Docker this can really be quite some work. Maybe you need to downgrade the operating system on a developer machine to the version from three years ago to have exactly the right system libraries installed. Maybe you just install everything from your production system onto a new computer by hand. Either ways, this can take days until you have a replica of the system a couple of years ago.
With Docker, because everything you need to run your system is inside the Docker image, you have the exact same system as three years ago running in a matter of minutes, not days.
(Of course to have exactly the same software as on that day in the past you also need to have the configuration (environment variables etc) and eventually the exact state of the database on that day. But hey, Docker can do a lot, but it's not magic.)
Modern software systems have a lot of moving parts. All those parts interact with each other and form a complex system. There can be really hard to track problems that only appear when all the moving parts of that system are in a certain state.
These kind of problems are incredibly hard to track down.
If your development system is different than your production system it is outright impossible.
Docker makes this easier: Just start all your containers that you have in your production system on your local development system.
This way you have the same complex system running locally as you have in production.
This way you will save days or even weeks in finding such problems.
(If your system is spread out over multiple servers, there will be still differences between your multi server production system and the development system on your single machine. But hey, we are as close as we can get on a single machine.)
Implementing Docker also makes your software auditable and reproducible. This can be really helpful and save a lot of time and money in not so easy times (when you have a hard to track down problem in production or when you are sued or audited)
WunderPreview: Get a live preview environment for every new feature.
Works for every tech stack. 30 days free trial. No credit card required.