Copyright (c) 2026 MindMesh Academy. All rights reserved. This content is proprietary and may not be reproduced or distributed without permission.

5.3.1. Kubernetes Concepts and Docker Compose

Docker Compose — Multi-Container Applications:

Compose defines multi-container applications in a single YAML file. It's designed for development and single-host deployments where you need multiple containers working together.

# docker-compose.yml
version: '3.8'

services:
  web:
    image: nginx:1.25
    ports:
      - "80:80"
    volumes:
      - ./html:/usr/share/nginx/html:ro
    depends_on:
      - app

  app:
    build: ./app                   # Build from ./app/Dockerfile
    environment:
      - DATABASE_URL=postgresql://user:pass@db:5432/mydb
    restart: unless-stopped

  db:
    image: postgres:15
    volumes:
      - pgdata:/var/lib/postgresql/data
    environment:
      POSTGRES_PASSWORD: "${DB_PASSWORD}"  # From .env file

volumes:
  pgdata:                          # Named volume managed by Compose
docker-compose up -d               # Start all services (detached)
docker-compose down                # Stop and remove containers
docker-compose ps                  # Status of services
docker-compose logs -f app         # Follow logs for 'app' service
docker-compose exec app bash       # Shell into running container
docker-compose build               # Rebuild images
docker-compose pull                # Pull latest images
Kubernetes Concepts:

Kubernetes (K8s) is the dominant container orchestration platform. Key objects:

K8s ObjectPurpose
PodSmallest deployable unit; 1+ containers sharing network/storage
DeploymentManages desired number of Pod replicas; handles rolling updates
ServiceStable network endpoint for a set of Pods (load balancing)
ConfigMapNon-secret configuration data for Pods
SecretSensitive data (passwords, keys) injected into Pods
NamespaceLogical cluster partition; isolates resources
NodePhysical or virtual machine running kubelet
IngressHTTP routing rules to Services (path/host-based routing)
# kubectl — Kubernetes CLI
kubectl get pods                           # List Pods in default namespace
kubectl get pods -n kube-system            # List Pods in kube-system namespace
kubectl get all                            # All objects in namespace
kubectl describe pod mypod                 # Detailed info including events
kubectl logs mypod                         # Container logs
kubectl logs -f mypod                      # Follow logs
kubectl exec -it mypod -- /bin/bash        # Shell into Pod
kubectl apply -f deployment.yaml           # Create/update from manifest
kubectl delete -f deployment.yaml          # Delete resources in manifest
kubectl scale deployment myapp --replicas=5  # Scale Deployment
kubectl rollout status deployment/myapp    # Watch rolling update
kubectl rollout undo deployment/myapp      # Rollback to previous version
Alvin Varughese
Written byAlvin Varughese
Founder18 professional certifications