## Что такое Docker

Docker - это платформа для упаковки приложения вместе со всеми зависимостями в **изолированную среду** (контейнер), которая запускается одинаково на любом устройстве.

Коротко по терминам:

1. **Образ (image)** - неизменяемый «снимок» файловой системы и метаданных запуска (команда по умолчанию, переменные окружения, порты). Образ строится из слоёв; его можно скачать из реестра (например, Docker Hub) или собрать сами из `Dockerfile`.
2. **Контейнер** - запущенный экземпляр образа. У контейнера есть ID, имя, сеть, опционально тома с данными. Один образ может породить много контейнеров.
3. **Docker Engine** - демон и CLI (`docker`), которые создают и управляют контейнерами на хосте.
4. **Docker Compose** - инструмент (плагин к CLI: `docker compose`) для описания **нескольких** сервисов в одном YAML-файле: сборка образов, порты, тома, сети, зависимости запуска, переменные окружения.

<img src="./assets/image_1777876655709.png" width="auto">

## Зачем это нужно

1. **Стабильность** - «у меня не работает» больше не актуально, докер образ можно запускать на любом устройстве, где установлен докер.
2. **Изоляция** - приложения не мешают друг другу версиями библиотек и не требуют полноценной виртуальной машины на каждый сервис.
3. **Масштаб** - образы легко переносить, дальше их поднимают Kubernetes, Nomad и т.д., но база всё равно Docker-образ.
4. **Compose для стека** - фронт, бэкенд, БД и кэш поднимаются одной командой и общаются по внутренней сети.

## Docker и виртуальная машина

Виртуальная машина эмулирует железо и поднимает полную ОС. Контейнер делится ядром хоста и изолируется, он легче и быстрее стартует, но это не замена полной изоляции уровня ВМ для всех сценариев безопасности.

## Когда достаточно `docker run`, а когда Compose

- **`docker run`** - один контейнер, эксперимент, отладка, скрипты.
- `docker compose` - несколько связанных сервисов, общая сеть, тома, единая точка входа для разработки и демо.

<img src="./assets/image_1777876699941.png" width=" 500">

## Документация

- [Официальная документация Docker](https://docs.docker.com/)
- [Compose](https://docs.docker.com/compose/compose-file/)
