If you do not care about the quality and repeatability of the environment - yes, it's not necessary. Or you 10 years working with one code base and working with legacy code.
Well, dockers doesnt guarantee any of that. When i asked our devops about why my env is so different than his, he said that docker is not about that. I didnt ask what its for, but i waste a lot of time on it and i remember times when i didnt have to.
PS. Quality and repeatability of environment is easily achivable without containers in any shape or form.
The differences are big. You running code locally on mac os, but production runs on Linux. Different versions of libraries, toolchains, etc. The only way to avoid this thing - run in same environment. Even if you use a Vagrant you still running in totally different environments. Only containers can provide possibility to run the same environment locally and in production.
If you have very simple app, then maybe they are the same.
When you introduce external services, async cloud functions, environment variables, feature flags, dependencies, missing mocks... then its not the same, and the whole containerization loses its shine and starts to cost more than its worth.
Ideal world would be... ideal, but its not. And docker is not necessary for every dev, by any stretch of an imagination.
I can answer to question from title: It is not necessary at all.
If you do not care about the quality and repeatability of the environment - yes, it's not necessary. Or you 10 years working with one code base and working with legacy code.
Well, dockers doesnt guarantee any of that. When i asked our devops about why my env is so different than his, he said that docker is not about that. I didnt ask what its for, but i waste a lot of time on it and i remember times when i didnt have to.
PS. Quality and repeatability of environment is easily achivable without containers in any shape or form.
The differences are big. You running code locally on mac os, but production runs on Linux. Different versions of libraries, toolchains, etc. The only way to avoid this thing - run in same environment. Even if you use a Vagrant you still running in totally different environments. Only containers can provide possibility to run the same environment locally and in production.
If you have very simple app, then maybe they are the same.
When you introduce external services, async cloud functions, environment variables, feature flags, dependencies, missing mocks... then its not the same, and the whole containerization loses its shine and starts to cost more than its worth.
Ideal world would be... ideal, but its not. And docker is not necessary for every dev, by any stretch of an imagination.
Also, if docker is necessary for quality software - are you saying that before docker was invented, there was no quality software?
It was much harder to achieve same level of quality.