A container is a lightweight, isolated environment that packages an application together with everything it needs to run — code, runtime, libraries, and configuration — so it behaves identically wherever it runs. Docker is the tool that made containers mainstream, giving developers a simple way to build, ship, and run these packaged applications. The result is the end of 'it works on my machine': if it runs in a container on your laptop, it runs the same in production.
Containers differ fundamentally from virtual machines. A VM virtualises an entire operating system, including its own kernel, making it heavy and slow to start. A container shares the host's kernel and isolates only the application's processes, files, and network, making it far lighter, faster to start, and denser — you can run many containers where you could run only a few VMs.
Understanding Docker means understanding its architecture: a client you type commands into, a daemon that does the work of building and running containers, images that serve as the templates, and registries that store and share images. This lesson establishes what containers are, how they differ from VMs, and the pieces of Docker that fit together to make them work.