Этот вопрос проверяет понимание Docker как платформы для контейнеризации приложений, что необходимо для обеспечения единообразия среды разработки и развёртывания.
Docker — это платформа с открытым исходным кодом, которая позволяет упаковывать приложения и их зависимости в стандартизированные единицы, называемые контейнерами. Контейнер обеспечивает изоляцию процесса, но, в отличие от виртуальной машины, не включает полноценную гостевую операционную систему. Вместо этого он использует ядро хостовой ОС через механизмы пространств имён и контрольных групп (cgroups) в Linux. Это делает контейнеры чрезвычайно легковесными, быстрыми в запуске и эффективными с точки зрения ресурсов.
Docker используется для создания согласованных сред от разработки до продакшена, что решает проблему "у меня на машине работает". Он является фундаментом для микросервисов, CI/CD пайплайнов и оркестрации (например, с Kubernetes).
Пример простого Dockerfile для Node.js приложения:
# Используем официальный легковесный образ Node.js
FROM node:18-alpine
# Устанавливаем рабочую директорию в контейнере
WORKDIR /app
# Копируем файлы зависимостей
COPY package*.json ./
# Устанавливаем зависимости
RUN npm ci --only=production
# Копируем исходный код приложения
COPY . .
# Объявляем порт, который будет слушать приложение
EXPOSE 3000
# Команда для запуска приложения
CMD ["node", "server.js"]Чтобы собрать образ и запустить контейнер, используются команды:
# Сборка образа с тегом 'my-app'
docker build -t my-app .
# Запуск контейнера из образа, проброс порта 3000 на хост
docker run -p 3000:3000 my-appВывод: Docker стоит применять, когда необходимо обеспечить переносимость и воспроизводимость приложений, быстро развёртывать сервисы, эффективно использовать ресурсы сервера или строить архитектуру на основе микросервисов.