SorryToPerson logo
返回
Docker2026-04-15·7 分钟

Dockerfile 最佳实践

总结高效 Dockerfile 编写规范、构建性能和安全优化要点。

Dockerfile 最佳实践

1. 精简基础镜像

  • 选择适合应用的最小镜像,避免 latest 作为唯一版本标识。
  • 常见基础镜像:node:20-alpinepython:3.12-slimgolang:1.22-alpine

2. 利用构建缓存

  • 将不频繁变更的指令放在前面。
  • 先复制依赖文件,再执行安装。
dockerfile
FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --production
COPY . ./
CMD ["node", "index.js"]

3. 多阶段构建减少体积

dockerfile
FROM node:20-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . ./
RUN npm run build

FROM node:20-alpine
WORKDIR /app
COPY --from=builder /app/dist ./dist
COPY package*.json ./
RUN npm ci --production
CMD ["node", "dist/index.js"]

4. 使用 .dockerignore

text
node_modules
.git
.env
.DS_Store
  • 减少构建上下文大小,提高构建速度。
  • 不要把大文件和临时目录打包到镜像上下文中。

5. 最小权限运行

dockerfile
RUN addgroup -S appgroup && adduser -S appuser -G appgroup
USER appuser
  • 避免容器内使用 root 用户,降低安全风险。

6. 合理分层与缓存策略

  • 每个 RUN 指令会产生一层。
  • 可以用 && 合并命令,减少层数。
dockerfile
RUN apk add --no-cache curl && rm -rf /var/cache/apk/*

7. 健康检查

dockerfile
HEALTHCHECK --interval=30s --timeout=5s \
  CMD curl -f http://localhost:8080/health || exit 1
  • 让编排平台更快发现异常容器。

8. 减少镜像中敏感信息

  • 构建时不要写明凭据。
  • 运行时通过环境变量或 secret 管理。

9. 常见优化方向

  • 缩小安装包:只安装生产依赖。
  • 删除临时构建文件。
  • 在构建时使用 --squash(Docker 引擎支持)或多阶段构建。
DockerDockerfile最佳实践