running distributed applications inside containers. The platform consists of: The Docker Engine: a portable, lightweight runtime and packaging tool. It is the CLI that we interact with. The Docker Hub: A public/private registry for docker images, supporting sharing, and automatic builds. If it works on your machine, it will work anywhere. ensures repeatability removes dependency hell promotes portability
Jails Solaris had similar concept called Zones Based on OpenVZ and LXC (Linux containers) Solomon Hykes stared Docker in France as an internal project with dotCloud Docker was ﬁrst announced to public at PyCon in 2013 Docker is built on top of LXC & linux kernel facilities like cgroups and namespaces. Docker v0.9 dropped LXC and replaced it with libcontainer library
code isolated and sandboxed very fast sub sec. startup VM HYPERVISORS (Hyper-V, KVM, Zen) are based on emulating virtual hardware pack a lot of fat that is unnecessary slow to start up VS CONTAINERS vs. VMs
document and image ﬁles rather than sending those along with OS on your machine. VMs include a full guest OS with its own memory management, device drivers, etc., while containers just have the app, bins, libs & its dependencies. Containers run as an isolated process on the host OS, and share the kernel with other containers. Containers are more portable and efﬁcient than VMs. Containers can run on any OS or cloud. VMs can use different operating systems or kernels. All containers must use the same operating system and kernel.
host machine - Ruby, Python, Go, Node.js. Isolates environment without polluting the host machine Build & test composable, multi-microservices based applications locally. Shareability: Shared images via container public/private registries - DockerHub, Quay, AWS ECR Code Pipeline Management: Disposable build environments for CI/CD pipelines: CircleCI, Codeship, GitLab, Codefresh, TeamCity, Jenkins, TravisCI, GoCD, Docker Enterprise Edition Simpliﬁed Conﬁguration Management decouples infrastructure requirements from application environment Rapid Deployment: Repeatable, identical environments - dev, stage, test and production App Isolation: Immutable, layered, version-tracked, reusable container images - run multiple versions of same software Multi-tenancy: Easy and inexpensive to create isolated environments for running multiple instances of app tiers for each tenant Infrastructure Consolidation & Cost Savings: Docker provides far denser server consolidation than you can get with VMs.