I have come to the realization that containerization offers numerous benefits compared to traditional virtualization and will likely continue shaping future trends of web and software deployment.
Although containerization has been around in some form for over a decade, the release of Docker in 2013 caused rapid growth and really revolutionized the way developers could quickly build and release applications within a container.
One of the largest benefits of using a containerization approach is that you no longer need an entire operating system for your independent app to work properly. The container which you are deploying to is significantly smaller than an entire VM and also has the benefit of not being tied to a specific OS.
Another benefit to using containers is that they can be sandboxed and the app running would not have access to any of the other files or information. From a security standpoint, containers can provide this secure environment very efficiently although it might be possible for someone to exploit the intended sandbox and gain unintended access.
I think utilizing containers also lets you focus more on the actual software instead of worrying about installing and tweaking all the right programs on the OS. In the past I have used some virtual machines such as VirtualBox to run and quickly test out other OS’s such as Mac OS and Ubuntu. While these VM’s were overall quite capable, I definitely did run into some performance issues and can imagine how these limitations would be intensified in a live production environment where high performance is needed.
I think the real challenge also comes from migrating an existing virtualized program with thousands of dependencies to a container image. In this case where you need specific features of the OS, I could understand why you might choose not to use a containerization approach. There is also a good chance that long-term serverless computing will end up becoming the dominant form of deployment thanks to technologies such as AWS Lambda.