Skip to content

Containers

A container is a lightweight, standalone, and executable unit of software that packages an application and all of its dependencies (libraries, configuration, runtime, system tools) so it can run consistently across different environments.

Technically, containers use operating system–level virtualization:

  • They share the host kernel (unlike virtual machines which each run their own OS).
  • They are isolated from each other using Linux namespaces (for process, network, filesystem isolation) and cgroups (for resource control like CPU, memory).

In short:

A container = an isolated process with its own filesystem, network, and runtime environment, packaged for portability.

Introduction (Why Containers Matter)

  • Before containers: Developers packaged apps with assumptions about the host system → “It works on my machine” problems.

  • With containers:

    • Run the same way in dev, test, and production.
    • Fast to start (milliseconds–seconds vs minutes for VMs).
    • Lightweight (no full guest OS).
    • Portable (runs anywhere with a container runtime).
    • Scalable (easy to spin up thousands in clusters like Kubernetes).

Containers became the backbone of cloud-native development and microservices architectures because they allow teams to ship software faster and more reliably.

Brief History of Containers

  • 1970s – Early Process Isolation

    • chroot (1979, Unix V7) → First filesystem isolation (a process can’t see beyond its “root” directory).
    • Foundation for modern containers.
  • 2000s – Linux Isolation Primitives

    • Linux Namespaces (2002+) → Process, network, and filesystem isolation.
    • cgroups (2007, Google) → Resource limits and monitoring for groups of processes.
  • 2008 – LXC (Linux Containers)

    • First full container implementation in Linux, combining namespaces + cgroups.
  • 2013 – Docker

    • Made containers developer-friendly with easy CLI, image packaging, and registries.
    • Sparked the modern container revolution.
  • 2015 – OCI (Open Container Initiative)

    • Standardization effort to define container image format and runtime spec.
    • Prevented fragmentation of container ecosystems.
  • Today

    • Containers are the foundation of Kubernetes, cloud-native computing, DevOps pipelines, and even serverless platforms (like AWS Lambda and Google Cloud Run).
    • Used by almost every major tech company to deploy scalable services.

1. Container Runtimes (low-level execution)

These are the actual components that run containers. Docker itself now uses some of these under the hood.

  • containerd

    • Industry-standard container runtime (graduated CNCF project).
    • Used by Docker, Kubernetes (via CRI).
  • runc

    • Low-level OCI runtime used by containerd and Docker.
    • Executes containers according to the Open Container Initiative (OCI) spec.
  • CRI-O

    • Lightweight runtime optimized for Kubernetes.
    • Alternative to Docker/containerd in Kubernetes clusters.
  • Kata Containers

    • Combines lightweight VMs and containers for stronger isolation.
  • gVisor (by Google)

    • User-space kernel for containers → strong sandboxing.
  • Firecracker (by AWS)

    • MicroVM-based, optimized for serverless (used in AWS Lambda, Fargate).
  • Docker CLI

2. Container Engines (user-facing tools like Docker)

Provide CLI/UX to build, run, and manage containers.

  • Podman

    • Daemonless, Docker-compatible engine.
    • Rootless mode for better security.
  • Buildah

    • Focused on building OCI/Docker images without requiring a daemon.
  • LXC/LXD (Linux Containers / Linux Daemon)

    • One of the earliest Linux container projects.
    • Provides system containers (like lightweight VMs).
  • Singularity (now Apptainer)

    • Popular in HPC and scientific computing.
    • Allows non-root users to run containers.

3. Container Image Builders

Focused on building images, often used in CI/CD pipelines.

  • Kaniko (Google)

    • Builds OCI images inside containers, without requiring Docker.
  • Img

    • Dockerfile builder that doesn’t need Docker daemon.
  • Bazel (Google)

    • General build system, can build container images as artifacts.

4. Container Orchestration Platforms

(Not strictly containerization, but essential for managing multiple containers.)

  • Kubernetes (most widely adopted)
  • OpenShift (Red Hat’s Kubernetes distribution)
  • Docker Swarm (simpler than K8s, but less popular today)
  • Nomad (by HashiCorp, workload scheduler that can run containers and non-containers)
  • Apache Mesos / Marathon (older, less common now)

5. Specialized / Niche Container Systems

  • Rkt (Rocket) — by CoreOS, now discontinued but historically important.
  • Unikernels (MirageOS, OSv) — extreme lightweight VMs, container-like but single-purpose OS+app bundles.
  • Nabla Containers (IBM) — security-focused container runtime.

Comparison of major high-level container runtimes

Here is a structured side-by-side comparison of the major high-level container runtimes. These sit above low-level runtimes like runc/crun and handle image management, networking, orchestration integration, and lifecycle management.

RuntimeOrigin / MaintainerKubernetes SupportDaemon RequirementRootless ModePrimary Use CaseTypical Low-level Runtime
Docker (Engine)Docker Inc.❌ (deprecated since v1.24, replaced by containerd/CRI-O)✅ Docker daemon (dockerd)⚠️ Limited (not fully supported)Developer-friendly full container platform (build, ship, run)containerdrunc
containerdCNCF (originally from Docker)✅ (via CRI plugin)containerd daemon⚠️ LimitedKubernetes-native runtime, efficient lifecycle managementrunc or crun
CRI-ORed Hat, CNCF project✅ (native CRI implementation)crio daemon⚠️ LimitedKubernetes-optimized runtime, lightweight alternative to Dockerrunc or crun
PodmanRed Hat❌ (not a CRI runtime, but can run Kubernetes pods YAML locally)❌ Daemonless✅ Full rootless supportDevOps workflows, secure local container managementrunc or crun
LXC/LXDCanonical (Ubuntu)⚠️ Limited, not widely adopted for Kubernetes✅ Daemon (lxd)⚠️ LimitedSystem containers (VM-like), good for running full OS environmentsLXC runtime

