Skip to content
devops2026-07-252 分钟阅读

什么是 Dockerfile

Dockerfile 是一个文本文件,包含用于构建 Docker 镜像的一系列指令。Docker 引擎按照指令顺序逐层构建镜像。

基本结构

# 基础镜像
FROM node:18-alpine

# 工作目录
WORKDIR /app

# 复制依赖文件
COPY package*.json ./

# 安装依赖
RUN npm ci --production

# 复制源码
COPY . .

# 暴露端口
EXPOSE 3000

# 启动命令
CMD ["npm", "start"]

为什么需要 Dockerfile 生成器

  1. 降低学习成本:不需要记住所有指令语法
  2. 减少配置错误:自动生成最佳实践配置
  3. 加速容器化:快速为项目创建 Docker 配置
  4. 统一规范:团队使用统一的 Dockerfile 模板
  5. 多语言支持:为不同技术栈生成合适的配置
  6. 最佳实践内置:自动应用安全和性能优化

Dockerfile 常用指令

| 指令 | 说明 | 示例 | |------|------|------| | FROM | 指定基础镜像 | FROM node:18-alpine | | WORKDIR | 设置工作目录 | WORKDIR /app | | COPY | 复制文件到镜像 | COPY . . | | RUN | 执行命令 | RUN npm install | | EXPOSE | 声明端口 | EXPOSE 3000 | | CMD | 容器启动命令 | CMD ["npm", "start"] | | ENV | 设置环境变量 | ENV NODE_ENV=production | | ARG | 构建参数 | ARG VERSION=1.0 | | ENTRYPOINT | 入口点 | ENTRYPOINT ["node"] | | ADD | 复制并解压 | ADD archive.tar.gz /app |

多阶段构建

多阶段构建可以显著减小最终镜像大小:

# 阶段1:构建
FROM node:18-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build

# 阶段2:生产
FROM node:18-alpine AS production
WORKDIR /app
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/node_modules ./node_modules
EXPOSE 3000
CMD ["node", "dist/index.js"]

镜像优化技巧

| 技巧 | 说明 | 效果 | |------|------|------| | 使用 Alpine 基础镜像 | alpine 替代 ubuntu | 镜像从 ~100MB → ~5MB | | 多阶段构建 | 构建和运行分离 | 移除构建工具 | | .dockerignore | 排除不需要的文件 | 减小构建上下文 | | 减少层数 | 合并 RUN 命令 | 减少镜像层数 | | 利用缓存 | 先 COPY 依赖文件 | 加速重复构建 | | 固定版本 | node:18.19.0 替代 node:latest | 保证可复现 |

FAQ

Dockerfile 和 docker-compose 有什么关系?

Dockerfile 定义单个镜像的构建过程。docker-compose 定义多容器应用的编排配置。一个 docker-compose 文件可以引用多个 Dockerfile 构建的镜像。

为什么镜像这么大?

常见原因:使用了完整版基础镜像(如 node 而非 node-alpine)、未使用多阶段构建、COPY 了 node_modules 等大文件。使用 docker images 查看镜像大小,逐步优化。

如何安全存储密码和密钥?

使用 Docker Secrets 或环境变量,不要写入 Dockerfile。生产环境使用 docker secret 或 Kubernetes Secrets。开发环境使用 .env 文件(不要提交到 Git)。


本文由 DevToolkit Pro 提供。更多开发者工具请访问 首页


ad