Docker and Kubernetes: Getting Started

From Server rental store
Jump to navigation Jump to search

Docker and Kubernetes are the two most important technologies in modern server infrastructure. Docker provides lightweight containerization, while Kubernetes (K8s) orchestrates containers at scale. Together, they form the foundation of cloud-native application deployment.

What Are Containers?

Containers are lightweight, isolated environments that package an application with all its dependencies. Unlike virtual machines, containers share the host OS kernel, making them:

  • Faster to start — seconds vs minutes for VMs
  • More resource-efficient — no separate OS per instance
  • Portable — runs identically on any system with Docker installed
  • Reproducible — same environment in development, testing, and production

Docker Basics

Installing Docker

On Ubuntu/Debian:

curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER

Key Concepts

  • Image — a read-only template containing the application and dependencies
  • Container — a running instance of an image
  • Dockerfile — instructions for building an image
  • Docker Hub — public registry for sharing images

Essential Docker Commands

docker pull nginx                    # download an image
docker run -d -p 80:80 nginx        # run container in background
docker ps                            # list running containers
docker logs container_name           # view container logs
docker exec -it container_name bash  # open shell in container
docker stop container_name           # stop container
docker rm container_name             # remove container

Dockerfile Example

FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
EXPOSE 8000
CMD ["python", "app.py"]

Build and run:

docker build -t myapp .
docker run -d -p 8000:8000 myapp

Docker Compose

For multi-container applications, use Docker Compose:

version: '3.8'
services:
  web:
    build: .
    ports:
      - "80:80"
  db:
    image: postgres:15
    environment:
      POSTGRES_PASSWORD: secret
    volumes:
      - pgdata:/var/lib/postgresql/data
volumes:
  pgdata:

Run with: docker compose up -d

Kubernetes Introduction

Kubernetes (K8s) manages containers across multiple servers. It handles:

  • Scheduling — decides which node runs each container
  • Scaling — automatically adjusts the number of container replicas
  • Self-healing — restarts failed containers, replaces unresponsive nodes
  • Load balancing — distributes traffic across container instances
  • Rolling updates — deploys new versions with zero downtime

Key Kubernetes Concepts

  • Pod — smallest deployable unit, contains one or more containers
  • Service — stable network endpoint for a set of pods
  • Deployment — manages pod replicas and updates
  • Namespace — logical isolation within a cluster
  • Ingress — HTTP routing and load balancing

When to Use Kubernetes

Kubernetes adds complexity. It is worth using when:

  • You run 10+ microservices
  • You need automatic scaling
  • High availability is critical
  • You have a team to manage the infrastructure

For simpler setups, Docker Compose on a single VPS or dedicated server is often sufficient.

See Also