Что такое Docker?

Docker — платформа для упаковки, доставки и запуска приложений в изолированных контейнерах. Контейнер включает код, рантайм, библиотеки и конфигурацию; на разных серверах приложение ведёт себя одинаково, потому что окружение зафиксировано в образе.

flowchart TB
  Dev["Разработчик"] --> Build["docker build"]
  Build --> Image["Образ"]
  Image --> Registry["Registry"]
  Registry --> Run["docker run на сервере"]
  Run --> Container["Контейнер"]

От кода до запуска: образ — неизменяемый артефакт, контейнер — его процесс на хосте.

Контейнер и виртуальная машина

Виртуальная машина эмулирует железо и поднимает полноценную гостевую ОС — изоляция сильная, но старт медленный и образ тяжёлый. Docker использует ядро хоста: процессы изолированы через namespaces (сеть, PID, mount) и ограничены по ресурсам через cgroups. Контейнер стартует за секунды и занимает мегабайты, а не гигабайты.

Образ, слои и Dockerfile

Образ собирается из слоёв (Union FS): каждая инструкция в Dockerfile добавляет слой, который можно переиспользовать из кэша. Типичный Dockerfile: базовый образ → установка зависимостей → копирование кода → команда запуска. Multi-stage build позволяет собрать бинарник в «толстом» образе, а в финальный слой положить только артефакт — итоговый образ меньше и безопаснее.

FROM node:20-alpine AS build
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build

FROM node:20-alpine
WORKDIR /app
COPY --from=build /app/dist ./dist
CMD ["node", "dist/server.js"]

Docker Compose и оркестрация

На ноутбуке и стейджинге несколько сервисов (API, БД, кэш) удобно описать в docker-compose.yml: одна команда поднимает сеть и тома. В продакшене на десятках узлов обычно переходят к Kubernetes или другому оркестратору, но образы остаются тем же форматом OCI.

Типичные ошибки

  • Запуск от root внутри контейнера без необходимости — риск при компрометации.
  • Огромные образы без multi-stage — медленный деплой и большая поверхность атаки.
  • Хранение состояния только внутри контейнера без томов — данные теряются при пересоздании.

Официальная документация: docs.docker.com.

Частые вопросы

  • Чем контейнер отличается от виртуальной машины?

    VM включает отдельную гостевую ОС; контейнер делит ядро хоста и изолируется namespaces/cgroups. VM тяжелее и медленнее стартует, контейнер — легче и быстрее.

  • Зачем нужен Docker Compose?

    Compose описывает несколько связанных сервисов, сети и тома в одном файле и поднимает их одной командой — удобно для локальной разработки и небольших стендов.

  • Что такое образ Docker?

    Образ — неизменяемый шаблон файловой системы и метаданных (команда запуска, переменные). Из образа создаётся один или несколько контейнеров — запущенных процессов.

Не хватает деталей?

Напишите, что уточнить по теме «Docker» — это помогает улучшать материал и подсказывает, какие термины добавить дальше. Email необязателен: укажите, если хотите ответ только для вас (мы не шлём рассылки).

Поделиться