Oficial Documentation | https://docs.docker.com
The Image (The "Recipe")
An Image is a read-only template. It’s like a frozen snapshot of a computer that has everything pre-installed (the code, the libraries, the settings).
You don't "run" an image; you use it to create a container.
Example: The postgres:15-alpine image is a tiny, pre-configured database ready to go.
The Container (The "Instance")
A Container is the living, breathing version of an image. If the Image is a blueprint, the Container is the actual house.
It is isolated from your main Debian OS. It has its own file system, its own memory, and its own "view" of the world.
This is why we call it a "container"—it contains everything so it doesn't leak out and mess up your host system.
The Service (The "Job")
In Docker Compose, a Service is just a way to give a container a specific role and rules.
A "Service" allows containers to talk to each other by name.
The Volume (The "Hard Drive")
Because containers are meant to be temporary (you can delete and recreate them in seconds), anything saved inside a container is lost when the container stops.
A Volume is a bridge between your Debian hard drive and the container.
It says: "Everything the database writes to its internal folder, actually save it in my ~/wikijs/db-datafolder on the real physical SSD."
This ensures that when you restart your lab, your Wiki pages are still there.