## Что такое Docker Docker - это платформа для упаковки приложения вместе со всеми зависимостями в **изолированную среду** (контейнер), которая запускается одинаково на любом устройстве. Коротко по терминам: 1. **Образ (image)** - неизменяемый «снимок» файловой системы и метаданных запуска (команда по умолчанию, переменные окружения, порты). Образ строится из слоёв; его можно скачать из реестра (например, Docker Hub) или собрать сами из `Dockerfile`. 2. **Контейнер** - запущенный экземпляр образа. У контейнера есть ID, имя, сеть, опционально тома с данными. Один образ может породить много контейнеров. 3. **Docker Engine** - демон и CLI (`docker`), которые создают и управляют контейнерами на хосте. 4. **Docker Compose** - инструмент (плагин к CLI: `docker compose`) для описания **нескольких** сервисов в одном YAML-файле: сборка образов, порты, тома, сети, зависимости запуска, переменные окружения. ## Зачем это нужно 1. **Стабильность** - «у меня не работает» больше не актуально, докер образ можно запускать на любом устройстве, где установлен докер. 2. **Изоляция** - приложения не мешают друг другу версиями библиотек и не требуют полноценной виртуальной машины на каждый сервис. 3. **Масштаб** - образы легко переносить, дальше их поднимают Kubernetes, Nomad и т.д., но база всё равно Docker-образ. 4. **Compose для стека** - фронт, бэкенд, БД и кэш поднимаются одной командой и общаются по внутренней сети. ## Docker и виртуальная машина Виртуальная машина эмулирует железо и поднимает полную ОС. Контейнер делится ядром хоста и изолируется, он легче и быстрее стартует, но это не замена полной изоляции уровня ВМ для всех сценариев безопасности. ## Когда достаточно `docker run`, а когда Compose - **`docker run`** - один контейнер, эксперимент, отладка, скрипты. - `docker compose` - несколько связанных сервисов, общая сеть, тома, единая точка входа для разработки и демо. ## Документация - [Официальная документация Docker](https://docs.docker.com/) - [Compose](https://docs.docker.com/compose/compose-file/)