UNPKG

hudada-cli

Version:

专为程序员准备的本地文档搜索,快捷开发工具

210 lines (166 loc) 4.08 kB
# Docker Build 详细指南 ## 基础语法 ### 1. 基本命令格式 ```bash # 基本构建命令 pnpm docker build -t <镜像名称>:<标签> <构建上下文路径> # 使用指定Dockerfile构建 pnpm docker build -f /path/to/Dockerfile -t <镜像名称>:<标签> . ``` ## Dockerfile 核心指令 ### 1. 基础镜像设置 ```dockerfile # 使用官方Node.js镜像作为基础 FROM node:18-alpine # 多阶段构建示例 FROM node:18-alpine AS builder ``` ### 2. 工作目录和环境变量 ```dockerfile # 设置工作目录 WORKDIR /app # 设置环境变量 ENV NODE_ENV=production ENV PORT=3000 ``` ### 3. 文件操作 ```dockerfile # 复制package.json COPY package.json pnpm-lock.yaml ./ # 复制源代码 COPY . . # 添加压缩文件 ADD app.tar.gz /app/ ``` ### 4. 运行命令 ```dockerfile # 安装依赖 RUN pnpm install # 多行命令示例 RUN apt-get update && \ apt-get install -y curl && \ rm -rf /var/lib/apt/lists/* ``` ## 高级构建特性 ### 1. 多阶段构建 ```dockerfile # 构建阶段 FROM node:18-alpine AS builder WORKDIR /app COPY . . RUN pnpm install && pnpm build # 生产阶段 FROM node:18-alpine WORKDIR /app COPY --from=builder /app/dist ./dist COPY --from=builder /app/package.json . RUN pnpm install --prod CMD ["pnpm", "start"] ``` ### 2. 构建参数 ```dockerfile # 定义构建参数 ARG NODE_VERSION=18 FROM node:${NODE_VERSION}-alpine ARG PORT=3000 ENV PORT=${PORT} ``` ### 3. 构建缓存优化 ```dockerfile # 优化依赖安装缓存 COPY package.json pnpm-lock.yaml ./ RUN pnpm install COPY . . ``` ## 构建上下文和忽略文件 ### 1. .dockerignore 文件 ```plaintext node_modules npm-debug.log Dockerfile .dockerignore .git .gitignore README.md ``` ### 2. 构建上下文示例 ```bash # 从当前目录构建 pnpm docker build . # 从指定目录构建 pnpm docker build /path/to/source ``` ## 常用构建选项 ### 1. 网络和代理设置 ```bash # 使用主机网络构建 pnpm docker build --network=host . # 设置构建代理 pnpm docker build --build-arg HTTP_PROXY=http://proxy:8080 . ``` ### 2. 缓存控制 ```bash # 禁用缓存构建 pnpm docker build --no-cache . # 从特定阶段开始构建 pnpm docker build --target builder . ``` ## 构建模式和优化 ### 1. 开发环境构建 ```dockerfile # 开发环境Dockerfile FROM node:18-alpine WORKDIR /app COPY package.json . RUN pnpm install COPY . . CMD ["pnpm", "dev"] ``` ### 2. 生产环境构建 ```dockerfile # 生产环境多阶段构建 FROM node:18-alpine AS deps WORKDIR /app COPY package.json pnpm-lock.yaml ./ RUN pnpm install --prod FROM node:18-alpine AS builder WORKDIR /app COPY . . COPY --from=deps /app/node_modules ./node_modules RUN pnpm build FROM node:18-alpine WORKDIR /app COPY --from=builder /app/dist ./dist COPY --from=deps /app/node_modules ./node_modules CMD ["pnpm", "start"] ``` ## 最佳实践 1. **层优化** - 合并相关命令减少层数 - 合理使用多阶段构建 - 优化缓存利用 2. **安全考虑** - 使用特定版本基础镜像 - 及时更新安全补丁 - 最小化安装包 3. **性能优化** - 合理使用构建缓存 - 优化构建上下文大小 - 使用适当的基础镜像 ## 常见问题解决 ### 1. 构建失败处理 ```bash # 清理所有构建缓存 pnpm docker builder prune # 查看构建历史 pnpm docker history <镜像名称> ``` ### 2. 调试构建过程 ```bash # 启用构建详细输出 pnpm docker build --progress=plain . # 查看中间容器 pnpm docker build --progress=plain . 2>&1 | grep "Running in" ``` ## 总结 Docker build 是容器化应用程序的核心步骤,掌握其各种特性和最佳实践对于构建高效、安全的容器镜像至关重要。通过合理使用多阶段构建、构建缓存和优化策略,可以显著提升构建效率和最终镜像质量。