用途
当用户要求对应用进行 dockerize、容器化或添加 Docker 支持时,可使用本技能。它会根据项目实际情况生成一套生产可用的 Docker 相关文件。
主要能力
- 检测运行时:检查 package.json、requirements.txt、go.mod、Cargo.toml 等文件,判断项目使用的语言与运行时。
- 创建多阶段 Dockerfile:以 Node.js 为例,技能给出的示例包含 base、deps、build、runner 四个阶段,分别用于安装生产依赖、执行构建、运行产物。示例中基础镜像为 node:20-alpine,暴露端口 3000,启动命令为 npm start。技能会针对检测到的框架调整构建输出目录、入口命令和基础镜像。
- 创建 .dockerignore:示例内容排除 node_modules、.next、.git、.env*、*.md 等文件。
- 创建 docker-compose.yml:当应用存在数据库或 Redis 等依赖时生成。示例包含 app 服务(build 当前目录、映射 3000:3000、使用 .env、依赖 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。
- 应用依赖数据库、Redis 等外部服务,需要 docker-compose 编排。
- 需要为项目补充 .dockerignore 或便捷的 Docker npm 脚本。
限制与注意事项
- 建议使用基于 Alpine 的镜像以减小镜像体积。
- 切勿将 .env 文件复制进镜像,应使用 env_file 或运行时注入。
- 对于 monorepo,应使用 .dockerignore 排除目标应用不需要的同级包。
- 生产部署应添加 HEALTHCHECK 指令。
- 资料未提供该技能的具体安装命令、收费方式、支持平台及实际效果等信息。