Docker2026-04-15·7 分钟
Dockerfile 最佳实践
总结高效 Dockerfile 编写规范、构建性能和安全优化要点。
Dockerfile 最佳实践
1. 精简基础镜像
- 选择适合应用的最小镜像,避免
latest作为唯一版本标识。 - 常见基础镜像:
node:20-alpine、python:3.12-slim、golang: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最佳实践