## The Problem: Dependency Hell You write an app on your Mac using Python 3.9. It works perfectly. You send it to your colleague on Windows, who has Python 3.8 installed. It crashes. You deploy it to a Linux server, which is missing a specific library. It crashes again. ## The Solution: Containers Docker allows you to package your application *and* everything it needs to run (the OS, the libraries, the runtime) into a single box called a Container. ### Images vs Containers * **Dockerfile:** The recipe. It's a text file that says "Start with Linux, install Python, copy my files, and run this command." * **Image:** The result of the recipe. It's a read-only snapshot of your application. * **Container:** A running instance of an Image. ### Why Developers Love It With Docker, you can spin up a database, a Redis cache, and your web server with a single command: `docker-compose up`. When you are done, you tear it down, and your machine is clean. No more messing with local environment variables or conflicting versions of Node.js. ## The Problem: Dependency Hell You write an app on your Mac using Python 3.9. It works perfectly. You send it to your colleague on Windows, who has Python 3.8 installed. It crashes. You deploy it to a Linux server, which is missing a specific library. It crashes again. ## The Solution: Containers Docker allows you to package your application *and* everything it needs to run (the OS, the libraries, the runtime) into a single box called a Container. ### Images vs Containers * **Dockerfile:** The recipe. It's a text file that says "Start with Linux, install Python, copy my files, and run this command." * **Image:** The result of the recipe. It's a read-only snapshot of your application. * **Container:** A running instance of an Image. ### Why Developers Love It With Docker, you can spin up a database, a Redis cache, and your web server with a single command: `docker-compose up`. When you are done, you tear it down, and your machine is clean. No more messing with local environment variables or conflicting versions of Node.js. ## The Problem: Dependency Hell You write an app on your Mac using Python 3.9. It works perfectly. You send it to your colleague on Windows, who has Python 3.8 installed. It crashes. You deploy it to a Linux server, which is missing a specific library. It crashes again. ## The Solution: Containers Docker allows you to package your application *and* everything it needs to run (the OS, the libraries, the runtime) into a single box called a Container. ### Images vs Containers * **Dockerfile:** The recipe. It's a text file that says "Start with Linux, install Python, copy my files, and run this command." * **Image:** The result of the recipe. It's a read-only snapshot of your application. * **Container:** A running instance of an Image. ### Why Developers Love It With Docker, you can spin up a database, a Redis cache, and your web server with a single command: `docker-compose up`. When you are done, you tear it down, and your machine is clean. No more messing with local environment variables or conflicting versions of Node.js.