Docker is an open platform for developing, shipping, and running applications. It allows packaging applications into standardized units for software called containers that can run on any infrastructure regardless of whether it is a physical or virtual server. The key components of Docker include images, containers, a client-server architecture using Docker Engine, and registries for storing images. Images act as templates for creating containers which are run-time instances of the images and can be linked together using networks and attached to persistent storage independent of the host machine.