Even though Linux container technology has been available for quite some time, Docker has revolutionized the container technology with its simple packaging that allows portability of applications. Docker packages the applications along with the dependencies like related libraries into an simple image. This single image can be then run on different locations like bare-metal, VM, Cloud etc. In this blog, I will cover comparison of Containers with VM, technologies that Docker uses, Docker architecture and Container use cases. In the next series of blogs, I will cover more on Docker.
Comparing Containers with VM:
Virtual machines did the hardware Virtualization and this allowed multiple Operating systems to run in a single Server. Virtualization technologies have matured now with popular hypervisors being ESX, Xen, HyperV etc. Following picture from Linuxjournal article compares the blocks involved in VM and Containers.
- Virtual machines virtualizes hardware, while Containers virtualize software.
- Each Virtual machine needs a separate OS, Containers share the same kernel. This makes Containers much faster to spawn and less bulkier compared to VM, this also makes containers more susceptible to common kernel issues.
Linux technologies that Docker uses:
- Namespaces – Virtualize processes, networks, file systems, users etc.
- cgroups – Limits usage of cpu, memory and io per group of process.
- Union file systems – this saves disk space and allows tracking of file system changes.
Following picture from Docker webpage shows the blocks involved:
- Docker daemon runs in the host.
- Docker client can run in the host machine or separately and it communicates to the Docker daemon using rest interface. There is also a CLI interface that Docker client provides.
- Docker index is the repository for Docker images. Both private and public images can be hosted in the Docker hub repository.
- Isolates 1 application from others.
- Lightweight when compared to VM.
- Portable across different environments like bare-metal, VM, Cloud.
- Devops friendly.
- Application development becomes easier and modular.
- Docker page
- Linux journal article on Docker
- Container internals presentation
- Cisco, Redhat white paper on Linux containers
- Cisco ACI and Linux containers white paper
Pictures used are from the references.