Prog Academy
RU UA
DevOps и облака

Что такое Docker?

Docker — инструмент, который упаковывает приложение вместе со всем окружением — кодом, зависимостями, настройками — в контейнер. Такой контейнер запускается одинаково на компьютере разработчика, на тестовом стенде и на сервере.

Docker закрывает классическую проблему «у меня локально работает». Инструкция сборки описывается в файле Dockerfile, из неё создаётся образ, а из образа — сколько угодно одинаковых контейнеров.

Практическая выгода видна сразу: новый разработчик поднимает проект одной командой вместо дня настройки, тестовое окружение точно повторяет продакшен, а обновление сводится к запуску нового образа. Для локальной работы с несколькими сервисами используют Docker Compose.

Где применяется

Docker закрывает классическую проблему «у меня работает». Разработчик описывает окружение файлом, и тот же образ запускается на его ноутбуке, на тестовом стенде и на продакшен-сервере — с одинаковой версией языка, библиотек и системных пакетов.

Отсюда и повсеместность: в контейнерах живут веб-сервисы, базы данных для локальной разработки, агенты сборки в CI, инструменты для тестирования. Для новичка это ещё и удобный способ поднять PostgreSQL или Redis одной командой, не устанавливая их в систему и не разбираясь с конфигурацией.

Пример

На проект приходит новый разработчик. Вместо дня установки нужных версий языка, базы и очереди он клонирует репозиторий и выполняет одну команду запуска — через несколько минут у него поднято всё окружение в том же виде, что у остальной команды.

FROM node:20-alpine

WORKDIR /app

COPY package*.json ./
RUN npm ci --omit=dev

COPY . .

EXPOSE 3000
CMD ["node", "server.js"]
Описание образа: базовый образ, установка зависимостей, копирование кода и команда запуска.

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

Чем образ отличается от контейнера?

Образ — это неизменяемый шаблон, собранный по описанию: файловая система приложения и команда запуска. Контейнер — работающий экземпляр, созданный из образа. Из одного образа можно поднять сколько угодно контейнеров, и каждый живёт своей жизнью.

Нужен ли Docker обычному разработчику?

Да, это давно базовый навык, а не только инструмент DevOps. Даже без настройки продакшена он нужен, чтобы поднять локальное окружение, запустить базу для тестов и собрать проект так же, как это делает сборочный конвейер.

Docker работает только на Linux?

Контейнеры используют ядро Linux, но Docker Desktop запускает их на Windows и macOS через лёгкую виртуальную машину. Для разработчика это прозрачно: команды те же, поведение совпадает. Разница проявляется лишь в производительности файловых операций.

Docker и Kubernetes — это конкуренты?

Нет, они решают разные задачи. Docker создаёт и запускает контейнеры, Kubernetes управляет множеством контейнеров на группе серверов: распределяет нагрузку, перезапускает упавшие, выкатывает обновления. Kubernetes работает поверх контейнеров, обычно собранных именно Docker.

Связанные термины