Update Node base images to 22 LTS

This commit is contained in:
yeasy
2026-05-01 10:24:43 +00:00
parent e6527ae769
commit 7e3f90b522
10 changed files with 22 additions and 22 deletions
+1 -1
View File
@@ -212,7 +212,7 @@ FROM node:22-alpine
CMD ["node", "server.js"]
```
> **版本说明**示例使用 `node:22-alpine`这是一个精简的 Node.js 22 版本镜像可根据需求替换为其他版本 `node:20-alpine``node:latest`
> **版本说明**示例使用 `node:22-alpine`这是一个精简的 Node.js 22 版本镜像可根据需求替换为其他版本 `node:24-alpine``node:latest`
#### Q容器无法停止
+4 -4
View File
@@ -82,9 +82,9 @@ RUN pwd # 输出 /app
```docker
## 构建阶段
## 建议使用 node:20 或 node: 等具体版本标签,避免使用 latest
## 建议使用 node:22 或 node: 等具体版本标签,避免使用 latest
FROM node:20 AS builder
FROM node:22 AS builder
WORKDIR /build
COPY package*.json ./
RUN npm install
@@ -105,8 +105,8 @@ COPY --from=builder /build/dist .
#### 1. 尽早设置 WORKDIR
```docker
# 建议使用 node:20 等主/次版本号标签
FROM node:20
# 建议使用 node:22 等主/次版本号标签
FROM node:22
WORKDIR /app # 尽早设置
COPY package*.json ./
+4 -4
View File
@@ -35,7 +35,7 @@ flowchart LR
#### 创建并切换用户
```docker
FROM node:20-alpine
FROM node:22-alpine
## 1. 创建用户和组
@@ -173,7 +173,7 @@ $ docker run -u root myimage
切换用户后确保应用有权访问文件
```docker
FROM node:20-alpine
FROM node:22-alpine
## 创建用户
@@ -229,14 +229,14 @@ USER 1000:1000
```docker
## 构建阶段可以用 root
FROM node:20 AS builder
FROM node:22 AS builder
WORKDIR /app
COPY . .
RUN npm install && npm run build
## 生产阶段用非 root
FROM node:20-alpine
FROM node:22-alpine
RUN adduser -D appuser
WORKDIR /app
COPY --from=builder --chown=appuser:appuser /app/dist .
+2 -2
View File
@@ -30,7 +30,7 @@ ONBUILD <其它指令>
**基础镜像 (my-node-base)**
```docker
FROM node:20-alpine
FROM node:22-alpine
WORKDIR /app
## 这些指令将在子镜像构建时执行
@@ -126,7 +126,7 @@ ONBUILD COPY dist/ /usr/share/nginx/html/
建议在镜像标签中添加 `-onbuild` 后缀明确告知使用者该镜像包含触发器
```bash
node:20-onbuild
node:22-onbuild
python:3.12-onbuild
```
@@ -60,8 +60,8 @@ server {
第一阶段进行前端构建
```docker
# 注:node 镜像推荐使用具体的版本标签(如 node:20-alpine
FROM node:20-alpine as frontend
# 注:node 镜像推荐使用具体的版本标签(如 node:22-alpine
FROM node:22-alpine as frontend
COPY package.json /app/
@@ -179,8 +179,8 @@ $ docker run -dit --rm --network=laravel -p 8080:80 my/nginx
完整的 `Dockerfile` 文件如下
```docker
# 注:生产环境推荐使用具体的版本标签,如 node:20-alpine、composer:2.x、php:8.3-fpm-alpine、nginx:1.30-alpine
FROM node:20-alpine as frontend
# 注:生产环境推荐使用具体的版本标签,如 node:22-alpine、composer:2.x、php:8.3-fpm-alpine、nginx:1.30-alpine
FROM node:22-alpine as frontend
COPY package.json /app/
+1 -1
View File
@@ -178,7 +178,7 @@ ADD app.tar.gz /app/
```docker
## 构建阶段
FROM node:20 AS builder
FROM node:22 AS builder
WORKDIR /app
COPY package*.json ./
RUN npm install
+2 -2
View File
@@ -93,14 +93,14 @@ RUN echo "Node version: $NODE_VERSION"
```docker
ARG BASE_VERSION=alpine
FROM node:20-${BASE_VERSION} AS builder
FROM node:22-${BASE_VERSION} AS builder
## 需要重新声明
ARG NODE_VERSION=20
RUN echo "Building with Node $NODE_VERSION"
FROM node:20-${BASE_VERSION}
FROM node:22-${BASE_VERSION}
## 每个阶段都需要重新声明
+1 -1
View File
@@ -80,7 +80,7 @@ docker build -t my-image:1.0 .
本章中的 Dockerfile 示例使用的基础镜像标签遵循以下原则
- **通用标签** `ubuntu:24.04``alpine``nginx`保持原样无需修改
- **基础镜像版本号** `node:20``python:3.12`使用主或次版本号而非完整版本号patch这样可以自动获取最新的补丁版本确保获得安全更新
- **基础镜像版本号** `node:22``python:3.12`使用主或次版本号而非完整版本号patch这样可以自动获取最新的补丁版本确保获得安全更新
- **避免**不建议使用 `latest` 标签和完整的 patch 版本号 `20.10.0`作为基础镜像因为这会导致构建的不可重现性或安全风险
读者在使用这些示例时应根据实际生产环境需求选择合适的版本号
+1 -1
View File
@@ -41,7 +41,7 @@ flowchart TD
每个 Dockerfile 指令创建一层只有变化的层需要重建
```docker
FROM node:20 # 层1:基础镜像
FROM node:22 # 层1:基础镜像
COPY package.json ./ # 层2:依赖定义
RUN npm install # 层3:安装依赖
COPY . . # 层4:应用代码
+2 -2
View File
@@ -11,7 +11,7 @@
在项目中创建一个 Dockerfile
```docker
FROM node:20
FROM node:22
## replace this with your application's default port
@@ -32,7 +32,7 @@ $ docker run -it --rm \
--mount type=bind,src="$(pwd)",target=/usr/src/myapp \
-w /usr/src/myapp \
node:20-alpine \
node:22-alpine \
node your-daemon-or-script.js
```