Container
A container packages an application together with its libraries, runtime, and configuration so it runs the same way on any machine with a container engine. Unlike a virtual machine, it shares the host kernel and isolates processes with namespaces and cgroups, so it starts in under a second and carries far less overhead. An image is the immutable build artifact, defined by a Dockerfile and stored in a registry, while a container is a running instance of that image. This is what ended the argument about code working on one laptop and not another, and it is the unit that continuous deployment moves into production. Docker made the format mainstream, containerd and Podman provide alternative runtimes, and the OCI specification keeps images portable across them. Kubernetes orchestrates containers across a cluster, handling scheduling, restarts, and scaling. AI workloads ship the same way, with GPU drivers and Python dependencies pinned inside the image. The common mistakes are treating a container as a small virtual machine and installing everything into it, and storing state inside it. Containers are meant to be disposable, so data belongs in a mounted volume or an external database.