Что такое 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?
Образ — неизменяемый шаблон файловой системы и метаданных (команда запуска, переменные). Из образа создаётся один или несколько контейнеров — запущенных процессов.
Другие термины в теме «DevOps и облака»
Не хватает деталей?
Напишите, что уточнить по теме «Docker» — это помогает улучшать материал и подсказывает, какие термины добавить дальше. Email необязателен: укажите, если хотите ответ только для вас (мы не шлём рассылки).