Demystifying Docker: A Comprehensive Guide to Containers and More
Understanding VMs and Containers
What is a Virtual Machine (VM)?
A computer file, known as an image, behaves like an actual computer within a computer.
Runs in a window, providing the user with an experience similar to the host operating system.
Multiple VMs can run simultaneously on the same physical computer.
Hypervisor, like Hyper-V, VMware, Xen, or KVM, manages VMs and emulates hardware resources.
A hypervisor is crucial software that manages virtual machines (VMs) by emulating essential components like the CPU, memory, hard disk, and network. This emulation allows multiple VMs to share resources on the same physical host.
There are two main types of hypervisors:
Type 1 Hypervisors (Bare-Metal Hypervisors):
Examples: Hyper-V, Xen, VMware ESXi
These hypervisors run directly on the hardware, providing a dedicated and efficient environment for VMs.
Type 2 Hypervisors (Hosted Hypervisors):
Examples: Virtual Box, VMWare Workstation, KVM
Installed on top of an existing operating system, these hypervisors are user-friendly and suitable for development or testing.
In essence, hypervisors play a key role in creating and managing virtual environments, enabling the coexistence of various operating systems on a single physical machine.
What is a Container?
An approach to software development where an application, its dependencies, and configuration are packaged together as a container image.
* Allows for testing and deployment across environments with minimal modification.
* Isolates applications on a shared operating system, running on top of a container host.
Key insights into containers:
1. Versatility of Deployment:
* Containers facilitate seamless deployment across diverse environments with minimal or no adjustments. This flexibility enhances efficiency and consistency.
2. Isolation and Efficiency:
* Containers isolate applications from each other while sharing a common operating system (OS). This shared OS, whether Linux or Windows, contributes to a significantly reduced footprint compared to virtual machine (VM) images.
3. Streamlined Workflow:
* The container approach brings a host of advantages, including enhanced agility, scalability, and control throughout the entire application life cycle. Notably, it fosters effective collaboration and isolation between development (Dev) and operations (Ops) teams.
In summary, containers represent a paradigm shift in software development, offering a more efficient and isolated environment for applications, fostering collaboration, and optimizing resource utilization.
Containers vs VMs
Containers are lightweight, running directly within the host machine's kernel, eliminating the need for a hypervisor.
Containers have a smaller footprint than virtual machines, allowing for more containers on the same hardware.
Container = VM - Guest OS.
What is Docker and its Benefits
Docker:
- An open platform for developing, shipping, and running applications as containers.
Benefits of Docker / Container:
Resource Efficiency.
Fast and consistent delivery of applications.
Docker Availability:
Docker Desktop: Mac OS, Windows 10/11, Linux.
Docker Server: Various Linux distributions and Windows Server 2019/2022.
Cloud: Amazon Web Services, Google Compute Platform, Microsoft Azure, IBM Cloud, and more.
Alternatives to Docker:
Podman by RedHat
Rkt from CoreOS
Mesos from Apache
Docker Architecture and Taxonomy
Docker operates as a client-server application, comprising the following key elements:
1. Docker Engine: The Command Center
At the heart of Docker is the Engine, a vigilant commander that oversees crucial operations. This persistent daemon process orchestrates Docker's key elements—images, containers, networks, and volumes. Always on the lookout, it listens for commands through the Docker API, ensuring seamless management of Docker services. Think of it as the captain navigating Docker's intricate seas, maintaining order and efficiency in every Docker journey.
2. Docker Client:
* The familiar
docker
command serves as the CLI client, acting as the primary means for users to interact with Docker. Users issue commands through the CLI to execute actions facilitated by the Docker daemon. This dynamic duo—client and daemon—can coexist on a single system.3. Docker API: Docker exposes a REST API that defines interfaces for seamless communication between programs and the daemon. These interfaces empower external applications to instruct the daemon on various tasks. Users can establish a connection between a Docker client and a remote Docker daemon. Communication between the client and daemon transpires via a REST API, utilizing sockets or network interfaces. Notably, a singular Docker client can interface with multiple daemons, adding a layer of flexibility to Docker's architecture.
4. Dockerfile — A Dockerfile contains all the code to set up a docker container from downloading the docker image to set the environment. You can think of it as describing the complete operating system installation of the system that you want to run.
In essence, Docker's architecture revolves around these integral components, forming a cohesive system for efficient containerization and management.
Docker Commands (Basic)
Command | Description |
docker --version | Displays the Docker client and daemon version information. |
docker pull <image> | Pulls a Docker image from a registry, e.g., docker pull ubuntu . |
docker images | Lists all locally available Docker images. |
docker ps | Lists the currently running Docker containers. |
docker ps -a | Lists all Docker containers, including stopped ones. |
docker run <image> | Creates and starts a Docker container from a specified image, e.g., docker run -it ubuntu /bin/bash for an interactive Ubuntu container. |
docker stop <container> | Stops a running Docker container using its ID or name. |
docker rm <container> | Removes a Docker container. |
docker rmi <image> | Removes a Docker image. |
docker exec -it <container> <command> | Executes a command inside a running container interactively, e.g., docker exec -it my_container /bin/bash . |
docker logs <container> | Displays the logs of a running or stopped container. |
docker network ls | Lists Docker networks. |
docker volume ls | Lists Docker volumes. |
- happy learning 😊
Subscribe to my newsletter
Read articles from Chandana Mahapatra directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
Chandana Mahapatra
Chandana Mahapatra
🚀 Java Microservices Developer | AWS Cloud & DevOps Enthusiast 🚀 Passionate about crafting scalable Java microservices solutions. Expertise in AWS, Terraform, and DevOps practices. Let's build the future together!