Урок 01

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. Чистая система. Не засоряешь хост-машину. Удалил контейнеры — всё чисто.

Что будем делать

  1. Основы Docker — образы, контейнеры
  2. Установка на Ubuntu и Mac
  3. Dockerfile для Laravel
  4. Dockerfile для Next.js
  5. Docker Compose — связка всего
  6. Laravel + PostgreSQL + Redis + Nginx
  7. Volumes для данных
  8. Networks
  9. Локальная разработка
  10. Продакшен-сборка
  11. Деплой на VPS
  12. CI/CD с Docker

Компоненты Docker

Docker Engine — основной сервис, работает в фоне.

Docker CLI — команды docker ....

Docker Compose — команды docker compose ....

Docker Hub — облако образов.

Пример: самый простой контейнер

docker run hello-world

Что произойдёт:

  1. Docker скачает образ hello-world из Docker Hub
  2. Создаст контейнер
  3. Запустит
  4. Контейнер выведет сообщение и завершится

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.