Docker_introduction
Chapter 01: Docker Introduction
Section titled βChapter 01: Docker IntroductionβWhat is Docker?
Section titled βWhat is Docker?βDocker is an open platform for developing, shipping, and running applications using containerization technology. It enables developers to package applications with all their dependencies into standardized units called containers.
Why Docker?
Section titled βWhy Docker?βBefore Docker, developers often faced the βit works on my machineβ problem. Different environments (development, staging, production) had different configurations, leading to bugs that only appeared in production.
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ The "It Works on My Machine" Problem ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€β ββ Developer Machine Staging Server Production Server ββ ββββββββββββββββββ ββββββββββββββββββ ββββββββββββββββββ ββ β Node.js 16 β β Node.js 14 β β Node.js 12 β ββ β Ubuntu 22.04 β β Ubuntu 20.04 β β Ubuntu 18.04 β ββ β Python 3.10 β β β Python 3.8 β β β Python 3.6 β ββ β Redis 7.0 β β Redis 6.0 β β Redis 5.0 β ββ ββββββββββββββββββ ββββββββββββββββββ ββββββββββββββββββ ββ ββ Result: "But it worked locally!" ββ ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββDocker solves this by creating identical containers across all environments.
Docker vs Virtual Machines
Section titled βDocker vs Virtual MachinesβTraditional Virtual Machines
Section titled βTraditional Virtual MachinesβTraditional VMs virtualize the entire hardware stack - each VM includes:
- A full operating system
- Virtualized hardware (CPU, RAM, storage, network)
- Application and its dependencies
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ Virtual Machine Architecture ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€β ββ βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ ββ β Hypervisor (VMware, Hyper-V) β ββ βββββββββββββββββ¬ββββββββββββββββ¬ββββββββββββββββ¬ββββββββββββββββββββ€ ββ β VM 1 β VM 2 β VM 3 β VM 4 β ββ β βββββββββββββ β βββββββββββββ β βββββββββββββ β ββββββββββββββ β ββ β β App A β β β App B β β β App C β β β App D β β ββ β βββββββββββββ€ β βββββββββββββ€ β βββββββββββββ€ β ββββββββββββββ€ β ββ β β Runtime β β β Runtime β β β Runtime β β β Runtime β β ββ β βββββββββββββ€ β βββββββββββββ€ β βββββββββββββ€ β ββββββββββββββ€ β ββ β β OS β β β OS β β β OS β β β OS β β ββ β βββββββββββββ β βββββββββββββ β βββββββββββββ β ββββββββββββββ β ββ βββββββββββββββββ΄ββββββββββββββββ΄ββββββββββββββββ΄ββββββββββββββββββββ ββ ββ βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ ββ β ββββββ Physical Hardware β ββ β CPU | Memory | Storage | Network β ββ βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ ββ ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββDocker Containers
Section titled βDocker ContainersβDocker containers share the host OS kernel but maintain isolation between containers. Each container includes:
- Application and its dependencies
- Minimal runtime environment
- Filesystem layers
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ Docker Container Architecture ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€β ββ βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ ββ β Docker Engine β ββ βββββββββββββββββββββββββ¬ββββββββββββββββββββββββ¬ββββββββββββββββββββββ€ ββ β Container A β Container B β Container C β ββ β βββββββββββββββββββ β βββββββββββββββββββ β ββββββββββββββββββ β ββ β β App A β β β App B β β β App C β β ββ β βββββββββββββββββββ€ β βββββββββββββββββββ€ β ββββββββββββββββββ€ β ββ β β Libraries β β β Libraries β β β Libraries β β ββ β βββββββββββββββββββ€ β βββββββββββββββββββ€ β ββββββββββββββββββ€ β ββ β β App Image β β β App Image β β β App Image β β ββ β βββββββββββββββββββ β βββββββββββββββββββ β ββββββββββββββββββ β ββ βββββββββββββββββββββββββ΄ββββββββββββββββββββββββ΄ββββββββββββββββββββββ ββ ββ βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ ββ β Host Operating System (Linux) β ββ βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ ββ ββ βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ ββ β Physical Hardware β ββ βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ ββ ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββKey Differences
Section titled βKey Differencesβ| Aspect | Virtual Machines | Docker Containers |
|---|---|---|
| OS | Each VM has its own OS | Share host OS kernel |
| Size | Gigabytes (GB) | Megabytes (MB) |
| Startup Time | Minutes | Seconds |
| Isolation | Complete isolation | Process-level isolation |
| Overhead | High (hypervisor) | Low (shared kernel) |
| Portability | Moderate | Very High |
Docker Architecture
Section titled βDocker ArchitectureβDocker uses a client-server architecture:
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ Docker Architecture ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€β ββ ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ ββ β Docker Client β ββ β (docker CLI, REST API) β ββ ββββββββββββββββββββββββββββββ¬ββββββββββββββββββββββββββββββββββββββ ββ β ββ β ββ ββββββββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββ ββ β Docker Daemon (dockerd) β ββ β β ββ β βββββββββββββββ βββββββββββββββ βββββββββββββββ β ββ β β Builder β β Packager β β Runner β β ββ β β (images) β β (images) β β(containers) β β ββ β βββββββββββββββ βββββββββββββββ βββββββββββββββ β ββ β β ββ β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β ββ β β Container Runtime (runc, containerd) β β ββ β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β ββ β β ββ ββββββββββββββββββββββββββββββ¬ββββββββββββββββββββββββββββββββββββββ ββ β ββ ββββββββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββ ββ β Docker Registry β ββ β (Docker Hub, ECR, GCR, Harbor) β ββ ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ ββ ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββComponents
Section titled βComponentsβ-
Docker Daemon (dockerd)
- The background service running on the host
- Manages Docker objects (images, containers, networks, volumes)
- Listens for Docker API requests
-
Docker Client
- The CLI tool used to interact with Docker
- Communicates with the daemon via Docker API
-
Docker Registries
- Stores Docker images
- Docker Hub is the default public registry
- Can use private registries (ECR, GCR, Harbor)
-
Docker Objects
- Images: Read-only templates for creating containers
- Containers: Runnable instances of images
- Networks: Enable communication between containers
- Volumes: Persistent data storage
Docker Workflow
Section titled βDocker Workflowβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ Docker Workflow ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€β ββ 1. BUILD 2. PUSH 3. PULL ββ βββββββββββββ βββββββββββββ βββββββββββββ ββ β Develop βββββbuildβββββΆβ Registry ββββpushββββ Registry β ββ β App β β (Hub) β β (Hub) β ββ βββββββββββββ βββββββββββββ βββββββ¬ββββββ ββ β ββ Dockerfile β ββ ββββββββββββββββββ β ββ β FROM node:18 β β ββ β WORKDIR /app β β ββ β COPY . . β β ββ β RUN npm install β ββ β CMD ["npm", "start"] β ββ ββββββββββββββββββ β ββ β ββ β ββ 6. DEPLOY 5. RUN 4. PULL β ββ βββββββββββββ βββββββββββββ ββββββββββΌββββββ ββ β Server/ ββββrunβββββββββ Docker ββββββββ Server/ β ββ β Cloud β β Engine β β Cloud β ββ βββββββββββββ βββββββββββββ βββββββββββββββββ ββ ββ Image Lifecycle: Build β Push β Pull β Run β Deploy ββ ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββBenefits of Docker
Section titled βBenefits of Dockerβ1. Consistency Across Environments
Section titled β1. Consistency Across Environmentsβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ Environment Consistency ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€β ββ Development Staging Production ββ ββββββββββββ ββββββββββββ ββββββββββββ ββ βContainer β βContainer β βContainer β ββ β [App] β β [App] β β [App] β ββ β ββββββββ β β ββββββββ β β ββββββββ β ββ β βNodeJSβ β β βNodeJSβ β β βNodeJSβ β ββ β ββββββββ β β ββββββββ β β ββββββββ β ββ β ββββββββ β β ββββββββ β β ββββββββ β ββ β β npm β β β β npm β β β β npm β β ββ β ββββββββ β β ββββββββ β β ββββββββ β ββ ββββββββββββ ββββββββββββ ββββββββββββ ββ β β β ββ ββ Same image everywhere! ββ ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ2. Isolation
Section titled β2. Isolationβ- Each container runs in isolation
- Dependencies donβt conflict
- Multiple versions of the same software can run side by side
3. Efficiency
Section titled β3. Efficiencyβ- Containers share the host OS
- Lower resource usage than VMs
- Faster startup times (seconds vs minutes)
4. Portability
Section titled β4. Portabilityβ- Build once, run anywhere
- Works on Linux, macOS, Windows
- Works on-premises and in the cloud
5. Microservices Architecture
Section titled β5. Microservices Architectureβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ Microservices with Docker ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€β ββ βββββββββββββββββββ ββ β API Gateway β ββ ββββββββββ¬βββββββββ ββ β ββ ββββββββββββββββββββββββββΌβββββββββββββββββββββββββ ββ β β β ββ βΌ βΌ βΌ ββ βββββββββββ βββββββββββ βββββββββββ ββ β User β β Order β β Payment β ββ β Service β β Service β β Service β ββ β[Container] β[Container] β[Container] ββ βββββββββββ βββββββββββ βββββββββββ ββ β β β ββ ββββββββββββββββββββββββββΌβββββββββββββββββββββββββ ββ β ββ βΌ ββ βββββββββββ βββββββββββ βββββββββββ βββββββββββ ββ β Redis β β DB β β MQ β β Cache β ββ β[Container]β[Container]β[Container]β[Container] ββ βββββββββββ βββββββββββ βββββββββββ βββββββββββ ββ ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββDocker Use Cases
Section titled βDocker Use Casesβ1. Application Packaging
Section titled β1. Application PackagingβPackage applications with all dependencies into a single unit.
2. CI/CD Pipelines
Section titled β2. CI/CD PipelinesβUse consistent containers in build, test, and deployment stages.
3. Microservices
Section titled β3. MicroservicesβDeploy and scale individual services independently.
4. Development Environments
Section titled β4. Development EnvironmentsβCreate reproducible development environments.
5. Testing
Section titled β5. TestingβIsolate tests and run them in consistent environments.
6. Multi-tenant Applications
Section titled β6. Multi-tenant ApplicationsβIsolate different customers or users in separate containers.
Docker Versions and Editions
Section titled βDocker Versions and EditionsβDocker Engine
Section titled βDocker Engineβ- Community Edition (CE): Free, open-source
- Enterprise Edition (EE): Paid, with additional features
Version Naming
Section titled βVersion Namingβ- Stable: Released quarterly, tested versions
- Test: Pre-release versions for testing
Installing Docker
Section titled βInstalling DockerβSee Chapter 02: Docker Installation for detailed installation instructions.
Summary
Section titled βSummaryβDocker is a powerful platform that revolutionizes how we develop, ship, and run applications. By using containerization:
- Solves the βworks on my machineβ problem - Consistent environments
- Reduces overhead - Lighter than VMs, faster startup
- Enables microservices - Independent deployment and scaling
- Improves CI/CD - Consistent builds and deployments
- Increases portability - Build once, run anywhere
In the next chapter, weβll cover how to install Docker on your machine.