|
1 | | -# coder-docker |
| 1 | +# coder-docker |
| 2 | +优化这个 Dockerfile,添加 CLI 配置文件管理和外部目录映射支持: |
| 3 | + |
| 4 | +```dockerfile |
| 5 | +FROM node:20-slim |
| 6 | + |
| 7 | +ENV DEBIAN_FRONTEND=noninteractive |
| 8 | +ENV TERM=xterm-256color |
| 9 | + |
| 10 | +WORKDIR /workspace |
| 11 | + |
| 12 | +# Install basic dependencies |
| 13 | +RUN apt-get update && apt-get install -y \ |
| 14 | + git \ |
| 15 | + curl \ |
| 16 | + wget \ |
| 17 | + ca-certificates \ |
| 18 | + && rm -rf /var/lib/apt/lists/* |
| 19 | + |
| 20 | +# Install all npm-based AI coding tools |
| 21 | +RUN npm install -g \ |
| 22 | + @openai/codex \ |
| 23 | + @google/gemini-cli \ |
| 24 | + @anthropic-ai/claude-code \ |
| 25 | + @continuedev/cli \ |
| 26 | + @sourcegraph/cody \ |
| 27 | + @githubnext/github-copilot-cli |
| 28 | + |
| 29 | +# Optional: Install Python-based tools |
| 30 | +RUN apt-get update && apt-get install -y \ |
| 31 | + python3 \ |
| 32 | + python3-pip \ |
| 33 | + && rm -rf /var/lib/apt/lists/* \ |
| 34 | + && pip3 install --no-cache-dir \ |
| 35 | + gpt-engineer \ |
| 36 | + aider-chat \ |
| 37 | + open-interpreter \ |
| 38 | + && pip3 cache purge |
| 39 | + |
| 40 | +# Create non-root user |
| 41 | +RUN useradd -m -s /bin/bash coder |
| 42 | + |
| 43 | +# Create configuration directories |
| 44 | +RUN mkdir -p /home/coder/.config/ai-tools \ |
| 45 | + && mkdir -p /home/coder/projects \ |
| 46 | + && mkdir -p /home/coder/.cache \ |
| 47 | + && chown -R coder:coder /home/coder |
| 48 | + |
| 49 | +USER coder |
| 50 | +WORKDIR /home/coder |
| 51 | + |
| 52 | +# Create default configuration template |
| 53 | +RUN echo '# AI Tools Configuration\n\ |
| 54 | +# Copy this to your host machine and mount as volume\n\ |
| 55 | +\n\ |
| 56 | +# OpenAI Configuration\n\ |
| 57 | +export OPENAI_API_KEY="your-openai-key"\n\ |
| 58 | +export OPENAI_ORG_ID="your-org-id"\n\ |
| 59 | +\n\ |
| 60 | +# Anthropic Claude Configuration\n\ |
| 61 | +export ANTHROPIC_API_KEY="your-anthropic-key"\n\ |
| 62 | +\n\ |
| 63 | +# Google Gemini Configuration\n\ |
| 64 | +export GEMINI_API_KEY="your-gemini-key"\n\ |
| 65 | +\n\ |
| 66 | +# GitHub Copilot Configuration\n\ |
| 67 | +export GITHUB_TOKEN="your-github-token"\n\ |
| 68 | +\n\ |
| 69 | +# Sourcegraph Cody Configuration\n\ |
| 70 | +export SRC_ACCESS_TOKEN="your-sourcegraph-token"\n\ |
| 71 | +export SRC_ENDPOINT="https://sourcegraph.com"\n\ |
| 72 | +' > /home/coder/.config/ai-tools/config.env.template |
| 73 | + |
| 74 | +# Create helper script |
| 75 | +RUN echo '#!/bin/bash\n\ |
| 76 | +echo "🚀 AI Coding Agents Collection"\n\ |
| 77 | +echo "================================"\n\ |
| 78 | +echo ""\n\ |
| 79 | +echo "✅ npm-installed CLI tools:"\n\ |
| 80 | +echo " codex - OpenAI Codex"\n\ |
| 81 | +echo " gemini - Google Gemini CLI"\n\ |
| 82 | +echo " claude - Anthropic Claude Code"\n\ |
| 83 | +echo " cn - Continue CLI"\n\ |
| 84 | +echo " cody - Sourcegraph Cody"\n\ |
| 85 | +echo " github-copilot - GitHub Copilot CLI"\n\ |
| 86 | +echo ""\n\ |
| 87 | +echo "🐍 pip-installed tools:"\n\ |
| 88 | +echo " gpt-engineer - GPT Engineer"\n\ |
| 89 | +echo " aider - Aider"\n\ |
| 90 | +echo " interpreter - Open Interpreter"\n\ |
| 91 | +echo ""\n\ |
| 92 | +echo "📁 Mounted directories:"\n\ |
| 93 | +echo " ~/projects - Your project files"\n\ |
| 94 | +echo " ~/.config - Configuration files"\n\ |
| 95 | +echo " ~/.cache - Cache directory"\n\ |
| 96 | +echo ""\n\ |
| 97 | +echo "📖 Quick start:"\n\ |
| 98 | +echo " 1. Load config: source ~/.config/ai-tools/config.env"\n\ |
| 99 | +echo " 2. Run tool: claude"\n\ |
| 100 | +echo ""\n\ |
| 101 | +if [ -f ~/.config/ai-tools/config.env ]; then\n\ |
| 102 | + source ~/.config/ai-tools/config.env\n\ |
| 103 | + echo "✅ Configuration loaded"\n\ |
| 104 | +else\n\ |
| 105 | + echo "⚠️ No config found. Copy config.env.template to config.env"\n\ |
| 106 | +fi\n\ |
| 107 | +' > /home/coder/list-agents.sh && chmod +x /home/coder/list-agents.sh |
| 108 | + |
| 109 | +ENV PATH="/home/coder:${PATH}" |
| 110 | + |
| 111 | +# Set volumes for persistent data |
| 112 | +VOLUME ["/home/coder/projects", "/home/coder/.config", "/home/coder/.cache"] |
| 113 | + |
| 114 | +CMD ["/bin/bash", "-c", "/home/coder/list-agents.sh && /bin/bash"] |
| 115 | +``` |
| 116 | + |
| 117 | +**配套的 docker-compose.yml**: |
| 118 | + |
| 119 | +```yaml |
| 120 | +version: '3.8' |
| 121 | + |
| 122 | +services: |
| 123 | + ai-coding-agents: |
| 124 | + build: . |
| 125 | + container_name: ai-coding-tools |
| 126 | + stdin_open: true |
| 127 | + tty: true |
| 128 | + volumes: |
| 129 | + # 项目文件映射 |
| 130 | + - ./projects:/home/coder/projects |
| 131 | + |
| 132 | + # 配置文件映射 |
| 133 | + - ./config:/home/coder/.config/ai-tools |
| 134 | + |
| 135 | + # 缓存目录映射(可选) |
| 136 | + - ./cache:/home/coder/.cache |
| 137 | + |
| 138 | + # Git 配置映射(可选) |
| 139 | + - ~/.gitconfig:/home/coder/.gitconfig:ro |
| 140 | + |
| 141 | + # SSH 密钥映射(可选,用于 git) |
| 142 | + - ~/.ssh:/home/coder/.ssh:ro |
| 143 | + |
| 144 | + environment: |
| 145 | + # 可以在这里直接设置环境变量,或使用 env_file |
| 146 | + - OPENAI_API_KEY=${OPENAI_API_KEY} |
| 147 | + - ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY} |
| 148 | + - GEMINI_API_KEY=${GEMINI_API_KEY} |
| 149 | + - GITHUB_TOKEN=${GITHUB_TOKEN} |
| 150 | + |
| 151 | + # 或使用环境变量文件 |
| 152 | + # env_file: |
| 153 | + # - ./config/.env |
| 154 | + |
| 155 | + working_dir: /home/coder/projects |
| 156 | + |
| 157 | + # 网络配置(如果需要访问本地服务) |
| 158 | + # network_mode: host |
| 159 | +``` |
| 160 | + |
| 161 | +**使用说明文档 (README.md)**: |
| 162 | + |
| 163 | +````markdown |
| 164 | +# AI Coding Agents Docker Setup |
| 165 | + |
| 166 | +## 📋 初始设置 |
| 167 | + |
| 168 | +### 1. 创建必要的目录结构 |
| 169 | +```bash |
| 170 | +mkdir -p projects config cache |
| 171 | +```` |
| 172 | + |
| 173 | +### 2. 创建配置文件 |
| 174 | + |
| 175 | +复制模板并填写你的 API keys: |
| 176 | + |
| 177 | +```bash |
| 178 | +# 从容器中复制模板 |
| 179 | +docker run --rm ai-coding-tools cat /home/coder/.config/ai-tools/config.env.template > config/config.env |
| 180 | + |
| 181 | +# 编辑配置文件 |
| 182 | +nano config/config.env |
| 183 | +``` |
| 184 | + |
| 185 | +或直接创建 `config/config.env`: |
| 186 | + |
| 187 | +```bash |
| 188 | +# OpenAI Configuration |
| 189 | +export OPENAI_API_KEY="sk-..." |
| 190 | +export OPENAI_ORG_ID="org-..." |
| 191 | + |
| 192 | +# Anthropic Claude Configuration |
| 193 | +export ANTHROPIC_API_KEY="sk-ant-..." |
| 194 | + |
| 195 | +# Google Gemini Configuration |
| 196 | +export GEMINI_API_KEY="..." |
| 197 | + |
| 198 | +# GitHub Copilot Configuration |
| 199 | +export GITHUB_TOKEN="ghp_..." |
| 200 | + |
| 201 | +# Sourcegraph Cody Configuration |
| 202 | +export SRC_ACCESS_TOKEN="..." |
| 203 | +export SRC_ENDPOINT="https://sourcegraph.com" |
| 204 | +``` |
| 205 | + |
| 206 | +## 🚀 启动容器 |
| 207 | + |
| 208 | +### 使用 docker-compose (推荐) |
| 209 | + |
| 210 | +```bash |
| 211 | +docker-compose up -d |
| 212 | +docker-compose exec ai-coding-agents bash |
| 213 | +``` |
| 214 | + |
| 215 | +### 使用 docker run |
| 216 | + |
| 217 | +```bash |
| 218 | +docker build -t ai-coding-tools . |
| 219 | + |
| 220 | +docker run -it --rm \ |
| 221 | + -v $(pwd)/projects:/home/coder/projects \ |
| 222 | + -v $(pwd)/config:/home/coder/.config/ai-tools \ |
| 223 | + -v $(pwd)/cache:/home/coder/.cache \ |
| 224 | + -v ~/.gitconfig:/home/coder/.gitconfig:ro \ |
| 225 | + --env-file config/config.env \ |
| 226 | + ai-coding-tools |
| 227 | +``` |
| 228 | + |
| 229 | +## 📁 目录映射说明 |
| 230 | + |
| 231 | +| 主机目录 | 容器目录 | 用途 | |
| 232 | +| -------------- | ------------------------------ | ---------- | |
| 233 | +| `./projects` | `/home/coder/projects` | 你的项目代码 | |
| 234 | +| `./config` | `/home/coder/.config/ai-tools` | CLI 工具配置 | |
| 235 | +| `./cache` | `/home/coder/.cache` | 缓存数据 | |
| 236 | +| `~/.gitconfig` | `/home/coder/.gitconfig` | Git 配置(只读) | |
| 237 | +| `~/.ssh` | `/home/coder/.ssh` | SSH 密钥(只读) | |
| 238 | + |
| 239 | +## 💡 使用示例 |
| 240 | + |
| 241 | +进入容器后: |
| 242 | + |
| 243 | +```bash |
| 244 | +# 加载配置 |
| 245 | +source ~/.config/ai-tools/config.env |
| 246 | + |
| 247 | +# 使用 Claude Code |
| 248 | +cd projects/my-project |
| 249 | +claude |
| 250 | + |
| 251 | +# 使用 Aider |
| 252 | +aider --model gpt-4 |
| 253 | + |
| 254 | +# 使用 GPT Engineer |
| 255 | +gpt-engineer projects/new-project |
| 256 | + |
| 257 | +# 使用 Continue |
| 258 | +cn chat |
| 259 | +``` |
| 260 | + |
| 261 | +## 🔒 安全建议 |
| 262 | + |
| 263 | +1. **不要提交配置文件**: |
| 264 | + |
| 265 | + ```bash |
| 266 | + echo "config/config.env" >> .gitignore |
| 267 | + echo ".env" >> .gitignore |
| 268 | + ``` |
| 269 | + |
| 270 | +2. **使用环境变量文件** (docker-compose): |
| 271 | + 创建 `.env` 文件在项目根目录: |
| 272 | + |
| 273 | + ``` |
| 274 | + OPENAI_API_KEY=sk-... |
| 275 | + ANTHROPIC_API_KEY=sk-ant-... |
| 276 | + ``` |
| 277 | + |
| 278 | +3. **限制文件权限**: |
| 279 | + |
| 280 | + ```bash |
| 281 | + chmod 600 config/config.env |
| 282 | + ``` |
| 283 | + |
| 284 | +```` |
| 285 | + |
| 286 | +**额外的 .gitignore**: |
| 287 | + |
| 288 | +```gitignore |
| 289 | +# 配置文件(包含敏感信息) |
| 290 | +config/config.env |
| 291 | +config/.env |
| 292 | +.env |
| 293 | + |
| 294 | +# 缓存目录 |
| 295 | +cache/ |
| 296 | + |
| 297 | +# 项目文件(根据需要调整) |
| 298 | +projects/* |
| 299 | +!projects/.gitkeep |
| 300 | +```` |
| 301 | + |
| 302 | +这个改进版本提供了: |
| 303 | + |
| 304 | +1. ✅ **配置文件管理**: 通过 volume 映射 `.config` 目录 |
| 305 | +2. ✅ **项目目录映射**: 持久化你的代码 |
| 306 | +3. ✅ **缓存目录**: 提升性能 |
| 307 | +4. ✅ **Git 集成**: 映射 gitconfig 和 SSH 密钥 |
| 308 | +5. ✅ **环境变量支持**: 多种方式配置 API keys |
| 309 | +6. ✅ **安全性**: 配置文件不进入镜像,使用 volume 挂载 |
| 310 | +7. ✅ **易用性**: docker-compose 简化启动流程 |
0 commit comments