Что означает FROM node:lts-slim AS deps?

Эта строка используется в Dockerfile для создания многоэтапного процесса сборки Docker-образа. Давайте разберём её по частям:


1. FROM node:lts-slim

  • node:lts-slim — это базовый образ Docker, содержащий Node.js.
    • lts: Обозначает «Long Term Support» (долгосрочная поддержка). Это версия Node.js, которая считается стабильной и поддерживается в течение длительного времени.
    • slim: Указывает, что это «облегчённый» вариант образа. Он содержит только минимально необходимые компоненты для работы Node.js, что делает его:
      • Легче по размеру (меньше места на диске).
      • Быстрее для загрузки и развертывания.
      • Более безопасным, так как в нём меньше ненужных пакетов, которые могут содержать уязвимости.
    Пример использования:
    • Этот образ подходит для большинства Node.js приложений, особенно если вам не нужны дополнительные инструменты разработки или сборки, такие как компиляторы или библиотеки.

2. AS deps

  • AS deps — это часть многоэтапной сборки Docker (multi-stage build).
    • Она задаёт имя текущего этапа сборки. В данном случае этап называется deps (сокращение от «dependencies» — зависимости).
    • Это имя можно использовать в последующих этапах сборки для копирования файлов или зависимостей из этого этапа.
    Пример: Если вы устанавливаете зависимости на этапе deps, вы можете позже скопировать их в финальный образ: dockerfile
  • FROM node:lts-slim AS deps WORKDIR /app COPY package.json package-lock.json ./ RUN npm ci --only=production FROM node:lts-slim WORKDIR /app COPY --from=deps /app/node_modules ./node_modules COPY . . CMD ["node", "index.js"] В этом примере:
    • На этапе deps устанавливаются зависимости.
    • На финальном этапе зависимости копируются из этапа deps, чтобы минимизировать размер финального образа.

3. Почему используется node:lts-slim?

  • Меньший размер: Образ «slim» значительно меньше, чем стандартный node образ. Это ускоряет загрузку и развертывание контейнеров.
  • Оптимизация для продакшена: В «slim» образе отсутствуют ненужные инструменты разработки, такие как компиляторы или библиотеки, что делает его более безопасным и подходящим для продакшена.
  • Баланс между функциональностью и размером: Хотя «slim» образ меньше, он всё ещё содержит достаточно инструментов для большинства задач, связанных с Node.js.

Когда использовать FROM node:lts-slim AS deps?

  • Для установки зависимостей: Этот этап часто используется для установки зависимостей проекта с помощью npm или yarn.
  • Для многоэтапной сборки: Если вы хотите разделить процесс сборки (например, установка зависимостей, компиляция кода) и финальный образ, чтобы уменьшить его размер.
  • Для продакшена: Использование «slim» образа помогает минимизировать размер финального контейнера и улучшить безопасность.