Docker allows for isolation of applications into lightweight containers that can be linked together and share resources. Containers are run from images that act as templates containing the files, configuration, and dependencies for an application. Images are built from Dockerfiles that define the build process and layers, and can be pulled from or pushed to a registry for distribution. Docker uses a client-server model with daemons managing containers on each host.