Docker для новичка: образы, контейнеры, оптимизация
Docker для новичка: что такое образы и контейнеры, как написать Dockerfile, собрать и оптимизировать образ. Практические примеры и частые ошибки для входа в DevOps.
Коротко. 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 на этой неделе важнее десяти вкладок с теорией. Если застряли на выборе роли — начните с профессий и одной вакансии-ориентира.