Docker для новичка: образы, контейнеры, оптимизация

Docker для новичка: что такое образы и контейнеры, как написать Dockerfile, собрать и оптимизировать образ. Практические примеры и частые ошибки для входа в DevOps.

Автор — Дмитрий Тыльный, Senior DevOps · 13 июня 2026 · 11 мин
Docker для новичка: образы, контейнеры, оптимизация

Коротко. Docker упаковывает приложение со всеми зависимостями в образ, из которого запускается изолированный контейнер — одинаково на вашем ноутбуке и на сервере. Достаточно понять три сущности (образ, контейнер, реестр), написать Dockerfile и знать 6–7 команд. Это база DevOps и обязательный навык для деплоя.

Зачем нужен Docker

Классическая проблема — «у меня работает, а на сервере нет». Docker решает её: образ содержит код, рантайм, библиотеки и настройки, поэтому окружение везде идентично. Плюс изоляция: контейнеры не мешают друг другу, легко запускать несколько версий рядом.

Образ, контейнер, реестр

  • Образ (image) — неизменяемый шаблон приложения (как «слепок»).
  • Контейнер (container) — запущенный экземпляр образа (как процесс).
  • Реестр (registry) — хранилище образов (Docker Hub и приватные реестры).

Аналогия: образ — это класс, контейнер — объект этого класса.

Первый Dockerfile

Dockerfile — рецепт сборки образа. Пример для Node.js-приложения:

FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --omit=dev
COPY . .
EXPOSE 3000
CMD ["node", "server.js"]

Каждая инструкция создаёт слой. Порядок важен: сначала копируем зависимости и ставим их, потом код — так кэш переиспользуется и пересборка быстрее.

Базовые команды

КомандаЧто делает
docker build -t myapp .Собрать образ из Dockerfile
docker run -p 3000:3000 myappЗапустить контейнер с пробросом порта
docker psПоказать запущенные контейнеры
docker logs IDПосмотреть логи контейнера
docker stop IDОстановить контейнер
docker exec -it ID shЗайти внутрь контейнера

Оптимизация образа

  • Лёгкий базовый образ (alpine) — образ меньше в разы.
  • .dockerignore — исключите node_modules, .git, чтобы не тащить лишнее.
  • Многоступенчатая сборка (multi-stage) — собираете в одном слое, в финальный кладёте только результат.
  • ✅ Ставьте зависимости отдельным шагом до копирования кода — для кэша.

Пример multi-stage для фронтенда:

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

FROM nginx:alpine
COPY --from=build /app/dist /usr/share/nginx/html

Частые ошибки

  • ❌ Копировать весь проект до установки зависимостей — ломает кэш.
  • ❌ Забыть .dockerignore — образ раздувается.
  • ❌ Хранить секреты прямо в Dockerfile — используйте переменные окружения/секреты.
  • ❌ Запускать всё от root без необходимости.

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

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

Что учить после Docker?
docker-compose для нескольких сервисов, затем CI/CD и Kubernetes. См. основы Kubernetes и GitHub Actions.

Нужен ли Docker джуну-разработчику?
Базовый — да: собрать образ и запустить контейнер. Это ждут и от бэкенда, и от QA-автоматизатора.

Полезно? Подпишитесь на Telegram

Вступить в канал