Complete installation and configuration guide for Docker Engine and Kubernetes on Debian 12, demonstrating containerization concepts, orchestration basics, and modern DevOps practices.
Academic Project | Master 1 - SSIM | 2023-2024
Supervisor: M. Massamba LO
- Understand containerization concepts and benefits
- Install and configure Docker Engine on Debian 12
- Deploy applications using Docker containers
- Learn Docker Compose for multi-container applications
- Install Kubernetes CLI tools (kubectl)
- Grasp container orchestration fundamentals
- Implement DevOps best practices
- Docker Engine - Container runtime
- Docker Compose - Multi-container orchestration
- Docker Hub - Container registry
- Kubernetes (kubectl) - Cluster management CLI
- K8s concepts - Pods, Services, Deployments
- Debian 12 (Bookworm) - Host operating system
- containerd - Container runtime
- Docker Buildx - Extended build capabilities
- Docker Desktop - GUI application (optional)
Docker & Kubernetes Stack
│
Debian 12 Host
│
┌────┴────────────────────┐
│ │
Docker Engine Kubernetes
│ (kubectl)
├─ Containers │
├─ Images K8s Clusters
├─ Networks (Conceptual)
├─ Volumes
└─ Compose
# Update system packages
sudo apt update
sudo apt upgrade -y
# Install prerequisites
sudo apt install -y \
apt-transport-https \
ca-certificates \
curl \
gnupg \
lsb-release# Create keyrings directory
sudo install -m 0755 -d /etc/apt/keyrings
# Add Docker GPG key
curl -fsSL https://download.docker.com/linux/debian/gpg | \
sudo gpg --dearmor -o /etc/apt/keyrings/docker-archive-keyring.gpg
# Add Docker repository
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker-archive-keyring.gpg] \
https://download.docker.com/linux/debian \
$(lsb_release -cs) stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# Update package index
sudo apt update# Install Docker packages
sudo apt install -y \
docker-ce \
docker-ce-cli \
containerd.io \
docker-buildx-plugin \
docker-compose-plugin
# Verify installation
docker --version
# Output: Docker version 24.0.x, build xxxxx# Start Docker service
sudo systemctl start docker
sudo systemctl enable docker
# Verify Docker is running
sudo systemctl status docker
# Add current user to docker group (avoid sudo)
sudo usermod -aG docker $USER
# Apply group changes (logout/login or use)
newgrp docker
# Test Docker without sudo
docker run hello-worldExpected Output:
Hello from Docker!
This message shows that your installation appears to be working correctly.
Use Case: Offline installation or specific version requirements
Visit: https://download.docker.com/linux/debian/dists/bookworm/pool/stable/amd64/
Download these files:
containerd.io_*.debdocker-ce_*.debdocker-ce-cli_*.debdocker-buildx-plugin_*.debdocker-compose-plugin_*.deb
# Navigate to download directory
cd ~/Downloads
# Install all packages
sudo dpkg -i \
containerd.io_*.deb \
docker-ce_*.deb \
docker-ce-cli_*.deb \
docker-buildx-plugin_*.deb \
docker-compose-plugin_*.deb
# Fix dependencies if needed
sudo apt --fix-broken install
# Start Docker
sudo systemctl start docker
sudo systemctl enable docker# Check Docker version
docker --version
# Check Docker info
docker info
# Check running containers
docker ps
# Check all containers (including stopped)
docker ps -a
# List Docker images
docker images# Run a container
docker run hello-world
# Run container in interactive mode
docker run -it ubuntu bash
# Run container in detached mode
docker run -d nginx
# Run container with port mapping
docker run -d -p 8080:80 nginx
# Run container with name
docker run -d --name my-nginx nginx
# Stop container
docker stop container_name
# Start stopped container
docker start container_name
# Restart container
docker restart container_name
# Remove container
docker rm container_name
# Remove all stopped containers
docker container prune# Pull image from Docker Hub
docker pull nginx
docker pull ubuntu:22.04
docker pull apache/httpd
# List images
docker images
# Remove image
docker rmi image_name
# Build image from Dockerfile
docker build -t myapp:v1 .
# Tag image
docker tag myapp:v1 username/myapp:v1
# Push image to registry
docker push username/myapp:v1# View container logs
docker logs container_name
# Follow container logs
docker logs -f container_name
# Execute command in running container
docker exec -it container_name bash
# Inspect container details
docker inspect container_name
# View container resource usage
docker stats
# View container processes
docker top container_name# Pull Apache image
docker pull httpd
# Run Apache container
docker run -d \
--name my-apache \
-p 8080:80 \
httpd
# Test in browser
# http://localhost:8080
# View logs
docker logs my-apache
# Stop and remove
docker stop my-apache
docker rm my-apache# Run MySQL container
docker run -d \
--name mysql-db \
-e MYSQL_ROOT_PASSWORD=mypassword \
-e MYSQL_DATABASE=mydb \
-p 3306:3306 \
mysql:8.0
# Connect to MySQL
docker exec -it mysql-db mysql -uroot -pmypassword
# View MySQL logs
docker logs mysql-dbCreate docker-compose.yml:
version: '3.8'
services:
web:
image: nginx:latest
ports:
- "8080:80"
volumes:
- ./html:/usr/share/nginx/html
database:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: rootpass
MYSQL_DATABASE: appdb
volumes:
- mysql_data:/var/lib/mysql
volumes:
mysql_data:Deploy with Compose:
# Start all services
docker compose up -d
# View running services
docker compose ps
# View logs
docker compose logs
# Stop all services
docker compose down
# Stop and remove volumes
docker compose down -v# Download latest kubectl binary
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
# Validate checksum (optional)
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl.sha256"
echo "$(cat kubectl.sha256) kubectl" | sha256sum --check
# Install kubectl
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
# Verify installation
kubectl version --client# Update apt and install prerequisites
sudo apt update
sudo apt install -y apt-transport-https ca-certificates curl
# Add Kubernetes signing key
curl -fsSL https://pkgs.k8s.io/core:/stable:/v1.28/deb/Release.key | \
sudo gpg --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg
# Add Kubernetes repository
echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v1.28/deb/ /' | \
sudo tee /etc/apt/sources.list.d/kubernetes.list
# Install kubectl
sudo apt update
sudo apt install -y kubectl# Check version
kubectl version --client --output=yaml
# Enable kubectl autocompletion
echo 'source <(kubectl completion bash)' >> ~/.bashrc
source ~/.bashrc
# Test kubectl (without cluster)
kubectl cluster-info
# Expected: Unable to connect to server (no cluster configured)docker run hello-world✅ Expected: Success message confirming Docker works
docker run -it ubuntu bash
# Inside container:
ls
pwd
exit✅ Expected: Access to Ubuntu shell inside container
docker run -d -p 8080:80 nginx
curl http://localhost:8080✅ Expected: Nginx welcome page HTML
# Create test compose file
cat > docker-compose.yml << EOF
version: '3.8'
services:
web:
image: nginx
ports:
- "8080:80"
EOF
# Deploy
docker compose up -d
# Test
curl http://localhost:8080
# Cleanup
docker compose down✅ Expected: Nginx running via Compose
# Download Docker Desktop .deb
wget https://desktop.docker.com/linux/main/amd64/docker-desktop-amd64.deb
# Install Docker Desktop
sudo apt install ./docker-desktop-amd64.deb
# Launch Docker Desktop
systemctl --user start docker-desktop
# Or search in applications menuIf you see "KVM not enabled" error:
On VirtualBox:
- Shutdown the VM
- Open VirtualBox settings for the VM
- System → Processor → Enable "VT-x/AMD-V"
- Restart VM
On Physical Machine:
- Reboot and enter BIOS
- Enable "Intel VT-x" or "AMD-V"
- Enable "Intel VT-d" or "AMD IOMMU"
- Save and reboot
- Container technology understanding
- Docker installation and configuration
- Container lifecycle management
- Image building and management
- Docker Compose multi-container apps
- Kubernetes CLI basics
- Linux package management
- Troubleshooting containerized applications
- Infrastructure as Code (IaC)
- Microservices architecture
- Container orchestration
- CI/CD pipeline basics
- Immutable infrastructure
- Service isolation
- Security considerations for containers
- Resource management
- Container networking
- Volume management for persistence
- Image optimization
- Container health checks
Continue Learning:
- Deploy applications with Docker
- Learn Dockerfile best practices
- Explore Docker networking
- Study Kubernetes architecture
- Deploy a local Kubernetes cluster (Minikube/Kind)
- Learn Helm for Kubernetes package management
- Implement CI/CD with Docker
Mariama DIACK
Master 1 - Sécurité des Systèmes d'Information et Management
Institut Supérieur d'Informatique
Contact:
- 🌐 Portfolio: mariama-diack.github.io
- 💼 LinkedIn: linkedin.com/in/mariamd3
- 📧 Email: [email protected]
- 💻 GitHub: @mariama-diack
- M. Massamba LO - Project supervisor
- Institut Supérieur d'Informatique
- Docker Community
- Kubernetes Community
This project is for educational purposes.
⭐ If this guide helped you learn Docker and Kubernetes, please star the repository!