В чем разница между Docker и Kubernetes?

«В чем разница между Docker и Kubernetes?» — вопрос из категории Docker, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Docker и Kubernetes решают разные задачи в жизненном цикле контейнеризированных приложений.

Docker — это платформа для создания, упаковки и запуска контейнеров на одном хосте. Он отвечает за изоляцию процессов, управление зависимостями и ресурсами на уровне отдельной машины.

Kubernetes (K8s) — это система оркестрации, которая управляет кластером из множества хостов. Она автоматизирует развертывание, масштабирование, обеспечение отказоустойчивости и сетевое взаимодействие для множества контейнеров.

Простая аналогия: Docker — это инструмент, который упаковывает и запускает двигатель (контейнер). Kubernetes — это диспетчер, который управляет целым флотом машин (нод), решая, куда поставить двигатели, сколько их нужно и как они должны общаться.

Пример:

Запуск одного контейнера через Docker CLI:

docker run -d -p 8080:80 --name my-app nginx:alpine

Управление этим же приложением в продакшене через Kubernetes требует описания в манифесте (например, Deployment и Service):

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:alpine
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  selector:
    app: nginx
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80

На практике Docker (или другой container runtime, например containerd) используется на каждой ноде кластера Kubernetes для непосредственного запуска контейнеров.