Why we use containers
There are a metric shit ton of things that interact with an application that you run locally - your OS, system & env variables, software deps, & configs. It's super common in the software industry to run into problems like: "This works on my computer - I'm not sure why it's not working on yours."
There's a solution - containerization.
TLDR; containerization allows applications to run consistently on any computer no matter what the differences mentioned above may be.
How containerization works
Containerization packs all the important shit into a standardized environment that locks in all of the dependencies into its own isolated segment. This means that we don't have to worry about interferences between containers - we could conceptually have thousands of containers running on the same OS and there would be no risk of them interfering with each other (handling a lot of containers efficiently is difficult - which is why container orchestration platforms like Kubernetes exist.)
All of this is made possible by images - which feels like a strange word but it just refers to a "snapshot" of the configuration needed to create the standardized environment.