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

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

Автор — Дмитрий Тыльный, Senior DevOps · 13 июня 2026 · 5 мин
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Зайти внутрь контейнера

docker-compose: несколько сервисов

Реальное приложение — это не один контейнер, а несколько: бэкенд, база, кэш. Запускать их по одному вручную неудобно. docker-compose описывает всю связку одним YAML-файлом и поднимает её командой docker compose up:

services:
  app:
    build: .
    ports:
      - "3000:3000"
    depends_on:
      - db
  db:
    image: postgres:16
    environment:
      POSTGRES_PASSWORD: secret

Это следующий после Dockerfile навык, который ждут почти на любой вакансии с Docker.

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

  • Лёгкий базовый образ (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 без необходимости.

Следующий шаг в DevOps

Соберите и опубликуйте образ учебного сервиса, опишите в README команды build/run. Поднимите один сервис в Docker, прогоните простой CI, задеплойте на VPS или в песочницу. База: Docker, GitHub Actions, VPS. Полный маршрут — DevOps старт, обзор роли — devops starter.

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

Пройдите материал не как статью, а как задание. Выпишите 3 тезиса из разделов (Зачем нужен Docker; Образ, контейнер, реестр; Первый Dockerfile) и напротив каждого — действие на 30–90 минут: что сделаете руками, какой файл/репозиторий появится, как поймёте что готово. Без этого колонки «изучил» в голове не конвертируются в оффер.

Связка с соседними материалами: Docker, GitHub Actions, VPS, DevOps старт, devops starter. Не читайте всё подряд — возьмите один следующий URL и закройте его артефактом в git до конца недели. Если роль ещё не выбрана, сначала профессии и 5 вакансий-ориентиров, потом возвращайтесь к этой теме.

На собеседовании по теме «Docker для новичка: образы, контейнеры, оптимизация» вас почти всегда просят пример из практики. Подготовьте 60–90 секунд: задача → что сделали → результат/ограничение. Даже учебный пример звучит сильнее пересказа теории.

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

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

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

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

Docker или Podman?
Для старта — Docker: больше материалов и вакансий. Podman совместим по командам и осваивается потом легко.

Материал «Docker для новичка: образы, контейнеры, оптимизация» имеет смысл только вместе с практикой: один артефакт в git на этой неделе важнее десяти вкладок с теорией. Если застряли на выборе роли — начните с профессий и одной вакансии-ориентира.

Нужен оффер, а не пятый сертификат?

Записи реальных собесов и разборы — в Telegram.

Смотреть разборы