用途 该技能在用户要求对应用进行 dockerize、容器化或添加 Docker 支持时使用,帮助生成生产可用的 Docker 配置。
主要能力
- 检测运行时:检查 package.json、requirements.txt、go.mod、Cargo.toml 等文件,判断语言与运行时。
- 创建多阶段 Dockerfile:以 Node.js 为例,提供 base、deps、build、runner 四个阶段,使用 node:20-alpine 作为基础镜像,deps 阶段执行 npm ci --omit=dev,build 阶段执行 npm ci 与 npm run build,runner 阶段设置 NODE_ENV=production,复制 node_modules、.next、public、package.json,暴露 3000 端口并以 npm start 启动。并可根据检测到的框架调整构建输出目录、入口命令与基础镜像。
- 创建 .dockerignore:排除 node_modules、.next、.git、.env*、*.md。
- 创建 docker-compose.yml:当应用存在数据库或 Redis 等依赖时生成,示例包含 app 服务(build: .、端口 3000:3000、env_file: .env、depends_on: db)与 db 服务(postgres:16-alpine,设置 POSTGRES_DB、POSTGRES_USER、POSTGRES_PASSWORD,挂载 pgdata 卷)。
- 可选添加 npm 脚本:如 docker:build 执行 docker build -t myapp .,docker:run 执行 docker compose up。
使用方式 在用户提出容器化需求时触发该技能,按上述步骤依次检测运行时、生成 Dockerfile、.dockerignore、docker-compose.yml,并按需添加 npm 脚本。
适用场景 需要将应用容器化、添加 Docker 支持、生成生产可用 Dockerfile 与 compose 配置的项目,尤其适用于 Node.js 应用及带数据库或 Redis 依赖的应用。
限制与注意事项 使用 Alpine 基础镜像以减小镜像体积;切勿将 .env 文件复制进镜像,应使用 env_file 或运行时注入;对于 monorepo,应使用 .dockerignore 排除目标应用不需要的兄弟包;生产部署应添加 HEALTHCHECK 指令。