index.js
:
const express = require('express');
const PORT = 8080;
const HOST = '0.0.0.0';
const app = express();
app.get('/', (req, res) => {
res.send('Hello World');
});
app.listen(PORT, HOST, () => {
console.log(`Running on http://${HOST}:${PORT}`);
});
package.json
:
{
"dependencies": {
"express": "4.x"
}
}
Dockerfile
(alpine + alpine):
FROM node:18-alpine AS node_modules
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm install
FROM node:18-alpine
WORKDIR /app
RUN chown node: .
COPY --chown=node --from=node_modules /app/node_modules node_modules
COPY --chown=node . .
USER node
Dockerfile
(debian + alpine):
FROM node:18 AS node_modules
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm install
FROM node:18-alpine
WORKDIR /app
RUN chown node: .
COPY --chown=node --from=node_modules /app/node_modules node_modules
COPY --chown=node . .
USER node
Dockerfile
(npm@9
):
FROM alpine:3.17 AS node_modules
RUN apk add nodejs npm
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm install
FROM alpine:3.17
RUN apk add nodejs shadow && useradd node
WORKDIR /app
RUN chown node: .
COPY --chown=node --from=node_modules /app/node_modules node_modules
COPY --chown=node . .
USER node
$ docker build -t i .
$ docker run --rm --init -p 8080:8080 i node index.js