Introduction to Docker
Chapter objectivesβ
- Understand what containerization is
- Discover Docker and its ecosystem
- Differentiate containers from virtual machines
- Understand the Docker architecture
1 - What is Containerization?β
The historical problemβ
Before containers, application deployment posed many challenges:
DΓ©veloppeur : "Γa marche sur ma machine !"
Ops : "Mais pas en production..."
Common causes:
- Different dependency versions
- Variable system configuration
- Missing libraries
- Heterogeneous environments
The solution: containersβ
A container is a standardized software unit that packages:
- The application code
- Dependencies (libraries, frameworks)
- Configuration
- The runtime environment
βββββββββββββββββββββββββββββββββββββββββββββββββββ
β Conteneur Docker β
βββββββββββββββββββββββββββββββββββββββββββββββββββ€
β Application + DΓ©pendances + Configuration β
β ββ βββββββββββββββββββββββββββββββββββββββββββ β
β Isolation du systΓ¨me hΓ΄te β
βββββββββββββββββββββββββββββββββββββββββββββββββββ
2 - What is Docker?β
Definitionβ
Docker is an open-source platform that lets you:
- Build containerized images
- Distribute these images via registries
- Run containers in isolation
Historyβ
| Year | Event |
|---|---|
| 2013 | Docker created by Solomon Hykes (dotCloud) |
| 2014 | Docker 1.0 - Stable version |
| 2017 | Moby Project - Docker becomes open-source |
| 2019 | Docker Desktop for enterprises |
| 2023 | Docker remains the de facto standard |
The Docker ecosystemβ
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β ΓcosystΓ¨me Docker β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β βββββββββββββββ βββββββββββββββ ββββββββββββββββββ β β
β β Docker CLI β β Docker β β Docker β β
β β β β Desktop β β Hub β β
β βββββββββββββββ βββββββββββββββ βββββββββββββββββββ β
β β
β βββββββββββββββ βββββββββββββββ βββββββββββββββββββ β
β β Docker β β Docker β β Docker β β
β β Compose β β Swarm β β Registry β β
β βββββββββββββββ βββββββββββββββ βββββββββββββββββββ β
β β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
3 - Containers vs Virtual Machinesβ
Compared architectureβ
Virtual Machine (VM)
βββββββββββββ βββββββββββββ βββββββββββββ
β App A β β App B β β App C β
βββββββββββββ€ βββββββββββββ€ β ββββββββββββ€
β Bins/Lib β β Bins/Lib β β Bins/Lib β
βββββββββββββ€ βββββββββββββ€ βββββββββββββ€
β Guest OS β β Guest OS β β Guest OS β
βββββββββββββ΄ββ΄ββββββββββββ΄ββ΄ββββββββββββ
βββββββββββββββββββββββββββββββββββββββββββ
β Hyperviseur β
βββββββββββββββββββββββββββββββββββββββββββ€
β SystΓ¨me HΓ΄te β
βββββββββββββββββββββββββββββββββββββββββββ€
β Infrastructure β
βββββββββββββββββββββββββββββββββββββββ ββββ
Docker Container
βββββββββββββ βββββββββββββ βββββββββββββ
β App A β β App B β β App C β
βββββββββββββ€ βββββββββββββ€ βββββββββββββ€
β Bins/Lib β β Bins/Lib β β Bins/Lib β
βββββββββββββ΄ββ΄ββββββββββββ΄ββ΄ββββββββββββ
βββββββββββββββββββββββββββββββββββββββββββ
β Docker Engine β
βββββββββββββββββββββββββββββββββββββββββββ€
β SystΓ¨me HΓ΄te β
βββββββββββββββββββββββββββββββββββββββββββ€
β Infrastructure β
βββββββββββββββββββββββββββββββββββββββββββ
Comparison tableβ
| Characteristic | VM | Container |
|---|---|---|
| Startup | Minutes | Seconds |
| Size | GB | MB |
| Performance | ~95% | ~99% |
| Isolation | Strong (hardware) | Good (process) |
| OS | Complete | Shared |
| Density | 10-20/server | 100+/server |
When to use what?β
Use VMs when:
- Total isolation is required
- Different OSes are needed
- Legacy applications cannot be containerized
Use Docker when:
- Microservices
- Fast CI/CD
- Horizontal scalability
- Development environments
4 - Docker Architectureβ
The main componentsβ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ ββββββ
β Client Docker β
β (docker build, run, pull...) β
ββββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββ
β REST API
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Docker Daemon (dockerd) β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β βββββββββββββββ βββββββββββββββ βββββββββββββββββββββββ β
β β Images β β Conteneurs β β RΓ©seaux β β
β βββββββββββββββ βββββββββββββββ βββββββββββββββββββββββ β
β β
β βββββββββββββββ βββββββββββββββββββββββββββββββββββββββ β
β β Volumes β β containerd β β
β βββββββββββββββ βββββββββββββββββββββββββββββββββββββββ β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Key conceptsβ
1. Docker Daemon (dockerd)
- Service that manages Docker objects
- Listens for API requests
- Communicates with containerd
2. Docker Client (docker)
- Command-line interface
- Sends commands to the daemon
- Can communicate with multiple daemons
3. Docker Registry
- Stores Docker images
- Docker Hub (public)
- Private registries (Harbor, GitLab, etc.)
4. Images
- Read-only templates
- Built from a Dockerfile
- Composed of layers
5. Containers
- Executable instances of images
- Isolated from each other
- Ephemeral by default
5 - Why Docker?β
Key benefitsβ
Benefits
1. Portability
- "Build once, run anywhere"
- Same behavior everywhere
2. Efficiency
- Fast startup
- Optimal resource usage
3. Isolation
- No conflicts between applications
- Enhanced security
4. Scalability
- Easy replication
- Orchestration with Kubernetes/Swarm
5. DevOps
- Simplified CI/CD
- Infrastructure as Code
Use casesβ
| Use case | Description |
|---|---|
| Development | Reproducible environments |
| Testing | Test isolation, parallelization |
| CI/CD | Automated build and deployment |
| Microservices | Modular architecture |
| Cloud Migration | Multi-cloud portability |
6 - Docker Hubβ
What is Docker Hub?β
Docker Hub is Docker's official public registry:
- More than 8 million available images
- Official images maintained by Docker
- Community images
- Free private registries (limited)
Popular imagesβ
| Image | Description | Pulls |
|---|---|---|
| nginx | Web server | 1B+ |
| postgres | Database | 500M+ |
| node | JavaScript runtime | 500M+ |
| python | Python interpreter | 500M+ |
| redis | In-memory cache | 500M+ |
Naming conventionsβ
# Format
[registre/]utilisateur/image:tag
# Exemples
nginx # Image officielle, tag latest
nginx:1.25 # Image officielle, tag spΓ©cifique
bitnami/nginx # Image communautaire
mon-registre.io/app:v1.0 # Registre privΓ©
7 - First stepsβ
Verify the installationβ
# Version de Docker
docker --version
# Docker version 24.0.7, build afdd53b
# Informations système
docker info
# Tester avec Hello World
docker run hello-world
Expected outputβ
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
3. The Docker daemon created a new container from that image.
4. The Docker daemon streamed that output to the Docker client.
...
Summaryβ
| Concept | Description |
|---|---|
| Docker | Containerization platform |
| Image | Read-only template |
| Container | Executable instance of an image |
| Registry | Image storage (Docker Hub) |
| Daemon | Service that manages Docker |
Key points
- Docker solves the "it works on my machine" problem
- Containers are lighter and faster than VMs
- Docker Hub provides thousands of ready-to-use images
- The client-server architecture allows great flexibility
Hands-on exercisesβ
- Explain the difference between an image and a container
- Name 3 advantages of containers over VMs
- What is Docker Hub?
- Describe the role of the Docker Daemon