Key distinctions

  • Kubernetes compatibility:

    • Supported directly: containerd, CRI-O
    • Deprecated: Docker (replaced internally by containerd)
    • Not directly supported: Podman, LXC/LXD
  • Security (rootless support):

    • Strong: Podman (rootless-first design)
    • Partial/experimental: containerd, CRI-O, Docker
  • Use cases:

    • Developer platform: Docker, Podman
    • Production/Kubernetes: containerd, CRI-O
    • System/VM-like workloads: LXC/LXD

Performance

RuntimeStartup Time (per container)Memory Footprint (idle container)CPU OverheadScalability (pods/containers per node)Notes
Docker (Engine)~100–200 ms (higher than containerd/CRI-O due to daemon overhead)~80–100 MB per daemon (dockerd), plus container overheadLow–ModerateScales to thousands, but less efficient than containerd/CRI-OBest for dev workflows, but Kubernetes support removed
containerd~60–120 ms~30–50 MB for containerd daemonVery lowVery high (used by most Kubernetes distros at scale)Optimized for Kubernetes, efficient and stable
CRI-O~50–100 ms~25–40 MB for crio daemonVery lowVery high (comparable or better than containerd)Kubernetes-first design, minimal overhead
Podman~80–150 ms (slightly slower rootless)~20–30 MB per container process (no central daemon)LowScales well, but not as tested in large K8s clustersDaemonless, best for secure local dev + CI/CD
LXC/LXD~200–500 ms (system containers are heavier)~100+ MB per system container (full init system possible)ModerateLower scalability (heavier than app containers)Great for VM-like workloads, not ideal for microservices

Use cases

Absolutely! Containers are extremely versatile, and their adoption spans nearly every part of modern IT infrastructure. Here’s a comprehensive list of industrial and enterprise use cases for containers, organized by category:

1. Application Development & Delivery

  • Microservices deployment: Breaking monolithic apps into independently deployable services.
  • Dev/Test environments: Consistent, reproducible environments for developers and QA teams.
  • Continuous Integration / Continuous Deployment (CI/CD): Containerized build agents and pipelines.
  • Rapid prototyping: Quickly spinning up isolated apps for experimentation.
  • Polyglot applications: Running apps with different language stacks on the same host without conflicts.

2. Cloud-Native Applications

  • Scalable web apps: Auto-scaling front-end and back-end services.
  • APIs and serverless workloads: Containers as function containers in serverless platforms (FaaS).
  • Event-driven architectures: Containers triggered by events in message queues or streams.
  • Multi-cloud deployments: Deploying the same container across AWS, GCP, Azure, or private clouds.

3. High-Performance & Data-Intensive Workloads

  • Big Data pipelines: Hadoop, Spark, Flink, Kafka, and ETL jobs in containerized clusters.
  • Machine Learning / AI: Containerized model training and inference pipelines.
  • GPU workloads: Running GPU-accelerated container jobs for AI/ML or HPC.
  • Scientific computing: Reproducible simulation environments for research and analytics.

4. System Reliability & Resilience

  • Chaos Engineering: Injecting failures into containerized services to test resiliency.
  • High-availability services: Running multi-instance containers with automatic failover.
  • Self-healing applications: Containers restart automatically on failure (via Kubernetes or Docker Swarm).
  • Disaster recovery: Portable container images make recovery and redeployment faster.

5. Networking & Edge

  • IoT / edge computing: Running containers on gateways, sensors, and small devices.
  • Content delivery / caching: Containerized edge nodes for web and media delivery.
  • Network function virtualization (NFV): Containerized firewalls, load balancers, and routers.

6. Security & Compliance

  • Sandboxed applications: Containers isolate processes to limit security risk.
  • Policy enforcement: Using container orchestrators to enforce security, resource, and access policies.
  • Immutable infrastructure: Container images prevent drift and unauthorized changes.

7. Infrastructure & Operations

  • Multi-tenant SaaS platforms: Isolating customers with containerized workloads.
  • Hybrid cloud deployments: Containers simplify moving workloads between on-prem and cloud.
  • Resource optimization: Containers allow better utilization of hardware resources.
  • Legacy app modernization: Packaging legacy apps into containers for easier deployment and management.

8. Monitoring, Observability, & Tooling

  • Monitoring agents: Running Prometheus, Fluentd, or custom agents in containers.
  • Log aggregation: Containerized ELK/EFK stacks.
  • Service meshes: Istio or Linkerd running in containers for traffic management and telemetry.

9. Edge, Mobile & Consumer Services

  • Gaming infrastructure: Containerized game servers with dynamic scaling.
  • Video processing / streaming: Encoding, transcoding, and serving in containerized pipelines.
  • Mobile backend services: Containerized APIs supporting mobile apps.

10. High-Scale / Enterprise Operations

  • Multi-region microservices: Distributed container clusters across geographies.
  • Financial services: High-frequency trading platforms, risk simulations, and secure app isolation.
  • Telecommunications: 5G core functions, NFV, and virtualized network functions.
  • Healthcare: Secure containerized apps for data compliance (HIPAA, GDPR).

Powered by VitePress