Dockerfile multistage

This commit is contained in:
albert
2025-07-28 13:09:36 +02:00
parent 90c6c8392f
commit fa13aaf069
2 changed files with 50 additions and 13 deletions

View File

@ -1,21 +1,15 @@
# Use Node.js 24 slim image FROM node:24-slim AS builder
FROM node:24-slim
# Set working directory
WORKDIR /app WORKDIR /app
# Install dependencies first (for better caching)
COPY package*.json ./ COPY package*.json ./
RUN npm install RUN npm install
# Copy the rest of the code
COPY . . COPY . .
# Build project (for production)
RUN npm run build RUN npm run build
# Expose port if needed (optional, e.g., 3000) FROM node:24-slim AS production
WORKDIR /app
COPY package*.json ./
RUN npm install --production
COPY --from=builder /app/dist ./dist
EXPOSE 3000 EXPOSE 3000
# Run app in production mode
CMD ["node", "dist/index.js"] CMD ["node", "dist/index.js"]

View File

@ -16,3 +16,46 @@
- [#2 PR : feat/database_and_feed_model ](https://github.com/aabril/dailytrends/pull/2) - [#2 PR : feat/database_and_feed_model ](https://github.com/aabril/dailytrends/pull/2)
- Añadimos `moongose` a las dependencias - Añadimos `moongose` a las dependencias
- Añado un docker-compose con mongo local (luego lo ampliaré para esta propia app) - Añado un docker-compose con mongo local (luego lo ampliaré para esta propia app)
## Dockerfile simple to multistage
I rebuild the Dockerfile to be multistage, since the image was heavy because all the node_modules dependencies.
The size of the image has been reduced from 717Mb to 376.
dailytrends-app-legacy latest 96a2dfe15361 3 minutes ago 717MB
dailytrends-app-light latest 7436142e1301 3 seconds ago 376MB
###### legacy
```Dockerfile
FROM node:24-slim
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
EXPOSE 3000
CMD ["node", "dist/index.js"]
```
###### light
```Dockerfile
FROM node:24-slim AS builder
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
FROM node:24-slim AS production
WORKDIR /app
COPY package*.json ./
RUN npm install --production
COPY --from=builder /app/dist ./dist
EXPOSE 3000
CMD ["node", "dist/index.js"]
```