To best understand it, we have to look back at how we used to deploy applications to the cloud before containers. Basically, to run an application, we used to spin-up an entire virtual machine (VM) — i.e., the code of the application and the underlying operating system (OS).
The challenge with the old way is that when you needed to scale-up for more demand, you had to spin-up more VMs. This was very expensive as it ate up a lot of hardware/server resources.
But with containers, our applications only use the specific code they need to run. As a result, you didn’t need to spin-up an entire VM to scale-up, just the specific resources of application.
Because you’ve separated the application from the underlying OS (e.g., ‘put it in a container’), it’s also easier to move containerized applications. You can move them into a different cloud or hosting environment without having to re-code most of it.