Docker packages an application and its dependencies into a container image you can run the same way on any host.
A container includes your application code, the runtime (Node.js, Python, Java), libraries, and configuration files. Everything needed to run the application. You build a Docker image, a template. You run containers from that image. Containers are lightweight. Unlike virtual machines which virtualize an entire operating system, containers virtualize only the application environment.
You can run hundreds of containers on a single machine where you'd only fit a handful of VMs. Containers are portable. Build a container on your laptop, push it to the cloud, it runs the same way. No more "works on my machine" problems. Containers are isolated. One container's crash doesn't affect others.
This makes containers perfect for microservices. Each service is a container. You can deploy, update, and scale containers independently. Kubernetes orchestrates containers at scale. Docker changed deployment completely. From manually installing software on servers to containerizing everything in portable images. Docker is the standard deployment mechanism for modern applications.
Docker's docs describe an image as a snapshot and a container as a running instance. The image is what you ship.
Docker Container Platform
Package applications with their dependencies into lightweight containers. Click apps to build containers and explore the difference between containers and VMs.