Skip to main content

Command Palette

Search for a command to run...

Day 15 - Introduction to Containers and Docker

Updated
5 min read

🎯 1. Objective

Before working on real DevOps projects or advanced Docker concepts, it’s essential to first understand:

  • What containers are

  • How they differ from virtual machines (VMs)

  • What Docker and Buildah do in the container world

This session focuses purely on concepts, not hands-on commands.


💡 2. Background: From Physical Servers → Virtual Machines → Containers

🖥️ Physical Servers

  • Earlier, organizations ran one application per physical server.

  • Hardware resources (CPU, RAM, storage) were often underutilized.

  • Maintaining thousands of physical servers was expensive and inefficient.

🧰 Virtualization

To improve resource utilization, the concept of virtualization was introduced using a Hypervisor.

Hypervisor:
A software layer that lets you create multiple virtual machines (VMs) on a single physical server.

Each VM has:

  • Its own Operating System (OS)

  • Its own applications and dependencies

  • Logical isolation from other VMs

Benefits:

  • Better hardware utilization

  • Isolation between applications

  • Easier deployment than physical servers

Drawback:

  • Each VM still requires a full OS, consuming large amounts of CPU, RAM, and disk.

  • Even with virtualization, many VMs remain underutilized most of the time.


⚙️ 3. The Problem with Virtual Machines

Let’s say:

  • Physical server = 100 GB RAM, 100 CPUs

  • You create 4 VMs (25 GB RAM each)

Even if one VM’s application only needs 10 GB RAM, the rest (15 GB RAM) stays idle.

At scale — say, 1 million VMs — that wasted capacity means huge financial loss.

Hence, a more lightweight and resource-efficient approach was needed.


🧩 4. Solution: Containers

Containers were introduced to solve these inefficiencies.

Definition:

A container is a lightweight, standalone package that includes everything needed to run a piece of software — code, libraries, dependencies, and minimal OS components.

🏗️ How Containers Run

Containers can be created:

  1. Directly on a physical server, or

  2. On top of a virtual machine

In both cases, you install a containerization platform (like Docker, Podman, or Buildah) over the host OS.


⚖️ 5. Containers vs Virtual Machines

FeatureVirtual MachineContainer
OSFull guest OS per VMShares host OS kernel
SizeHeavy (GBs)Lightweight (MBs)
Startup TimeMinutesSeconds
IsolationFull hardware-levelProcess-level (less secure)
Resource EfficiencyModerateVery high
Use CaseLegacy apps, full isolationMicroservices, cloud-native apps

📌 In short:

Virtual machines isolate hardware.
Containers isolate processes.


🧠 6. Why Containers Are Lightweight

  • Containers don’t include a full OS — only minimal system libraries and dependencies.

  • They share the host system’s kernel.

  • Only necessary components are bundled → drastically smaller image sizes.

Example:

  • VM image: ~2–3 GB

  • Container image: ~100–500 MB

This makes containers:

  • Faster to build

  • Easier to transfer (“ship”)

  • Quicker to deploy


📦 7. What’s Inside a Container

A container image includes:

  1. Application code

  2. Application dependencies (libraries, frameworks)

  3. System dependencies (minimal OS libraries)

If additional libraries are needed (e.g., Python, Node.js, Java), they’re added via base images (e.g., python:3.10, node:18, openjdk:17).


⚙️ 8. How Docker Works

Docker is a containerization platform that simplifies container creation and management.

🔄 Docker Lifecycle

StageDescriptionCommand
1️⃣ WriteDefine image in a DockerfileDockerfile
2️⃣ BuildConvert Dockerfile → Imagedocker build
3️⃣ RunLaunch container from imagedocker run

Behind the scenes, Docker Engine executes these commands and handles:

  • Layered image building

  • Container lifecycle management

  • Resource sharing with host OS


⚠️ 9. Drawbacks of Docker

While Docker made containers popular, it has a few limitations:

🧱 Single Point of Failure (SPOF)

  • All containers depend on the Docker Engine daemon.

  • If the Docker daemon stops, all containers stop.

🧩 Layer Complexity

  • Docker builds images in layers.

  • Too many layers can slow builds and consume disk space.


🔧 10. Alternative: Buildah

To overcome Docker’s limitations, Buildah was introduced.

🏗️ What Is Buildah?

A container image–building tool that doesn’t depend on a daemon like Docker Engine.

🔍 Benefits of Buildah

  • No single point of failure

  • No background daemon

  • Works well with Podman and Skopeo

  • Compatible with Docker images (OCI compliant)

  • Simpler scripting via shell commands

Unlike Docker (which uses Dockerfile), Buildah can create images directly from shell scripts.


🧭 11. Real-World Architecture

Model 1: Containers on Physical Server

Physical Server
 └── OS
     └── Docker Engine / Container Platform
         ├── Container 1
         ├── Container 2
         └── Container 3

Model 2: Containers on Virtual Machine (Most Common)

Physical Server (Cloud / Data Center)
 └── Virtual Machine
     └── OS
         └── Docker Engine / Podman / Buildah
             ├── Container 1
             ├── Container 2
             └── Container 3

📌 Most organizations today use Model 2 because:

  • They rely on cloud providers (AWS, Azure, GCP)

  • They avoid maintaining physical data centers


  • Simple to learn and use (docker build, docker run)

  • Strong community support

  • Easy image sharing through Docker Hub

  • Integrated with orchestration tools like Kubernetes

  • Lightweight and portable — “Build once, run anywhere”


🧾 13. Summary Table

ConceptDescription
ContainerLightweight, isolated runtime for applications
DockerTool/platform to build and manage containers
DockerfileScript to define how to build an image
ImageRead-only template containing code + dependencies
ContainerRunning instance of an image
BuildahDaemonless alternative to build container images
Base ImageStarting OS or runtime layer (e.g., Ubuntu, Alpine)

14. Final Summary

  • Containers evolved to improve resource efficiency over VMs.

  • Docker popularized containers through ease of use and portability.

  • Containers are lightweight, fast, and ideal for microservices.

  • Docker’s limitations (single point of failure, layer bloat) led to tools like Buildah and Podman.

  • Today, containerization is the foundation of modern DevOps and cloud-native computing.

More from this blog

Dinesh's Blog

104 posts