Containers have been around for a long time, but never found mainstream acceptance because using them was complicated. An open source project Docker changed the game by simplifying container workflows and this has resulted in a lot of excitement around using containers in all stages of the software delivery lifecycle, from development to production.
Docker has become so mainstream in the short time since it debuted in 2013 that the big giants like Amazon, Cisco, Google, Microsoft Red Hat, VMWare, and others have created the Open Container Initiative to develop a common standard around it.
Virtual machines (VMs) are an abstraction of physical hardware. Using a layer called a hypervisor, you can run multiple 'virtual' machines on one physical machine. Each VM includes a full copy of an operating system, as well as applications and the required binaries and libraries.
Docker, just like any container technology, offers abstraction at the application layer. The host OS is shared by all containers running on the host and each container packages applications and the required binaries and libraries. Each container runs as an isolated process in user space. Since they do not include a copy of the OS, Docker containers are very lightweight when compared to VMs.
Here are the pros and cons of using Docker vs VMs. In most cases, you don't have to make a choice of one vs the other. Docker and VMs are better together and you can run containers on VMs.
Build Docker images from a Dockerfile as part of your CI and CD workflows. Use custom images for your DevOps jobs to avoid installing dependencies! Learn more
Manage your images and dependencies on any Docker registry, like Docker Hub, Amazon ECR, GCR, Quay, or your self-hosted private registry. Learn more
With Shippable, you can deploy Docker apps to any orchestration platform, including Amazon ECS, Kubernetes, GKE, Triton, or Microsoft Azure. Learn more