Установка зависимостей в Docker
Установка зависимостей читает
файл проекта во время сборки
и кладёт пакеты в образ.
Даже при пустом списке
dependencies шаг
npm install создаёт
каталог пакетов внутри
шаблона.
Сначала в образ попадает
только package.json,
затем идёт установка,
и уже после - server.js.
Так слой с пакетами не
пересобирается при каждой
правке кода сервера.
Файл шагов такой:
FROM node:24
WORKDIR /app
COPY package.json .
RUN npm install
COPY server.js .
CMD ["node", "server.js"]
Скрипт server.js слушает
0.0.0.0 и отдаёт
hello:
const http = require('node:http');
const server = http.createServer((req, res) => {
res.end('hello');
});
server.listen(3000, '0.0.0.0');
Содержимое package.json
без сторонних пакетов:
{
"name": "app",
"scripts": {
"start": "node server.js"
},
"dependencies": {}
}
Сервис по-прежнему собирается
из точки и публикует порт
3000.
Файл compose.yaml
не меняет имя готового образа:
services:
app:
build: .
ports:
- "3000:3000"
После пересборки страница
на localhost:3000
покажет hello.
Запуск с пересборкой:
docker compose up -d --build
Добавьте в шаблон сервиса lab шаг установки npm перед копированием server.js.
Пересоберите проект и убедитесь, что ответ на порту 3000 не изменился.