Docker containers package applications with their runtime dependencies into portable images. A Dockerfile specifies the base image, copies source files, and defines the entry point command. Docker layers are cached during builds so unchanged steps are reused, speeding up iteration. Container registries store and distribute images to deployment targets. The Docker daemon manages container lifecycles including start, stop, and removal. Resource limits restrict how much CPU and memory a single container can consume.
