Эта строка используется в 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» образа помогает минимизировать размер финального контейнера и улучшить безопасность.