In the physical world, shipping containers revolutionized global trade because you could put anything inside them—furniture, electronics, cars—and they would fit perfectly on any ship, truck, or crane. **Docker** does the same for software. It packages your code, libraries, and settings into a single "unit" that runs exactly the same on any computer.

### The Core Concepts

To understand Docker, you must distinguish between these three terms:

##### 1. The Dockerfile

The **Recipe**. A text file containing the instructions to build your environment.

##### 2. The Image

The **Snapshot**. A read-only template created from the Dockerfile. It’s like a frozen version of your computer.

##### 3. The Container

The **Instance**. A living, breathing version of the Image. This is where your code actually runs.

## Phase 1: Installation

Docker is most commonly used via **Docker Desktop**, which provides a graphical interface and the background engine needed to run containers.

#### Windows

Ensure **WSL2** is enabled. Download the installer from the official site and follow the "Use WSL2 based engine" recommendation.

#### macOS

Choose the correct version for your chip ( **Intel** vs **Apple Silicon/M-series**). Installation is a simple drag-and-drop to Applications.

## Phase 2: Mastering the CLI

Once Docker is installed, your terminal becomes a cockpit. Here are the commands used by 2026's top engineers.

| Command                      | What it does                                                | Mental Shortcut         |
|-----------------------------|------------------------------------------------------------|-------------------------|
| `docker pull [image]`      | Downloads an image from Docker Hub (like `python` or `nginx`). | "Download the template." |
| `docker build -t [name] .` | Turns your `Dockerfile` into a usable Image.             | "Cook the recipe."       |
| `docker run -d [image]`    | Starts a container in the background ( **Detached mode**).   | "Launch the app."        |
| `docker ps`                | Lists all currently **running** containers.                     | "Who is awake?"         |
| `docker stop [ID]`         | Gracefully shuts down a container.                              | "Go to sleep."          |

### Deep Dive: Interactive & Cleanup Commands

To truly manage your system, you need these "Power User" commands:

##### Enter the Container Shell

If you need to "step inside" a running container to run commands manually:

`docker exec -it [container_name] bash`

The `-it` flag stands for **Interactive Terminal**.

##### The "Nuclear" Cleanup

Docker can eat up disk space quickly with old images and stopped containers. Run this to reclaim your storage:

`docker system prune -a --volumes`

**Warning:** This deletes _everything_ not currently in use. Use with caution!

## Phase 3: Networking (Port Mapping)

A container is isolated. If it's running a web server on port 80, your computer can't see it unless you "open a window" between the host and the container.

`docker run -p 8080:80 nginx`

This maps **Local Port 8080** to **Container Port 80**. You can now visit `localhost:8080` in your browser to see the server.
