1212
GitHub - DIACKMariama3/docker-kubernetes-deployment: Complete Docker and Kubernetes installation guide on Debian 12 with containerization examples and best practices | Master 1 SSI · GitHub
Skip to content

DIACKMariama3/docker-kubernetes-deployment

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 

Repository files navigation

📦 Docker & Kubernetes Deployment on Debian 12

📋 Project Overview

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


🎯 Learning Objectives

  • 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

🛠️ Technologies Stack

Containerization

  • Docker Engine - Container runtime
  • Docker Compose - Multi-container orchestration
  • Docker Hub - Container registry

Container Orchestration

  • Kubernetes (kubectl) - Cluster management CLI
  • K8s concepts - Pods, Services, Deployments

Operating System

  • Debian 12 (Bookworm) - Host operating system

Additional Tools

  • containerd - Container runtime
  • Docker Buildx - Extended build capabilities
  • Docker Desktop - GUI application (optional)

🏗️ Architecture Overview

Docker & Kubernetes Stack
         │
    Debian 12 Host
         │
    ┌────┴────────────────────┐
    │                         │
Docker Engine          Kubernetes
    │                    (kubectl)
    ├─ Containers             │
    ├─ Images            K8s Clusters
    ├─ Networks          (Conceptual)
    ├─ Volumes
    └─ Compose

📦 Part 1: Docker Installation

Method 1: Official Repository (Recommended)

Step 1: System Preparation

# 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

Step 2: Add Docker Repository

# 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

Step 3: Install Docker Engine

# 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

Step 4: Post-Installation Configuration

# 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-world

Expected Output:

Hello from Docker!
This message shows that your installation appears to be working correctly.

Method 2: Manual Installation via .deb Files

Use Case: Offline installation or specific version requirements

Download Required Packages

Visit: https://download.docker.com/linux/debian/dists/bookworm/pool/stable/amd64/

Download these files:

  1. containerd.io_*.deb
  2. docker-ce_*.deb
  3. docker-ce-cli_*.deb
  4. docker-buildx-plugin_*.deb
  5. docker-compose-plugin_*.deb

Install Downloaded Packages

# 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

🐳 Docker Basics & Testing

Verify Installation

# 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

Essential Docker Commands

Container Management

# 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

Image Management

# 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

Container Inspection

# 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

Practical Examples

Example 1: Run Apache Web Server

# 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

Example 2: Run MySQL Database

# 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-db

Example 3: Multi-Container with Docker Compose

Create 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

☸️ Part 2: Kubernetes (kubectl) Installation

Install kubectl CLI

Method 1: Download Binary

# 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

Method 2: Using Package Manager

# 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

Verify kubectl Installation

# 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 Testing & Validation

Test 1: Hello World

docker run hello-world

Expected: Success message confirming Docker works

Test 2: Interactive Container

docker run -it ubuntu bash
# Inside container:
ls
pwd
exit

Expected: Access to Ubuntu shell inside container

Test 3: Web Server

docker run -d -p 8080:80 nginx
curl http://localhost:8080

Expected: Nginx welcome page HTML

Test 4: Docker Compose

# 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


📊 Docker Desktop (Optional GUI)

Installation on Debian 12

# 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 menu

Troubleshooting: KVM Not Enabled

If you see "KVM not enabled" error:

On VirtualBox:

  1. Shutdown the VM
  2. Open VirtualBox settings for the VM
  3. System → Processor → Enable "VT-x/AMD-V"
  4. Restart VM

On Physical Machine:

  1. Reboot and enter BIOS
  2. Enable "Intel VT-x" or "AMD-V"
  3. Enable "Intel VT-d" or "AMD IOMMU"
  4. Save and reboot

🎓 Skills Developed

Technical Skills

  • 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

DevOps Concepts

  • Infrastructure as Code (IaC)
  • Microservices architecture
  • Container orchestration
  • CI/CD pipeline basics
  • Immutable infrastructure
  • Service isolation

Best Practices

  • Security considerations for containers
  • Resource management
  • Container networking
  • Volume management for persistence
  • Image optimization
  • Container health checks

📚 Related Projects


🔄 Next Steps

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

👤 Author

Mariama DIACK
Master 1 - Sécurité des Systèmes d'Information et Management
Institut Supérieur d'Informatique

Contact:


🙏 Acknowledgments

  • M. Massamba LO - Project supervisor
  • Institut Supérieur d'Informatique
  • Docker Community
  • Kubernetes Community

📄 License

This project is for educational purposes.


If this guide helped you learn Docker and Kubernetes, please star the repository!

About

Complete Docker and Kubernetes installation guide on Debian 12 with containerization examples and best practices | Master 1 SSI

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors