A Docker Image is not exactly an image or a picture. It is basically an executable file that contains instructions for building a container. So the job of a Docker Image is to build containers.
The relationship between a Docker Image and a Docker Container is the same as the relationship between a Class and an Object in object-oriented programming:
Just as multiple instances or objects can be created from a single class, multiple Docker Containers can be created from a single Docker Image.
So generally, when we share our application plus dependencies with our team members in a big team, we don't share a container — we share an Image. This image goes into everyone's individual system, and everyone creates a container from this image on their local system.
Just as in OOP, the class as such does not occupy significant memory — it is the objects that use memory (because objects have their own properties and details to store).
Similarly, our containers use system resources, not our images. The size of an image is generally very small. When we create a container from an image, the entire running environment is set up inside the container, which is why the computer's resources are used by the container.