Начальный ~15 мин чтения

Что такое контейнеры и зачем нужен Docker

Урок 1 из 6 в курсе Docker для разработчика

Что такое контейнеры и зачем нужен Docker

изолированная среда для приложений с зависимостями; Docker — стандарт для их создания

Почему это важно: без контейнеров работает у меня, но не в продакшене; Docker решает проблему окружений

Главная идея

контейнер изолирует процесс через Linux namespaces и cgroups; образ — неизменяемый шаблон

Как это выглядит на практике

  1. Разработчик пишет приложение с Python 3.11 и специфичными зависимостями.
  2. Команда git clone на другом компьютере — нужно вручную устанавливать Python, зависимости, настраивать env.
  3. С Docker: docker build создаёт образ, docker run запускает контейнер — одинаково везде.
  4. На сервере docker pull и docker run — никаких ручных настроек.

Что происходит под капотом

  • Контейнеры используют Linux namespaces (pid, net, mnt, uts) для изоляции процессов.
  • cgroups ограничивают ресурсы: CPU, память, диск — для каждого контейнера.
  • Docker Daemon (dockerd) управляет образами, контейнерами и сетью через REST API.
  • Образ состоит из слоёв (layers): каждая инструкция Dockerfile — новый слой поверх предыдущего.
  • containerd — runtime под Docker, который напрямую общается с ядром ОС.

Типичные ошибки и заблуждения

  • Контейнеры ≠ виртуальные машины. VM эмулирует железо и запускает отдельное ядро ОС; контейнер делит ядро с хостом.
  • Docker не нужен только для деплоя. Локальная разработка с docker compose стандартизирует окружение всей команды.
  • Контейнер не обеспечивает безопасность автоматически. Нужна настройка: non-root пользователь, read-only файловая система.
  • Docker Desktop на Mac/Windows использует Linux VM под капотом — настоящие контейнеры работают только на Linux.

Ключевые выводы

  • Контейнер = изолированный процесс с файловой системой из образа.
  • Образ неизменяем; контейнер — запущенный экземпляр образа.
  • Docker решает проблему 'работает у меня' через воспроизводимые окружения.
  • Контейнеры значительно легче VM: стартуют за секунды, используют меньше ресурсов.

Термины урока

Image (образ): неизменяемый шаблон с кодом, зависимостями и конфигурацией.
Container (контейнер): запущенный экземпляр образа; изолированный процесс.
Docker Daemon: фоновый сервис, управляющий образами и контейнерами.
Registry: хранилище образов (Docker Hub, GitHub Container Registry, AWS ECR).
Layer (слой): неизменяемый блок файловой системы; из слоёв состоит образ.

Связь с работой backend-разработчика

Docker — стандарт индустрии. Большинство вакансий требуют опыт с контейнерами, а CI/CD пайплайны почти везде собирают Docker-образы для деплоя.

Мини-разбор реальной ситуации

Стартап деплоит Rails-приложение через FTP на VPS: каждый деплой — ручная установка гемов, настройка nginx, правка конфигов. С Docker: Dockerfile описывает всё окружение, docker compose поднимает app + postgres + redis за одну команду. Новый разработчик готов к работе за 5 минут вместо часа настройки.

Что запомнить

  • Docker решает проблему окружений, а не только деплоя.
  • Образ — шаблон, контейнер — запущенный процесс.
  • Контейнеры делят ядро ОС и значительно легче VM.

Итог

Контейнеры изменили способ разработки и деплоя. Docker стал lingua franca DevOps — понимание его модели образов и контейнеров открывает дорогу к Kubernetes и облачным платформам.