logo
0
0
WeChat Login
feat: 搭建多环境镜像构建系统和 Claude Code 集成

Dockerfile 注入片段

本目录包含 Dockerfile 注入机制使用的代码片段,每个文件定义一个注入类型。

文件命名规范

  • 文件名:{inject-type}.snippet
  • 示例:node.snippet, claude.snippet, python-tools.snippet

现有片段

node.snippet

安装 Node.js 环境(通过 nvm)

使用方法:

# @inject-start # @inject: node # @inject-end

claude.snippet

安装和配置 Claude Code CLI

使用方法:

# @inject-start # @inject: claude # @inject-end

包含:

  • Node.js 环境(如未安装)
  • Claude Code CLI
  • claude.start 包装脚本
  • 配置恢复脚本

添加新的注入类型

1. 创建片段文件

# 创建新片段 vim dev/inject-snippets/python-tools.snippet

2. 编写 Dockerfile 代码

# ============================================ # Python 开发工具(自动注入) # ============================================ COPY setup/python-tools.sh /tmp/python-tools.sh RUN chmod +x /tmp/python-tools.sh && /tmp/python-tools.sh && rm /tmp/python-tools.sh

3. 在 Dockerfile 中使用

FROM python:3.11 # @inject-start # @inject: python-tools # @inject-end WORKDIR /workspace

4. 测试注入

# 处理注入 bash dev/inject-dockerfile.sh python-3.11 # 查看结果 cat envs/python-3.11/Dockerfile.injected

最佳实践

片段结构

# ============================================ # 功能描述(自动注入) # ============================================ # 1. 复制必要的脚本 COPY setup/xxx.sh /tmp/xxx.sh # 2. 执行安装或配置 RUN chmod +x /tmp/xxx.sh && \ /tmp/xxx.sh && \ rm /tmp/xxx.sh # 3. 如需保留文件到镜像 COPY image-scripts/xxx.sh /opt/cnb/scripts/xxx.sh RUN chmod +x /opt/cnb/scripts/xxx.sh

命名规范

  • setup/ - 安装脚本(构建时运行后删除)

    • node-install.sh
    • setup-claude.sh
    • python-tools.sh
  • image-scripts/ - 镜像内脚本(保留到镜像)

    • claude-restore.sh

片段设计原则

  1. 幂等性 - 多次运行结果一致
  2. 最小化 - 只包含必要的安装步骤
  3. 清理 - 删除临时文件减少镜像体积
  4. 独立性 - 片段之间尽量独立,减少依赖

错误处理

如果注入类型不存在:

# Error: Unknown inject type 'xxx' # Available snippets: node claude

检查可用的片段:

ls dev/inject-snippets/*.snippet | xargs -n1 basename | sed 's/.snippet$//'

目录结构

dev/inject-snippets/ ├── README.md # 本文档 ├── node.snippet # Node.js 安装 ├── claude.snippet # Claude Code 安装配置 └── ... # 其他自定义片段

相关文档