Why Do You Need Docker?
Why Do You Need Docker?

In this video you will learn why do you need Docker, what is it and what problem it solves for local development and production development. In 10 minutes you will get enough knowledge about what is docker and if you need to learn it or not.

As you know we are developing lots of applications today. And it's always different frameworks, different languages, different architectures and different tools. It's all increases complexity and this is exactly the problem that Docker is trying to solve. Let's just imagine a simple usecase.

For example you are making a NodeJS application. So it's just a website and you have on backend nodejs with for example express then you have some database for example mongodb and you have some frontend, for example react. So it's a small project with database backend and frontend. And the point is that at some point you want to open your code in other machine. What problem will you have?

The first problem is to remember all technologies that you used. For example you used some version of node and maybe you developed your project a year ago or 2 years ago. If you will use your project with newest Node on other machine normally nothing will work. Because some things in nodejs were changed which is fine but we didn't lock any version inside the project or we even don't remember what version we used. And the same goes with every tool that you used. For example it can be database and then you install the new database and then you need to migrate your data somehow because the database version is different and this doesn't give you stability of development.

If you are watching this video I think you have some programming experience and worked in teams. And normally when you come to some company you need to setup your machine. I would say that from my experience in almost all companies it was really tough process. You need to setup a lot of programs, sometimes with specific versions, maybe there is a company documentation like "How to install everything" but it's outdated and then something is broken and you need to fix it and ask different people in new company to setup it properly and it can take like 2-3 days, and I had this experience and I saw other people struggling and then this process continues again and again for each new person in a company.

And Docker solves exactly this problem. So basically you are sure that your code is working exactly the same on every machine. It's not like "It works on my machine" and other person can't even start it, this is an easy onboarding for different developers, easy supporting and you are sure that you project will work.

For now I was talking about local development. But what about deployment? Let's say that we want to move our code to the server so it will be accessible in internet for everybody. And this is a standard process, we need to do it with every project. And there are always problems there. You need to install specific version on libraries for example node, then what will happen if for different project you need different node versions for example or with different dependencies. They you install new tools and maybe you don't need older tools and libraries anymore but you don't even remember what you installed on that server and then you just have a mess with different libraries, versions and this is all uncontrollable hell.

Maybe you remember how people were deploying projects previously. For example with FTP clients like Filezille they were copying files directly to the server. Then people understood that it's not scalable, different people can't deploy simultaniously and people invented new tools like ansible or chef where you can just write recipes what you need to do to deploy your application. Yes of course it's easier with such tools but it doesn't fix a problem. We want to have a stable code which will be the same everywhere, we want to start all our code with 1 command without the need to install thousands of libraries with specific versions and we can deploy our code in any amount of servers with 1 command and manage it easily.

I can't of course say that Docker is a silver bullet. But it tackles and solves lots of problems for small, medium and huge projects and a lot of companies all over the world are using Docker successfully and it's not small project anymore it's a stable solution with is in production lots of years already.

Docker nowadays is a huge ecosystem with different products, paid services, free services, different tools and when I started learning Docker long ago for me the question was "Does Docker solve my problems?". It was not like "Docker is new cool thing and I want to test it". I really wanted to solve my problems. And my problem was that I wanted a consistent development and production environment where it will work on any machine in the same way and I won't struggle.

I hope that this video helps you to understand what is Docker and what problems does it solve.

And if you want to learn more don't forget to check my full courses regarding different web technologies.