Что такое контейнеры и зачем нужен Docker
изолированная среда для приложений с зависимостями; Docker — стандарт для их создания
Почему это важно: без контейнеров работает у меня, но не в продакшене; Docker решает проблему окружений
Главная идея
контейнер изолирует процесс через Linux namespaces и cgroups; образ — неизменяемый шаблон
Как это выглядит на практике
- Разработчик пишет приложение с Python 3.11 и специфичными зависимостями.
- Команда git clone на другом компьютере — нужно вручную устанавливать Python, зависимости, настраивать env.
- С Docker: docker build создаёт образ, docker run запускает контейнер — одинаково везде.
- На сервере 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: стартуют за секунды, используют меньше ресурсов.
Термины урока
Связь с работой backend-разработчика
Docker — стандарт индустрии. Большинство вакансий требуют опыт с контейнерами, а CI/CD пайплайны почти везде собирают Docker-образы для деплоя.
Мини-разбор реальной ситуации
Стартап деплоит Rails-приложение через FTP на VPS: каждый деплой — ручная установка гемов, настройка nginx, правка конфигов. С Docker: Dockerfile описывает всё окружение, docker compose поднимает app + postgres + redis за одну команду. Новый разработчик готов к работе за 5 минут вместо часа настройки.
Что запомнить
- Docker решает проблему окружений, а не только деплоя.
- Образ — шаблон, контейнер — запущенный процесс.
- Контейнеры делят ядро ОС и значительно легче VM.
Итог
Контейнеры изменили способ разработки и деплоя. Docker стал lingua franca DevOps — понимание его модели образов и контейнеров открывает дорогу к Kubernetes и облачным платформам.