Docker: введение
Что такое Docker
Docker — платформа для упаковки приложений в контейнеры. Контейнер — легковесная изолированная среда, в которой приложение работает одинаково на любой машине.
Проблема, которую решает:
- У тебя на локалке PHP 8.5, на проде — 8.3 → «у меня работает»
- У тебя PostgreSQL 14, у коллеги — 16 → разные ошибки
- Нужно быстро развернуть проект на новой машине → тратишь часы
С Docker: «build once, run anywhere». Один раз собрал образ — работает везде.
Контейнер vs виртуальная машина
Виртуальная машина (VM):
- Полная ОС внутри (Ubuntu, 1-2 ГБ)
- Свой ядр → долго стартует (минуты)
- Много RAM
- Изоляция полная
Контейнер:
- Использует ядро хоста
- Запускается за секунды
- Мегабайты RAM
- Изоляция процессная (namespaces, cgroups)
Пример: 10 контейнеров = ~500 МБ. 10 VM = ~15 ГБ. Разница в 30 раз.
Ключевые понятия
Image (образ) — шаблон. Читается только. Содержит: ОС, код, зависимости, конфиг.
Container (контейнер) — запущенный образ. Можно создавать, останавливать, удалять. Из одного образа — много контейнеров.
Registry (реестр) — хранилище образов. Docker Hub — публичный, бесплатный.
Volume (том) — постоянное хранилище данных. Данные контейнера не сохраняются при удалении. Volume — сохраняются.
Dockerfile — текстовый файл с инструкциями для сборки образа.
Docker Compose — инструмент для запуска нескольких контейнеров одной командой.
Зачем Docker в вебе
1. Единая среда. Локалка = прод. Никаких «у меня работает».
2. Быстрый старт. Новый разработчик: git clone && docker compose up. Готово через 5 минут.
3. Изоляция сервисов. Laravel, PostgreSQL, Redis, Nginx — каждый в своём контейнере. Один упал — остальные живы.
4. Легко масштабировать. Нужно 3 инстанса приложения? docker compose up --scale app=3.
5. Простой деплой. Образ собирается один раз, запускается везде.
6. Чистая система. Не засоряешь хост-машину. Удалил контейнеры — всё чисто.
Что будем делать
- Основы Docker — образы, контейнеры
- Установка на Ubuntu и Mac
- Dockerfile для Laravel
- Dockerfile для Next.js
- Docker Compose — связка всего
- Laravel + PostgreSQL + Redis + Nginx
- Volumes для данных
- Networks
- Локальная разработка
- Продакшен-сборка
- Деплой на VPS
- CI/CD с Docker
Компоненты Docker
Docker Engine — основной сервис, работает в фоне.
Docker CLI — команды docker ....
Docker Compose — команды docker compose ....
Docker Hub — облако образов.
Пример: самый простой контейнер
docker run hello-world
Что произойдёт:
- Docker скачает образ
hello-worldиз Docker Hub - Создаст контейнер
- Запустит
- Контейнер выведет сообщение и завершится
hello-world — образ ~10 КБ. Запуск за секунды.
Почему Docker важен для DevOps
Docker — фундамент современного DevOps:
- Kubernetes работает с контейнерами
- CI/CD собирает образы
- Микросервисы = контейнеры
- Serverless использует похожие технологии
Без Docker DevOps не бывает.
Установка (кратко)
Ubuntu:
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER
newgrp docker
Проверка:
docker --version
docker compose version
Подробно — в следующем уроке.
Итог
Что запомнить:
- Image — шаблон
- Container — запущенный образ
- Volume — данные, переживающие удаление
- Dockerfile — как собрать образ
- Compose — запуск нескольких контейнеров
Дальше — установка Docker.