使用 Node.js 寻找小型的 Docker 镜像
当你寻找小型图像时的记录
我读了一篇关于缩小Node.js镜像的文章,我想记录一下以前使用的Dockerfile的大小是多少。
我想使用与我读到的文章相同的应用程序(将Node.js Web应用程序Docker化|Node.js)。
重点有两个。
-
- ncc を使う。 vercel/ncc: Compile a Node.js project into a single file. Supports TypeScript, binary addons, dynamic requires.
過去に ncc について書いていた。 zeit の ncc コマンドで node.js アプリを 1 ファイルにコンパイルしてみたメモ – Qiita
当時は、 zeit だったな。
素の(?) alpine を使う。 Image Layer Details – alpine:3.17 | Docker Hub
node.js 公式イメージの alpine だと npm が入っているだかなんだかで、素の(?) alpine にした記憶が。。
环境
- Docker 20.10.21
mkdir app
cd app
touch package.json
touch app.js
touch Dockerfile
{
"scripts": {
"build": "ncc build app.js --minify --out ncc-minify"
},
"dependencies": {
"express": "^4.18.2"
},
"devDependencies": {
"@vercel/ncc": "^0.36.0"
}
}
"use strict";
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}`);
});
FROM node:18 AS build
WORKDIR /app
COPY . .
RUN npm i
RUN npm run build
FROM alpine:3.17 AS production
RUN apk add --no-cache nodejs~=18
COPY --from=build /app/ncc-minify/ /app/
EXPOSE 8080
CMD ["node", "/app/index.js"]
建造
docker build -t nodejs18-min .
确认图像
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nodejs18-min latest 618d0cf78ed4 53 seconds ago 55.2MB
执行
docker run --init -it -p 8080:8080 nodejs18-min
确认行动
curl localhost:8080
最后
下次做的时候,用的是 distroless,正好之前看过一篇相关文章。
以上